harris角点检测算法

毕业设计要做摄像机的参数标定,角点检测是一个重要步骤。

View Code
close all;

clear all;

clc



im=imread('checkbord.png');

im=rgb2gray(im);

[m n]=size(im);



I=zeros(m+2,n+2);

Ix=zeros(m+2,n+2);

Iy=zeros(m+2,n+2);

R=zeros(m+2,n+2);

flag=zeros(m,n);



I(2:m+1,2:n+1)=im;

Ix(:,2:n)=I(:,3:n+1)-I(:,1:n-1);

Iy(2:m,:)=I(3:m+1,:)-I(1:m-1,:);

A=Ix(2:m+1,2:n+1).^2;

C=Iy(2:m+1,2:n+1).^2;

B=Ix(2:m+1,2:n+1).*Iy(2:m+1,2:n+1);



h=fspecial('gaussian',[7 7],2);

A=filter2(h,A);

B=filter2(h,B);

C=filter2(h,C);



k=0.06;

Rmax=0;

for i=1:m

    for j=1:n

        M=[A(i,j) B(i,j); B(i,j) C(i,j)];

        R(i+1,j+1)=det(M)-k*(trace(M))^2;

        if R(i+1,j+1)>Rmax

            Rmax=R(i+1,j+1);

        end

    end

end



for i=2:m+1

    for j=2:n+1

        if R(i,j)>0.01*Rmax && ...

                R(i,j)>R(i-1,j-1) && R(i,j)>R(i-1,j) && R(i,j)>R(i-1,j+1) &&...

                R(i,j)>R(i,j-1) && R(i,j)>R(i,j+1) &&...

                R(i,j)>R(i+1,j-1) && R(i,j)>R(i+1,j) && R(i,j)>R(i+1,j+1)

                flag(i-1,j-1)=1;

        end

    end

end



[x y]=find(flag==1);



%figure,imshow(im);

figure,imshow(im);

hold on;

plot(y,x,'r+');

标定板角点检测效果图:

harris角点检测算法

你可能感兴趣的:(算法)