Harris Corner Detector 原理及编程实现

原理:

灰度变化率有函数如下:

其中的W(x,y)函数如下

有函数f(x+u,y+v),则其泰勒展开为:


对图片pitch来说,套用刚刚的展开,我们想要计算patch和相邻patch的距离就是:



下面,让我们回到最开始的公式,并对中括号里的内容做相应展开:

我们把W(x,y)和矩阵结合起来,用一个新的符号M来表示:

最开始公式就简化成了以下的形式:

以上就是Harris的公式推导。


Harris intuition:

Harris采用了一种新的角点判定方法。矩阵M的两个特征向量l1和l2与矩阵M的主曲率成正比。Harris利用l1, l2来表征变化最快和最慢的两个方向.若两个都很大就是角点,一个大一个小就是边缘,两个都小就是在变化缓慢的图像区域.

                            

图1- 4用矩阵M的特征向量分类图像像素点

但是解特征向量需要比较多的计算量,且两个特征值的和等于矩阵M的迹,两个特征值的积等于矩阵M的行列式。所以用(1-4)式来判定角点质量。(k常取0.04-0.06)

R在两个特征值平面上的梯度表示如下:




Harris算法实现

Step 1:对每一像素点计算相关矩阵M。

Step 2:计算每像素点的Harris 角点响应。 

Step 3.在w*w范围内寻找极大值点,若Harris 角点响应大于阀值,则视为角点。

Harris算子对灰度的平移是不变的,因为只有差分,对旋转也有不变性,但是对尺度很敏感,在一个尺度下是角点, 在在另一个尺度下可能就不是了.

编程实现:

fx = [-1 0 1;-1 0 1;-1 0 1];          % 高斯函数一阶微分,x方向(用于改进的Harris角点提取算法) 
%fx = [-2 -1 0 1 2];                 % x方向梯度算子(用于Harris角点提取算法) 
Ix = filter2(fx,ori_im);              % x方向滤波 
fy = [-1 -1 -1;0 0 0;1 1 1];          % 高斯函数一阶微分,y方向(用于改进的Harris角点提取算法) 
% fy = [-2;-1;0;1;2];                 % y方向梯度算子(用于Harris角点提取算法) 
Iy = filter2(fy,ori_im);              % y方向滤波 

3)考虑到图像一般情况下的噪声影响,采用高斯滤波去除噪声点。

Ix2 = Ix.^2; 
Iy2 = Iy.^2; 
Ixy = Ix.*Iy; 
clear Ix; 
clear Iy; 
h= fspecial('gaussian',[7 7],2);      % 产生7*7的高斯窗函数,sigma=2 
 
Ix2 = filter2(h,Ix2); 
Iy2 = filter2(h,Iy2); 
Ixy = filter2(h,Ixy); 

4)计算角点的准则函数R(即用一个值来判断该点来衡量这个点是否是角点),并标记角点(R(i,j)>0.01*Rmax,且R(i,j)为3x3邻域局部最大值)。

M = [Ix2(i,j) Ixy(i,j);Ixy(i,j) Iy2(i,j)];
R(i,j) = det(M)-k*(trace(M))^2; % 计算R

【可以通过改变准则函数的计算来改进harris算法,上式中的k一般取0.04~0.06】

[height,width] = size(ori_im); 
result = zeros(height,width);         % 纪录角点位置,角点处result的值为1 
R = zeros(height,width); 

  

Rmax = 0;                              % 图像中最大的R值 
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)-0.06*(trace(M))^2;          
        if R(i,j) > Rmax 
            Rmax = R(i,j); 
        end 
    end
end
 
cnt = 0; %角点个数
for i = 2:height-1 
    for j = 2:width-1 
        % 进行非极大抑制,窗口大小3*3 
        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) 
            result(i,j) = 1; 
            cnt = cnt+1; 
        end
    end
end
 
[posc, posr] = find(result == 1); 
disp(cnt);                 % 显示角点个数 
imshow(ori_im); 
hold on; 
plot(posr,posc,'r+'); 

以上信息来源:

