SURF matching

17 visualizzazioni (ultimi 30 giorni)
km g
km g il 15 Ago 2011
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 Commenti
Jan
Jan il 15 Ago 2011
Please post more details, most of all the code you have created already.
km g
km g il 16 Ago 2011
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(:);

Accedi per commentare.

Risposte (1)

David Young
David Young il 15 Ago 2011
The Euclidean distance between vectors A and B is computed simply using
norm(A-B)
This applies to SURF descriptor vectors too.
  5 Commenti
David Young
David Young il 17 Ago 2011
You can either rotate the image patch, or you can rotate the kernels, but not both.
km g
km g il 18 Ago 2011
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?

Accedi per commentare.

Community Treasure Hunt

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

Start Hunting!

Translated by