SIFT精确特征点之去除灰度伪特征点

来源:互联网 发布:centos搭建vpn服务器 编辑:程序博客网 时间:2024/04/30 17:08

接着上一篇的 去除了候选特征点中不稳定噪声点  现在继续进一步精确特征点  即去除灰度伪特征点

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)<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
        end
    end
end

 [X,Y]=find(E11==1 | E11==-1);

[M,N]=size(X);
r=10;
>> 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

这是上一篇中讲到去除不稳定噪声点后的程序 从1756个特征点中去除了不稳定噪声点得到1593个特征点  现在继续去除灰度伪特征点

[X,Y]=find(E11==1 | E11==-1);
[p,q]=size(X);
>> for i=1:p
    dx=(D12(X(i),Y(i)+1)-D12(X(i),Y(i)-1))/2;
    dy=(D12(X(i)+1,Y(i))-D12(X(i)-1,Y(i)))/2;
    ds=(D13(X(i),Y(i))-D11(X(i),Y(i)))/2;
    dD=[dx,dy,ds]';
    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;
    dss=D13(X(i),Y(i))+D11(X(i),Y(i))-2*D12(X(i),Y(i));
    dxs=(D13(X(i),Y(i)+1)-D13(X(i),Y(i)-1)-D11(X(i),Y(i)+1)+D11(X(i),Y(i)-1))/4;
    dys=(D13(X(i)+1,Y(i))-D13(X(i)-1,Y(i))-D11(X(i)+1,Y(i))+D11(X(i)-1,Y(i)))/4;
    Hiss=[dxx,dxy,dxs;dxy,dyy,dys;dxs,dys,dss];
    XX=-inv(Hiss)*dD;
    DD=D13(X(i),Y(i))+0.5*dD'*XX;
    if(DD<0.03)
        E11(X(i),Y(i))=0;
    end
end
>> [X22,Y22]=find(E11==1 | E11==-1);
>> imshow(H)
>> hold on
>> plot(Y22,X22,'rx')

所有的求导无论是对x,y,sigma求导 还是对它们求混合偏导  都是用差分近似代替

结果如下:



可以去和上一篇的结果对比  可以发现特征点减少了  不对比 从数据看也看得到  特征点只有770个了  也就是从上一步的1593个中剔除了823个  

这里我的阈值设置的是0.03  后来我看到别的论文有的设置的0.04  可以自己再试一下  看改变阈值带来的效果


其实最好别像我一样用鱼眼图像  用一幅正常的方方正正的图像比较好  效果比较好  因为我的鱼眼没有插值  四周灰度变化太明显  边缘响应就很严重   还是用别的图试  效果应该很漂亮

0 0