SURF matching

17 次查看(过去 30 天)
km g
km g 2011-8-15
SURF descriptor will extract one vector with length 64. If i want to match between two regions, how am i going to match this two descriptor?i search a lot of information and mostly they use euclidean distance to get the value. if i use euclidean distance, how can i going to do that? by minus each 64 value with other 64 values in the other region? or each one value compare with other 64 value?if 64 * 64 =4096, then the process will be very time consuming! anyone pls answer me?!
  2 个评论
Jan
Jan 2011-8-15
Please post more details, most of all the code you have created already.
km g
km g 2011-8-16
length=20*s/2;
g=fspecial('gaussian',[(2*length)+1 (2*length)+1],3.3*s);
theta=-direction*pi/180;
[diy,dix]=ndgrid(-length-1:length+1,-length-1:length+1);
test(1:200,1:200)=0;
for m=1:size(dix,1)
for n=1:size(dix,2)
test(r+diy(m,n),c+dix(m,n))=z1(r+diy(m,n),c+dix(m,n));
end
end
for m=1:size(diy,1)
for n=1:size(diy,2)
newx(m,n)=(dix(m,n)*cos(theta))-(diy(m,n)*sin(theta));
newy(m,n)=(dix(m,n)*sin(theta))+(diy(m,n)*cos(theta));
end
end
cox=round(c+newx);
coy=round(r+newy);
cox=cox(:);
coy=coy(:);
test2(1:200,1:200)=0;
for cc=1:size(cox,1)
newmapping(cc)= z1(coy(cc),cox(cc));
test2(coy(cc),cox(cc))=z1(coy(cc),cox(cc));
end
newmapping=reshape(newmapping,23,23);
figure,imshow(test,[]);
figure,imshow(test2,[]);
figure,imshow(newmapping,[]);
% g=g(:);
sizec=2*s;
sizer=2*s;
%
% nhaarx(1:200,1:200)=NaN;
% nhaary(1:200,1:200)=NaN;
for cc=2:22
for rr=2:22
nhaarx(rr-1,cc-1)=(boxintegral(rr-sizer/2,cc,newmapping,sizec/2,sizer)-boxintegral(rr-sizer/2,cc-sizec/2,newmapping,sizec/2,sizer));
nhaary(rr-1,cc-1)=(boxintegral(rr,cc-sizec/2,newmapping,sizec,sizer/2)-boxintegral(rr-sizer/2,cc-sizec/2,newmapping,sizec,sizer/2));
end
end
%
% figure,imshow(nhaarx,[]);
% figure,imshow(nhaary,[]);
for m=1:size(nhaarx,1)
for n=1:size(nhaary,2)
if dix(m,n)==0 || diy(m,n)==0
nhaarx(m,n)=NaN;
nhaary(m,n)=NaN;
end
end
end
q=1;
for m=1:size(nhaarx,1)
for n=1:size(nhaarx,2)
if isnan(nhaarx(m,n))==0 && isnan(nhaary(m,n))==0
newregionxx(q,1)=nhaarx(m,n);
newregionyy(q,1)=nhaary(m,n);
q=q+1;
end
end
end
si=sqrt(size(newregionxx,1)*size(newregionxx,2));
newregionx=reshape(newregionxx(:,1),si,si);
newregiony=reshape(newregionyy(:,1),si,si);
figure,imshow(newregionx,[]);
figure,imshow(newregiony,[]);
p=1;
gap=20*s/4;
for m=1:gap:size(newregionx,1)
for n=1:gap:size(newregiony,1)
[sumx,sumax,sumy,sumay]=getvector(m,n,gap,newregionx,newregiony);
sx(p)=sumx;
sy(p)=sumy;
sax(p)=sumax;
say(p)=sumay;
p=p+1;
end
end
descriptorv(1:16)=sx(:);
descriptorv(17:32)=sy(:);
descriptorv(33:48)=sax(:);
descriptorv(49:64)=say(:);
descriptorvv(1:16)=sy(:);
descriptorvv(17:32)=sx(:);
descriptorvv(33:48)=say(:);
descriptorvv(49:64)=sax(:);

请先登录,再进行评论。

回答(1 个)

David Young
David Young 2011-8-15
The Euclidean distance between vectors A and B is computed simply using
norm(A-B)
This applies to SURF descriptor vectors too.
  5 个评论
David Young
David Young 2011-8-17
You can either rotate the image patch, or you can rotate the kernels, but not both.
km g
km g 2011-8-18
if i rotate the image patch, then do i need to compute the integral image again for the rotated image patch?or i directly use the integral image of that part by using the one that compute earlier?

请先登录,再进行评论。

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by