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