对角点从两个不同的角度定义:一是角点是两个边缘的角点,二是角点是邻域内具有两个主方向的特征点。角点所在的邻域通常也是图像中稳定的、信息丰富的区域,这些领域可能具有某些特性,如旋转不变性,尺度不变性、仿射不变性
和光照度不变性。对角点的检测一般分为两类:基于图像边缘的检测方法和基于图像灰度检测方法。Harris算子属于基于图像灰度检测的方法。
评价角点检测算法性能优劣主要从以下五个方面来考虑:
准确性、定位性、稳定性、实时性、鲁棒性。
Harris角点检测的性质:
1、参数a对角点检测的影响:a值越大,将减小响应值R,降低角点检测的灵敏性,减少被检测角点的数量。a越小,则相反
2、Harris角点检测算子对亮度和对比度的变化不敏感
3、Harris角点检测算子具有旋转不变性
4、Harris角点检测算子具有尺度不变性
下面是Harris角点检测的Matlab代码实现:
<span style="font-size:14px;">function [posr,posc]=Harris1(in_image,a)
in_image=rgb2gray(in_image);
ori_im=double(in_image);
fx=[-1 0 1];
Ix=filter2(fx,ori_im);
fy=[-1;0;1];
Iy=filter2(fy,ori_im);
Ix2=Ix.^2;
Iy2=Iy.^2;
Ixy=Ix.*Iy;
h=fspecial('gaussian',[7 7],2);
Ix2=filter2(h,Ix2);
Iy2=filter2(h,Iy2);
Ixy=filter2(h,Ixy);
[height,width]=size(ori_im);
R=zeros(height,width);
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
Rmax=max(max(R));
t=0.01*Rmax;
for i=1:height
for j=1:width
if R(i,j)<t
R(i,j)=0;
end
end
end
corner_peaks=imregionalmax(R);
countnum=sum(sum(corner_peaks));
[posr,posc]=find(corner_peaks==1);
figure;
imshow(in_image)
hold on
for i=1:length(posr)
plot(posc(i),posr(i),'r+');
end</span>
处理结果如下: