毕业设计要做摄像机的参数标定,角点检测是一个重要步骤。
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+');
标定板角点检测效果图: