一篇文章讲明白Harris角点

简介: 一篇文章讲明白Harris角点

1. 不同类型的角点

在现实世界中,角点对应于物体的拐角,道路的十字路口、丁字路口等。从图像分析的角度来定义角点可以有以下两种定义:

角点可以是两个边缘的角点;

角点是邻域内具有两个主方向的特征点;

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

基于图像灰度的方法通过计算点的曲率及梯度来检测角点,避免了第一类方法存在的缺陷,此类方法主要有Moravec算子、Forstner算子、Harris算子、SUSAN算子等。

这篇文章主要介绍的Harris角点检测的算法原理,比较著名的角点检测方法还有jianbo Shi和Carlo Tomasi提出的Shi-Tomasi算法,这个算法开始主要是为了解决跟踪问题,用来衡量两幅图像的相似度,我们也可以把它看为Harris算法的改进。OpenCV中已经对它进行了实现,接口函数名为GoodFeaturesToTrack()。另外还有一个著名的角点检测算子即SUSAN算子,SUSAN是Smallest Univalue Segment Assimilating Nucleus(最小核值相似区)的缩写。SUSAN使用一个圆形模板和一个圆的中心点,通过圆中心点像素与模板圆内其他像素值的比较,统计出与圆中心像素近似的像元数量,当这样的像元数量小于某一个阈值时,就被认为是要检测的角点。我觉得可以把SUSAN算子看为Harris算法的一个简化。这个算法原理非常简单,算法效率也高,所以在OpenCV中,它的接口函数名称为:FAST() 。

2. Harris角点

2.1 基本原理

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

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

c(x,y;Δx,Δy)=∑(u,v)∈W(x,y)w(u,v)(I(u,v)–I(u+Δx,v+Δy))2c(x,y;Δx,Δy)=∑(u,v)∈W(x,y)w(u,v)(I(u,v)–I(u+Δx,v+Δy))2c(x,y;\Delta x,\Delta y) = \sum_{(u,v)\in W(x,y)}//代码效果参考:– I(u+\Delta x,v+\Delta 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)(\Delta x,\Delta y)后进行一阶近似:

I(u+Δx,v+Δy)=I(u,v

相关文章
|
5月前
|
计算机视觉 Python
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
OpenCV轮廓拟合与凸包的讲解与实战应用(附Python源码)
122 0
|
4月前
|
算法 前端开发 计算机视觉
一篇文章讲明白Harris角点
一篇文章讲明白Harris角点
26 0
|
5月前
|
Python
优化哈里斯角例子
优化哈里斯角例子。
24 2
|
5月前
|
计算机视觉 Python
Hough变换原理-直线检测
Hough变换原理-直线检测
73 2
|
存储 算法 计算机视觉
【OpenCV图像处理8】图像轮廓
【OpenCV图像处理8】图像轮廓
254 0
|
5月前
|
算法 计算机视觉
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
OpenCV对图像进行Otsu二值分割、Canny边缘检测、Harris角点检测实战(附源码)
82 0
|
5月前
|
算法 数据挖掘 计算机视觉
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
OpenCV中应用尺度不变特征变换SIFT算法讲解及实战(附源码)
68 0
|
11月前
harris角点检测
harris角点检测
35 0
|
算法 计算机视觉
一种基于Harris-Laplace算法的角点检测方法(Matlab代码实现)
一种基于Harris-Laplace算法的角点检测方法(Matlab代码实现)
201 0
|
算法
秒懂算法 | 计算几何:圆
计算几何的基础是点积和叉积,它们定义了向量的大小和方向的关系,是其他计算几何概念和算法的出发点。在点积和叉积的基础上,本篇重点介绍圆覆盖。 计算几何题目的代码大多繁琐冗长,因此掌握模板代码是学习计算几何的关键。本篇精心组织了经典的几何模板
18089 1
秒懂算法 | 计算几何:圆