4、如需算出齿轮齿数需对图像进行角点检测,角点作为图像上的特征点,包含有重要的信息,
在图像融合和目标跟踪及三维重建中有重要的应用价值。但是基于实际应用需求,从角点检测的快速性、准确性、鲁棒性等要求出发,可以看出上面对各种角点检测算法的分析各有利弊。直接基于图像的角点检测基本上是全局搜索;基于边缘轮廓的角点检测数据量较少,可以采用多分辨分析并行处理,从灰度图像得到边缘轮廓曲线要经过两次以上的全局搜索,速度并不是很快,但对角点的误检和漏检要比直接基于图像的方法好得多。如果在得到轮廓曲线的过程中应用一些其他的变换方法,就计算的速度而言,下降不少,所以一般快速的、较准确的角点检测使用直接基于图像模板的方法完全可以满足需要,但如果对角点的完备性要求较高,那么使用基于轮廓线的多尺度分析方法应该给予考虑。
具体的算法如下:
[m n]=size(bw1);%角点检测 tmp=zeros(m+2,n+2); tmp(2:m+1,2:n+1)=bw1; Ix=zeros(m+2,n+2); Iy=zeros(m+2,n+2); E=zeros(m+2,n+2);
Ix(:,2:n)=tmp(:,3:n+1)-tmp(:,1:n-1); Iy(2:m,:)=tmp(3:m+1,:)-tmp(1:m-1,:); Ix2=Ix(2:m+1,2:n+1).^2; Iy2=Iy(2:m+1,2:n+1).^2;
Ixy=Ix(2:m+1,2:n+1).*Iy(2:m+1,2:n+1); h=fspecial('gaussian',[7 7],2);
Ix2=filter2(h,Ix2); Iy2=filter2(h,Iy2); Ixy=filter2(h,Ixy); Rmax=0;
R=zeros(m,n); for i=1:m for j=1:n
M=[Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)]; R(i,j)=det(M)-0.06*(trace(M))^2; if R(i,j)>Rmax Rmax=R(i,j); end end