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,y​w(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,y​w(x,y)(u2Ix2​+2uvIx​Iy​+v2Iy2​) (简化) =[u​v​](∑w(x,y)[Ix2​Ix​Iy​​Ix​Iy​Iy2​​])[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角点准则

det⁡H=λ1λ2\operatorname{det} H=\lambda_{1} \lambda_{2}detH=λ1​λ2​

trace⁡H=λ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角点检测)相关推荐

  1. OpenCV基于Python霍夫圆检测—基于梯度的霍夫圆检测

    基于梯度的霍夫圆检测 1. 回顾与目标 2. 基于梯度的霍夫圆检测 2.1 问题分析 2.2 基于梯度的霍夫圆检测步骤 3. 基于梯度的霍夫圆检测函数HoughCircles 3.1 函数HoughC ...

  2. 遮挡检测--基于高程的方法

    基于高程的方法比z-buffer更加节约内存.其主要思想如下:这种遮挡方法是以DSM为例子讨论的: 投影光线与给定DSM位置处的垂直线的交点的高度称为该位置处的投影光线的高度.这个的高度值可以通过射线 ...

  3. matlab 零速检测,一种基于车辆零速检测的惯性导航误差修正方法与流程

    本发明涉及车载导航与定位领域,尤其是涉及一种基于车辆零速检测的惯性导航误差修正方法. 背景技术: 惯性导航系统(inertialnavigationsystem,ins)能根据惯性传感器(陀螺仪.加速 ...

  4. kaggle信用卡欺诈看异常检测算法——无监督的方法包括: 基于统计的技术,如BACON *离群检测 多变量异常值检测 基于聚类的技术;监督方法: 神经网络 SVM 逻辑回归...

    使用google翻译自:https://software.seek.intel.com/dealing-with-outliers 数据分析中的一项具有挑战性但非常重要的任务是处理异常值.我们通常将异 ...

  5. LINUX检测服务并自动运行,一种Linux下的开机自动检测硬件信息的方法与流程

    技术领域本发明涉及服务器开机检测技术,具体的说是一种Linux下的开机自动检测硬件信息的方法. 背景技术: 服务器产品研发初期,产品多为工程样本,问题很多,这些问题中硬件问题占较大部分.在工程验证测试 ...

  6. linux 内核 死锁 检查,一种linux内核自旋锁死锁检测报告系统和方法与流程

    本发明涉及内核死锁检测领域,具体的说是一种linux内核自旋锁死锁检测报告系统和方法. 背景技术: linux内核死锁是长期困扰内核开发人员的问题之一,但自内核引入lockdep调试模块之后,内核死锁 ...

  7. 异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习

    异常检测-基于孤立森林算法Isolation-based Anomaly Detection-1-论文学习 参考文章: (1)异常检测-基于孤立森林算法Isolation-based Anomaly ...

  8. 【python OpenCV3.3 图像处理教程:直线检测、圆检测、对象测量、腐蚀、膨胀等形态学操作、数字验证码识别、人脸检测

    1. 直线检测 Hough Line Transform:前提:边缘检测已经完成,基于霍夫变换 1.1 原理 可以通过(theta,r)唯一表示一个点. 把过三个点的全部直线以某一角度全部计算出来,如 ...

  9. 基于机器视觉的缺陷检测的原理与方法

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转自|新机器视觉 基于统计分类的方法: (1)基于KNN方法( ...

最新文章

  1. mysql Sql slow log_MySQL慢查询日志(SLOW LOG)
  2. aida64 extreme 序列号_基于SN序列号管理 轮胎行业仓储管理解决方案
  3. “分库分表 ?选型和流程要慎重,否则会失控
  4. Redis整合Spring结合使用缓存实例
  5. Package require os(darwin) not compatible with your platform(win32)
  6. 日语python_边学日语边学python语法
  7. datanode无法启动_Hadoop DataNode启动和初始化过程
  8. Java的四种引用,强弱软虚,用到的场景(转+补充)
  9. 用JS访问iframe中的元素
  10. 第十五节: EF的CodeFirst模式通过DataAnnotations修改默认协定
  11. Linux Shell脚本入门教程系列之(十)Shell for循环
  12. 从高的角度看自动化测试
  13. 检测磁盘是否有问题的方法
  14. 交易系统开发(四)——交易柜台系统
  15. 搭建自己的IOT平台——EMQ
  16. 计算二维离散随机变量的联合概率分布
  17. AngularJS - $uibModal - 自定义模态框大小
  18. lgv20刷twrp_TWRP 新增对 Realme C2, LG V20等设备的支持
  19. 金融壹账通第一季营收10亿 沈崇锋:推进双重主要上市
  20. 编程人员的不二之选 LEGION Y9000X正式发布

热门文章

  1. [转]异步性能:了解 Async 和 Await 的成本
  2. 当页面上的某个控件回发时,保持滚动条位置的。
  3. 面试精讲之面试考点及大厂真题 - 分布式专栏 05 公司使用什么RPC框架,聊聊你理解的RPC原理
  4. Nodejs线上日志部署
  5. Oracle的AES加密与解密用法
  6. ORA-00376: file X cannot be read at this time 问题解决
  7. docker 守护进程
  8. MySQL学习——操作存储过程
  9. 【规范化标准】之 ESLint、Stylelint
  10. 442个超实用电脑快捷键大全!总有你会用上的