详细原理及公式推导http://www.cse.psu.edu/~rcollins/CSE486/lecture06.pdf

算法精讲及总结http://blog.163.com/zhaowei0425@126/blog/static/47586030201132611115984/

编程实现http://www.cnblogs.com/blue-lg/archive/2011/12/17/2291139.html

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
### 回答1: Harris 角点检测器是一种计算机视觉算法,用于检测图像中的角点。它是由 Chris Harris 和 Mike Stephens 在 1988 年提出的。该算法通过计算图像中每个像素的灰度值的变化率来检测角点。如果一个像素的灰度值在不同方向上的变化率都很大,那么它就很可能是一个角点。Harris 角点检测器在计算机视觉中被广泛应用,例如在图像配准、目标跟踪和三维重建等领域。 ### 回答2: Harris角点检测器是一种在计算机视觉中常用的特征提取方法,由Chris Harris和Mike Stephens在1988年提出。其主要用于角点检测,即在图像中寻找具有局部最大变化的像素点,通常被视为图像中的特殊点。 Harris角点检测器的核心思想是通过对窗口内的像素灰度值进行变换(如Sobel算子),得到该窗口中像素点的梯度和方向。然后,利用这些梯度和方向信息来计算每个像素点的角点响应值,该值将显示角点的强度。 计算角点响应值时,Harris采用了二次方程模型,其公式为:R=det(M)-k*(tr(M))^2,其中M是一个2x2的矩阵,用来描述像素点附近的图像局部结构。det(M)表示M的行列式,tr(M)表示M的迹,k是一个常数,用于调整角点响应值的相对重要性。 若M的两个特征值都很大,则表示像素点临近区域内的灰度值变化很强,是角点。若一个特征值很大,而另一个特征值很小,则表示该像素点所在区域是边缘。若两个特征值都很小,则表示该像素点所在区域是灰度值均匀的区域,不是特殊点。 一旦计算出每个像素点的角点响应值,便可通过一个阈值来筛选出真正的角点。一般而言,角点响应值大于某个设定阈值的像素点才被认定为角点。 总的来说,Harris角点检测器是一种简单有效的特征提取方法,具有不受缩放旋转变换影响、对噪声具有一定鲁棒性等优点。因此,它在计算机视觉中得到广泛应用,如图像识别、目标跟踪等领域。 ### 回答3: Harris角点检测器是一种常见的计算机视觉算法,用于检测图像中的角点特征。角点是指在图像中发生了明显变化的像素位置,这些像素通常是物体边界的交点或者拐角位置。由于角点在不同图像中往往是唯一的,因此角点特征很适合用于计算机视觉领域的目标识别、跟踪、拼接等任务。 Harris角点检测器是由Chris Harris和Mike Stephens在1988年提出的。这种方法通过计算图像中每个像素周围一定范围内像素值的方差和协方差矩阵来判断每个像素是否为角点。基本思路是:如果某个像素周围的像素都是相似的,则该像素可能是平坦区域或者边缘,而不是角点;如果某个像素周围的像素在不同方向上都有差异,则该像素可能是角点。 Harris角点检测器的具体算法步骤如下: 1. 计算每个像素点周围一定范围内像素值的梯度和方向。 2. 计算每个像素点的协方差矩阵,即对于一个像素点(x, y),其协方差矩阵为: ![image.png](attachment:image.png) 其中,Ix和Iy分别是x和y方向的梯度值。 3. 对于每个像素点,计算其响应函数R,即: ![image-2.png](attachment:image-2.png) 其中,k是一个常数,一般取较小的值,如0.04。 4. 针对每个像素点的R值,通过阈值筛选出角点。 5. 对于可能产生误检测的情况,可以通过非极大值抑制和距离筛选等方法进行更进一步的优化。 总体来说,Harris角点检测器是一种简单但有效的特征提取方法,在计算机视觉、图像处理等领域得到了广泛应用。此外,针对不同的任务和应用场景,还有许多基于Harris角点检测器的改进算法,如SIFT、SURF和FAST等,都在一定程度上提高了角点特征的稳定性和鲁棒性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值