角点检测--基于梯度的方法(Moravec角点检测、Harris角点检测、Shi-Tomasi角点检测)
Moravec Detector
Moravec角点检测是第一个提出兴趣点(interest points)的Paper。它的主要思想是:以每个像素为中心,有一个固定的滑动窗口。该方法计算并在八个方向上(纵横以及斜对角)搜索每个像素的最小强度变化,如果最小值大于给定阈值,则检测出感兴趣点。
其可以用数学公式表达为:E(u,v)=∑x,yw(x,y)[I(x+u,y+v)−I(x,y)]2E(u, v)=\sum_{x, y} w(x, y)[I(x+u, y+v)-I(x, y)]^{2}E(u,v)=∑x,yw(x,y)[I(x+u,y+v)−I(x,y)]2
E(u,v)E(u,v)E(u,v)代表像素中心(x,y)(x,y)(x,y)在偏移量(u,v)(u,v)(u,v)的方向上的强度变化。
w(x,y)w(x,y)w(x,y)是一个指示函数,当(x,y)(x,y)(x,y)在滑动窗口内时,为1,若在滑动窗口外,则为0.
I(x,y)I(x,y)I(x,y)指的是在像素点(x,y)处的光强或者说是灰度值。
值得说明的是,这个式子是Harris总结的。
Harris Corner Detector
Moravec存在着许多不足。非常重要的一点就是:由于对于灰度值变化的梯度判断是离散的进行在8个方向,所以不具有旋转不变性;同时还会出现误判,尤其是当一条线不平行于这八个方向时,线上的点也会被误检测为角点。
为了进一步改进Moravec角点检测,Harris提出了著名的Harris角点检测。
E(u,v)=∑(x,y)w(x,y)[I(x+u,y+v)−I(x,y)]2≈∑(x,y)w(x,y)[I(x,y)+∂I∂x(x,y)u+∂I∂y(x,y)v−I(x,y)]2(一阶泰勒展开) ≈∑(x,y)w(x,y)[∂I∂x(x,y)u+∂I∂y(x,y)v]2(消除重复项) =∑x,yw(x,y)(u2fx2(x,y)+2uvfx(x,y)fy(x,y)+v2fy2(x,y))=∑x,yw(x,y)(u2Ix2+2uvIxIy+v2Iy2)(简化) =[uv](∑w(x,y)[Ix2IxIyIxIyIy2])[uv]=[uv]TH[uv]\begin{aligned} &E(u, v)=\sum_{(x, y)} w(x, y)[I(x+u, y+v)-I(x, y)]^{2}\\ &\approx \sum_{(x, y)} w(x, y)\left[I(x, y)+\frac{\partial I}{\partial x}(x, y) u+\frac{\partial I}{\partial y}(x, y) v-I(x, y)\right]^{2}\qquad\text { (一阶泰勒展开) }\\ &\approx \sum_{(x, y)} w(x, y)\left[\frac{\partial I}{\partial x}(x, y) u+\frac{\partial I}{\partial y}(x, y) v\right]^{2} \qquad \text { (消除重复项) }\\ &=\sum_{x, y} w(x, y)\left(u^{2} f_{x}^{2}(x, y)+2 u v f_{x}(x, y) f_{y}(x, y)+v^{2} f_{y}^{2}(x, y)\right)\text { }\\ &\begin{array}{l} =\sum_{x, y} w(x, y)\left(u^{2} I_{x}^{2}+2 u v I_{x} I_{y}+v^{2} I_{y}^{2}\right)\qquad \text { (简化) } \\ =\left[\begin{array}{ll} u & v \end{array}\right]\left(\sum w(x, y)\left[\begin{array}{cc} I_{x}^{2} & I_{x} I_{y} \\ I_{x} I_{y} & I_{y}^{2} \end{array}\right]\right)\left[\begin{array}{l} u \\ v \end{array}\right] \\ =\left[\begin{array}{l} u \\ v \end{array}\right]^{T} H\left[\begin{array}{l} u \\ v \end{array}\right] \end{array} \end{aligned} E(u,v)=(x,y)∑w(x,y)[I(x+u,y+v)−I(x,y)]2≈(x,y)∑w(x,y)[I(x,y)+∂x∂I(x,y)u+∂y∂I(x,y)v−I(x,y)]2 (一阶泰勒展开) ≈(x,y)∑w(x,y)[∂x∂I(x,y)u+∂y∂I(x,y)v]2 (消除重复项) =x,y∑w(x,y)(u2fx2(x,y)+2uvfx(x,y)fy(x,y)+v2fy2(x,y)) =∑x,yw(x,y)(u2Ix2+2uvIxIy+v2Iy2) (简化) =[uv](∑w(x,y)[Ix2IxIyIxIyIy2])[uv]=[uv]TH[uv]
可以看到,E的变化主要与H的大小相关。所以只需要分析H的变化就可以得到E的变化趋势。
图像梯度:ΔI(x,y)=(∂I∂x(x,y),∂I∂y(x,y))\Delta I(x, y)=\left(\frac{\partial I}{\partial x}(x, y), \frac{\partial I}{\partial y}(x, y)\right)ΔI(x,y)=(∂x∂I(x,y),∂y∂I(x,y))
Harris矩阵:H=[∑(x,y)w(x,y)(∂I∂x(x,y))2∑(x,y)w(x,y)(∂I∂x(x,y))∂I∂y(x,y))∑(x,y)w(x,y)(∂I∂x(x,y))∂I∂y(x,y))∑(x,y)w(x,y)(∂I∂y(x,y))2]H=\left[\begin{array}{cc}\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right)^{2} & \left.\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right) \frac{\partial I}{\partial y}(x, y)\right) \\ \left.\sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial x}(x, y)\right) \frac{\partial I}{\partial y}(x, y)\right) & \sum_{(x, y)} w(x, y)\left(\frac{\partial I}{\partial y}(x, y)\right)^{2}\end{array}\right]H=⎣⎡∑(x,y)w(x,y)(∂x∂I(x,y))2∑(x,y)w(x,y)(∂x∂I(x,y))∂y∂I(x,y))∑(x,y)w(x,y)(∂x∂I(x,y))∂y∂I(x,y))∑(x,y)w(x,y)(∂y∂I(x,y))2⎦⎤
w:表示权重,可以是0/1, 也可以是以点为中心的高斯权重。
图像的水平梯度与垂直梯度:Ix=∂I(x+u,y+v)∂xIy=∂I(x+u,y+v)∂yI_{x}=\frac{\partial I(x+u, y+v)}{\partial x} \quad I_{y}=\frac{\partial I(x+u, y+v)}{\partial y}Ix=∂x∂I(x+u,y+v)Iy=∂y∂I(x+u,y+v)
Harris矩阵的特征值分析
对于图像:
- 平坦区域:梯度方向各异,但是梯度幅值变化不大
- 线性边缘:梯度幅值改变较大,梯度方向改变不大
- 角点:梯度方向和梯度幅值变化都较大
H\mathbf{H}H就是Harris矩阵。对其进行奇异值分解,两个特征值分别反映互相垂直方向上的梯度变化情况,分别代表最快和最慢的方向。特征值大的变化快,特征值小的变化慢。
进行特征值分解:SVD(H)=U∑V,(λ1,λ2),λ1>λ2S V D(H)=U \sum V,\left(\lambda_{1}, \lambda_{2}\right), \quad \lambda_{1}>\lambda_{2}SVD(H)=U∑V,(λ1,λ2),λ1>λ2
那么就有:
- 特征值都比较大,则窗口中含有角点。
- 特征值一个比较大,一个比较小,则窗口中含有边缘线。
- 特征值都比较小,则处在平坦区域。
Harris角点准则
detH=λ1λ2\operatorname{det} H=\lambda_{1} \lambda_{2}detH=λ1λ2
traceH=λ1+λ2\operatorname{trace} H=\lambda_{1}+\lambda_{2}traceH=λ1+λ2
所以某点的响应函数:
R=det(H)−ktrace(H)2=λ1λ2−k(λ1+λ2)2,k=0.04R=\operatorname{det}(H)-\operatorname{ktrace}(H)^{2}=\lambda_{1} \lambda_{2}-k\left(\lambda_{1}+\lambda_{2}\right)^{2}, k=0.04R=det(H)−ktrace(H)2=λ1λ2−k(λ1+λ2)2,k=0.04
利用C与阈值比较判断,来判断其是否是角点。
- R<0R<0R<0 边缘点
- R≈0R \approx 0R≈0 平坦点
- R>0R > 0R>0 角点
Shi-Tomasi 角点检测
在Harris角点检测的基础上,Shi和Tomasi 在1993的一篇论文《Good Features to track》中提出了基于Harris角点检测的Shi-Tomasi方法。
Harris角点检测的稳定性与k值有关,而k是个经验值。不好设定。
在此基础上,Shi与Tomasi发现,焦点的稳定性与矩阵的较小的特征值有关,直接使用较小的特征值作为分数。
所以:
R=min(λ1,λ2)R=\min \left(\lambda_{1}, \lambda_{2}\right)R=min(λ1,λ2)
角点检测--基于梯度的方法(Moravec角点检测、Harris角点检测、Shi-Tomasi角点检测)相关推荐
- OpenCV基于Python霍夫圆检测—基于梯度的霍夫圆检测
基于梯度的霍夫圆检测 1. 回顾与目标 2. 基于梯度的霍夫圆检测 2.1 问题分析 2.2 基于梯度的霍夫圆检测步骤 3. 基于梯度的霍夫圆检测函数HoughCircles 3.1 函数HoughC ...
- 遮挡检测--基于高程的方法
基于高程的方法比z-buffer更加节约内存.其主要思想如下:这种遮挡方法是以DSM为例子讨论的: 投影光线与给定DSM位置处的垂直线的交点的高度称为该位置处的投影光线的高度.这个的高度值可以通过射线 ...
- matlab 零速检测,一种基于车辆零速检测的惯性导航误差修正方法与流程
本发明涉及车载导航与定位领域,尤其是涉及一种基于车辆零速检测的惯性导航误差修正方法. 背景技术: 惯性导航系统(inertialnavigationsystem,ins)能根据惯性传感器(陀螺仪.加速 ...
- kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归...
使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...
- LINUX检测服务并自动运行,一种Linux下的开机自动检测硬件信息的方法与流程
技术领域本发明涉及服务器开机检测技术,具体的说是一种Linux下的开机自动检测硬件信息的方法. 背景技术: 服务器产品研发初期,产品多为工程样本,问题很多,这些问题中硬件问题占较大部分.在工程验证测试 ...
- linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程
本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...
- 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习
异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习 参考文章: (1)异常检测-基于孤立森林算法Isolation-based Anomaly ...
- 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测
1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...
- 基于机器视觉的缺陷检测的原理与方法
点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 基于统计分类的方法: (1)基于KNN方法( ...
最新文章
- mysql Sql slow log_MySQL慢查询日志(SLOW LOG)
- aida64 extreme 序列号_基于SN序列号管理 轮胎行业仓储管理解决方案
- “分库分表 ?选型和流程要慎重,否则会失控
- Redis整合Spring结合使用缓存实例
- Package require os(darwin) not compatible with your platform(win32)
- 日语python_边学日语边学python语法
- datanode无法启动_Hadoop DataNode启动和初始化过程
- Java的四种引用,强弱软虚,用到的场景(转+补充)
- 用JS访问iframe中的元素
- 第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
- Linux Shell脚本入门教程系列之(十)Shell for循环
- 从高的角度看自动化测试
- 检测磁盘是否有问题的方法
- 交易系统开发(四)——交易柜台系统
- 搭建自己的IOT平台——EMQ
- 计算二维离散随机变量的联合概率分布
- AngularJS - $uibModal - 自定义模态框大小
- lgv20刷twrp_TWRP 新增对 Realme C2, LG V20等设备的支持
- 金融壹账通第一季营收10亿 沈崇锋:推进双重主要上市
- 编程人员的不二之选 LEGION Y9000X正式发布