角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用

角点检测(Harris & Shi-Tomas)的原理及OpenCV API 的应用

这篇博客的内容主要时对参考中多篇博客的总结。

1. 角点

在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。关于角点的具体描述可以有几种:

  • 1). 一阶导数(即灰度的梯度)的局部最大所对应的像素点;

  • 2). 两条及两条以上边缘的交点;

  • 3). 图像中梯度值和梯度方向的变化速率都很高的点;

  • 4).角点处的一阶导数最大,二阶导数为零,指示物体边缘变化不连续的方向。

从求解思路上可以分为两种,一种基于边缘,一种基于图像灰度。前者往往需要对图像边缘进行编码,这在很大程度上依赖于图像的分割与边缘提取,具有相当大的难度和计算量,且一旦待检测目标局部发生变化,很可能导致操作的失败。早期主要有 Rosenfeld 和 Freeman 等人的方法,后期有 CSS 等方法,参考下图。

基于图像灰度的方法通过计算点的曲率及梯度来检测角点,避免了第一类方法存在的缺陷,此类方法主要有Moravec 算子、Forstner 算子、Harris 算子、SUSAN 算子等。
在这里插入图片描述
这篇文章主要介绍 Harris 角点检测的算法原理。

2. Harris角点

2.1 基本原理

Harris 角点检测是一种直接基于灰度图的角点提取算法,稳定性高,尤其对L型角点(也就是直角)检测精度高。缺点也是明显的,就是运算速度慢。

人眼对角点的识别通常是在一个局部的小区域或小窗口完成的。

  • 如果在各个方向上移动这个特定的小窗口,窗口内区域的灰度发生了较大的变化,那么就认为在窗口内遇到了角点;
  • 如果这个特定的窗口在图像各个方向上移动时,窗口内图像的灰度没有发生变化,那么窗口内就不存在角点;
  • 如果窗口在某一个方向移动时,窗口内图像的灰度发生了较大的变化,而在另一些方向上没有发生变化,那么,窗口内的图像可能就是一条直线的线段。

image

对于图像 ,当在点 ( x , y ) (x,y) (x,y)处平移 ( Δ x , Δ y ) (Δx,Δy) (Δx,Δy)后的自相似性,可以通过自相关函数给出:

c ( x , y ; Δ x , Δ y ) = ∑ ( u , v ) ∈ W ( x , y ) w ( u , v ) ( I ( u , v ) – I ( u + Δ x , v + Δ y ) ) 2 c(x,y;Δx,Δy)=\sum_{(u,v)∈W(x,y)}w(u,v)(I(u,v)–I(u+Δx,v+Δy))^2 c(x,y;Δx,Δy)=(u,v)W(x,y)w(u,v)(I(u,v)I(u+Δx,v+Δy))2
其中, w ( x , y ) w(x,y) w(x,y)是以点 ( x , y ) (x,y) (x,y)为中心的窗口, w ( u , v ) w(u,v) w(u,v)为加权函数,它既可是常数,也可以是高斯加权函数。

在这里插入图片描述

根据泰勒展开,对图像 I ( x , y ) I(x,y) I(x,y)在平移 ( Δ x , Δ y ) (Δx,Δy) (Δx,Δy)后进行一阶近似:

I ( u + Δ x , v + Δ y ) = I ( u , v ) + I x ( u , v ) Δ x + I y ( u , v ) Δ y + O ( Δ x 2 , Δ y 2 ) ≈ I ( u , v ) + I x ( u , v ) Δ x + I y ( u , v ) Δ y \begin{aligned} I(u+Δx,v+Δy) =&I(u,v)+I_x(u,v)Δx+I_y(u,v)Δy+O(Δx2,Δy2)\\ ≈&I(u,v)+I_x(u,v)Δx+I_y(u,v)Δy \end{aligned} I(u+Δx,v+Δy)=I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy+O(Δx2,Δy2)I(u,v)+Ix(u,v)Δx+Iy(u,v)Δy
其中, I x , I y I_x,I_y Ix,Iy是图像 I ( x , y ) I(x,y) I(x,y)的偏导数,这样的话,自相关函数则可以简化为:
c ( x , y ; Δ x , Δ y ) ≈ ∑ w ( I x ( u , v ) Δ x + I y ( u , v ) Δ y ) 2 = [ Δ x , Δ y ] M ( x , y ) [ Δ x Δ y ] \begin{aligned} c(x,y;Δx,Δy)≈&∑_w(I_x(u,v)Δx+I_y(u,v)Δy)^2\\ = &[Δx,Δy]M(x,y) \left[ \begin{matrix} Δx \\ Δy\end{matrix} \right] \end{aligned} c(x,y;Δx,Δy)=w(Ix(u,v)Δx+Iy(u,v)Δy)2[Δx,

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值