http://blog.csdn.net/abcjennifer/article/details/7639681
所述,在用SIFT得到候选特征点之后 还要进一步精确特征点 因为候选特征点中有两部分特征点需要去除掉 第一个是灰度伪特征点 即 从一个灰度比较小的区域由26个像素比较得到的极值点 其实并不是特征点 第二个是边缘不稳定噪声点 因为第一个难编一点 我先去除第二个边缘不稳定噪声点 公式里是对x,y和sigma求偏导 在编程时就用差分近似代替求偏导
昨天得到D12即DOG差分空间 以及装着特征点位置的E11 下面就用这两个就行了
A=imread('F:\orl_zhifangtu\s1.jpg');
T=40;
[A,R]=kuaisusaomiao(A,T);
[m,n,H]=size(A);
C=[];
x=n/2;
y=m/2;
for u=1:m
for v=1:n
i=u;
j=round(sqrt(R^2-(y-u)^2)*(v-x)/R+x);
if(R^2-(y-u)^2<0)
continue;
end
C(u,v,1)=A(i,j,1);
C(u,v,2)=A(i,j,2);
C(u,v,3)=A(i,j,3);
end
end
C=uint8(C);
C=rgb2gray(C);
H=C;
C=double(C);
[m1,n1,h1]=size(C);
k=2^(1/3);
threshold=3;
h11=fspecial('gaussian',[5 5],0.3);
C11=imfilter(C,h11,'conv');
h12=fspecial('gaussian',[5 5],0.4);
C12=imfilter(C,h12,'conv');
h13=fspecial('gaussian',[5 5],0.5);
C13=imfilter(C,h13,'conv');
h14=fspecial('gaussian',[5 5],0.6);
C14=imfilter(C,h14,'conv');
h15=fspecial('gaussian',[5 5],0.7);
C15=imfilter(C,h15,'conv');
h16=fspecial('gaussian',[5 5],0.8);
C16=imfilter(C,h16,'conv');
D11=C11-C12;
D12=C12-C13;
D13=C13-C14;
D14=C14-C15;
D15=C15-C16;
E11=zeros(m1,n1);
for i=3:m1-2
for j=3:n1-2
if(D12(i,j)>D12(i-1,j-1) && D12(i,j)>D12(i,j-1) && D12(i,j)>D12(i+1,j-1) && D12(i,j)>D12(i-1,j) && D12(i,j)>D12(i+1,j) && D12(i,j)>D12(i-1,j+1) && D12(i,j)>D12(i,j+1) && D12(i,j)>D12(i+1,j+1))
if(D12(i,j)>D11(i,j) && D12(i,j)>D11(i-1,j-1) && D12(i,j)>D11(i,j-1) && D12(i,j)>D11(i+1,j-1) && D12(i,j)>D11(i-1,j) && D12(i,j)>D11(i+1,j) && D12(i,j)>D11(i-1,j+1) && D12(i,j)>D11(i,j+1) && D12(i,j)>D11(i+1,j+1))
if(D12(i,j)>D13(i,j) && D12(i,j)>D13(i-1,j-1) && D12(i,j)>D13(i,j-1) && D12(i,j)>D13(i+1,j-1) && D12(i,j)>D13(i-1,j) && D12(i,j)>D13(i+1,j) && D12(i,j)>D13(i-1,j+1) && D12(i,j)>D13(i,j+1) && D12(i,j)>D13(i+1,j+1))
if(D12(i,j)>threshold)
E11(i,j)=1;
end
end
end
elseif(D12(i,j)
E11(i,j)=-1;
end
end
end
end
end
end
以上部分和昨天的一样 即得到候选特征点
[X,Y]=find(E11==1 | E11==-1);
[M,N]=size(X);
r=10;
此时的候选点有1756个 可以从MATLAB里看到
接下来去除不稳定噪声点
for i=1:M
dxx=D12(X(i),Y(i)+1)+D12(X(i),Y(i)-1)-2*D12(X(i),Y(i));
dyy=D12(X(i)+1,Y(i))+D12(X(i)-1,Y(i))-2*D12(X(i),Y(i));
dxy=(D12(X(i)+1,Y(i)+1)-D12(X(i)+1,Y(i)-1)-D12(X(i)-1,Y(i)+1)+D12(X(i)-1,Y(i)-1))/4;
tr=dxx+dyy;
det=dxx*dyy-dxy*dxy;
if(det<=0)
E11(X(i),Y(i))=0;
end
if(tr*tr/det>(r+1/r+1))
E11(X(i),Y(i))=0;
end
end
再在原图上显示出来
[X11,Y11]=find(E11==1 | E11==-1);
imshow(H)
hold on
plot(Y11,X11,'rx')
如果有心 可以把图放大了看到特征点的确少了一些 不放大也行 从数据也可以看到 现在特征点的数目只有1593个了 之前是1756个的 少了163个不稳定噪声点 当然 这个一下去除力度的大小可以通过参数调节 我这里取的r=10 有兴趣可以试下别的 然后看特征点是不是减少得厉害些