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+');

标定板角点检测效果图:

posted @ 2013-04-01 16:54  BeatLJ  阅读(314)  评论(0编辑  收藏  举报