特征检测:白话Harris角点检测

角点是一个可重复、可靠、显著的特征。在特征匹配中用来检测特征点的位置。

本篇博客,用大白话谈一谈自己对Harris角点检测算法的理解。

Harris实际上是设计了一个准则来度量角点的特点。角点有啥特点呢?显著的特点就是:在角点的邻域,图像邻域有两个以上的主方向,即邻域范围内方向导数的和有多个极值。直观感受下图,

这里写图片描述

下式还不是度量角点的准则,它是描述邻域方向导数和:

E(u,v)=x,yw(x,y)[I(x+u,y+v)I(x,y)]2

这里写图片描述

分析这个式子: x y是图像坐标。 u v是滑动的坐标主轴方向,是式子的变量 E 是邻域各个方向导数的和值。

窗口函数说明是通过邻域信息得到的角点。这是合理的,因为单点只可确定一个梯度,如果单纯依据单个点的信息,是不可能的。窗口是对各个点的梯度贡献的加权。可以是二维阶跃,这种情况下所有点权值相同。可以是二维高斯,这种情况离中心点越近,权值越大。

中括号里的差式,表征了尝试从不同的滑动方向求取邻域方向导数的和。可以预料到,如果结果是角点,该式会有两个以上显著的极值。


数学家总能利用数学工具演化和提取信息。怎么抽离变量(u,v),依据图像邻域像素信息,来判断角点呢?

推导式子:

E(u,v)[uv]M[uv]

其中

M=x,yw(x,y)[I2xIxIyIxIyI2y]

M 式子前面表示在需要检测角点的邻域窗口求和。


再来,

M=I2xIxIyIxIyI2y=[λ100λ2]

已经很简化了,将 M 带入E(u,v)[uv]M[uv],可知当 λ1 越大,该点的邻域在 x 方向导数越大,当λ2越大,该点的邻域在 y 方向导数越大。对应如下角点:

这里写图片描述

但如果两个“梯度”不是x方向和 y 方向呢?比如这样的角点:

这里写图片描述

既然M是对称的,可以写作(奇异值分解):

M=R1[λ100λ2]R

我们可以把 M 看成一个椭圆,长轴和短轴由两个特征值决定,R影响椭圆的方向。

这里写图片描述

这里写图片描述


所以角点的特征就是 λ1 λ2 都尽可能大,而且两者的值差异应该小一些。

这里写图片描述

怎么定量描述?作者设计了一个响应函数:

θ=det(M)αtrace(M)2=λ1λ2α(λ1+λ2)2

这么设计有它的优点。特征值之和对应矩阵的迹,积对应矩阵行列式的值,这样就可避免计算费时的特征值的计算。在回头看看 M 矩阵的初始形式,可以看出整个算法计算量大的运算,包括求导数图像和高斯模糊。

α是个经验值,一般取0.04-0.06之间最好。

整个算法的计算过程,总结如下图:
这里写图片描述


参考资料:Lecture6_Detectors_Harris_cs131
Stanford University
CS 131 Computer Vision: Foundations and Applications

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在MATLAB中,可以使用Harris角点检测算法来进行特征匹配。Harris角点检测算法是一种经典的角点检测算法,它通过计算图像中每个像素点的角点响应函数来识别角点。 下面是一个使用Harris角点检测特征匹配的示例代码: ```matlab % 读取两幅图像 image1 = imread('image1.jpg'); image2 = imread('image2.jpg'); % 转换为灰度图像 grayImage1 = rgb2gray(image1); grayImage2 = rgb2gray(image2); % 使用Harris角点检测算法检测角点 cornerPoints1 = detectHarrisFeatures(grayImage1); cornerPoints2 = detectHarrisFeatures(grayImage2); % 提取角点特征描述符 features1 = extractFeatures(grayImage1, cornerPoints1); features2 = extractFeatures(grayImage2, cornerPoints2); % 进行特征匹配 indexPairs = matchFeatures(features1, features2); % 选取匹配点对 matchedPoints1 = cornerPoints1(indexPairs(:, 1)); matchedPoints2 = cornerPoints2(indexPairs(:, 2)); % 可视化匹配结果 figure; showMatchedFeatures(image1, image2, matchedPoints1, matchedPoints2, 'montage'); ``` 注意,在使用该代码之前,需要将`image1.jpg`和`image2.jpg`替换为实际的图像文件路径。 这段代码中,首先将两幅图像转换为灰度图像,然后利用`detectHarrisFeatures`函数检测图像中的角点,接着使用`extractFeatures`函数提取角点的特征描述符,最后使用`matchFeatures`函数进行特征匹配,并利用`showMatchedFeatures`函数可视化匹配结果。 希望对你有所帮助!如果有任何问题,请随时追问。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值