MATLAB——Harris角点検出


碁盤ボードの角点検出を完了するために、ここに記録します.
コーナー:最も直接的な定義は、水平、垂直の2つの方向の変化が大きいポイントです.
最もよく使われる角点検出アルゴリズムはHarris角点検出方法であり、原理は以下の通りである.
  • 計算画像I(x,y)のX方向とY方向の勾配Ix,Iy
  • 画像の2方向勾配の積
  • を計算する.
  • ガウス関数を使用してIx^2、Iy^2、およびIxyをガウス重み付け(σ=1)マトリクスMの要素A,B,C
  • を生成する.
  • は、各画素のHarris応答値Rを算出し、ある閾値t未満のRをゼロ
  • とする.
  • は3×3または5×5の近傍では非最大値抑制が行う、局所最大値点は画像中の角点
  • である.
    matlabでこの方法を実験し,コードは以下の通りである.
    function [posr,posc]=Harris1(in_image,a)
    %   :    harris  
    % in_image-    rgb    
    % a--      ,    :0.04~0.06
    % [posr,posc]-    
    in_image=rgb2gray(in_image);
    I=double(in_image);
    %%%%  xy    %%%%%
    
    fx=[-1,0,1];%x      
    Ix=filter2(fx,I);%x    
    fy=[-1;0;1];%y      (     )
    Iy=filter2(fy,I);
    %%%%           %%%%%
    Ix2=Ix.^2;
    Iy2=Iy.^2;
    Ixy=Ix.*Iy;
    %%%%                 %%%%
    %    7*7      ,sigma  2
    h=fspecial('gaussian',[3,3],2);
    IX2=filter2(h,Ix2);
    IY2=filter2(h,Iy2);
    IXY=filter2(h,Ixy);
    %%%%%       Harris   %%%%%
    [height,width]=size(I);
    R=zeros(height,width);
    %  (i,j)  Harris   
    for i=1:height
        for j=1:width
            M=[IX2(i,j) IXY(i,j);IXY(i,j) IY2(i,j)];
            R(i,j)=det(M)-a*(trace(M))^2;
        end
    end
    %%%%%      Harris %%%%%
    Rmax=max(max(R));
    %  
    t=0.005*Rmax;
    for i=1:height
        for j=1:width
            if R(i,j)

    規則的な碁盤標板に対して、正確に検出することができ、不規則な碁盤標板に対して、エッジ領域に誤差があり、角点パラメータaを変えることは結果にわずかな影響を及ぼし、この方法には問題があり、同じ角点に対して繰り返し検出する:同じ角点付近に座標の差の細かい複数の角点座標を同時に位置決めし、最終結果に影響を与える.