harris推导,参见opencv文档

  • Let’s look for corners. Since corners represents a variation in the gradient in the image, we will look for this “variation”.
  • Consider a grayscale image . We are going to sweep a window (with displacements in the x direction and in the right direction) and will calculate the variation of intensity.
  • where:

    • is the window at position
    • is the intensity at
    • is the intensity at the moved window
  • Since we are looking for windows with corners, we are looking for windows with a large variation in intensity. Hence, we have to maximize the equation above, specifically the term:

  • Using Taylor expansion:

  • Expanding the equation and cancelling properly:

  • Which can be expressed in a matrix form as:

  • Let’s denote:

  • So, our equation now is:

  • A score is calculated for each window, to determine if it can possibly contain a corner:

    where:

    • det(M) =
    • trace(M) =

    a window with a score greater than a certain value is considered a “corner”

中文说明:

Harris角点算法实现

根据上述讨论,可以将Harris图像角点检测算法归纳如下,共分以下五步:

1. 计算图像I(x,y)I(x,y)在XX和YY两个方向的梯度Ix、IyIx、Iy。

Ix=?I?x=I?(?1 0 1),Iy=?I?x=I?(?1 0 1)TIx=?I?x=I?(?1 0 1),Iy=?I?x=I?(?1 0 1)T

2. 计算图像两个方向梯度的乘积。

I2x=Ix?Iy,I2y=Iy?Iy,Ixy=Ix?IyIx2=Ix?Iy,Iy2=Iy?Iy,Ixy=Ix?Iy

3. 使用高斯函数对I2x、I2y和IxyIx2、Iy2和Ixy进行高斯加权(取σ=1σ=1),生成矩阵MM的元素A、BA、B和CC。

A=g(I2x)=I2x?w,C=g(I2y)=I2y?w,B=g(Ix,y)=Ixy?wA=g(Ix2)=Ix2?w,C=g(Iy2)=Iy2?w,B=g(Ix,y)=Ixy?w

4. 计算每个像素的Harris响应值RR,并对小于某一阈值tt的RR置为零。

R={R:detM?α(traceM)2<t}R={R:detM?α(traceM)2<t}

5. 在3×33×3或5×55×5的邻域内进行非最大值抑制,局部最大值点即为图像中的角点。

时间: 2024-10-16 16:55:16

harris推导,参见opencv文档的相关文章

opencv文档之core模块doc翻译

core - a compact module defining basic data structures, including the dense multi-dimensional array Mat and basic functions used by all other modules. core模块:基本数据类型的定义,包括多维数组Mat和在其他所有模块中用到的基本函数 imgproc - an image processing module that includes linea

翻译OpenCV文档:ArUco Marker的检测 (Detection of ArUco Markers)

英文原文链接:Detection of ArUco Markers 姿态估计(Pose estimation)在计算机视觉领域扮演着十分重要的角色:机器人导航.增强现实以及其它.这一过程的基础是找到现实世界和图像投影之间的对应点.这通常是很困难的一步,因此我们常常用自己制作的或基本的Marker来让这一切变得更容易. 最为流行的一个途径是基于二进制平方的标记.这种Marker的主要便利之处在于,一个Marker提供了足够多的对应(四个角)来获取相机的信息.同样的,内部的二进制编码使得算法非常健壮

&lt;&lt;ASP.NET Boilerplate 文档&gt;&gt; 1.1 介绍

介绍 一个快速示例 其它特性 启动模板 如何使用 介绍 我们总是对不同的需求开发不同的应用.但至少在某些层面上,一次又一次地重复实现通用的和类似的功能.如:授权,验证,异常处理,日志,本地化,数据库连接管理,设置管理,审核日志等功能.所以我们创建架构和最佳实践,如分层和模块架构,DDD,依赖注入等,并尝试开发应用时基于一些约定. 由于所有这些是非常耗时而且很难单独创建并可适用于每个项目,许多公司创建自己的框架,他们用自己的框架能快速开发新应用而且不出错.但不是所有的公司都是幸运的,大部分公司没有

memcached使用文档

使用memcached进行内存缓存 通常的网页缓存方式有动态缓存和静态缓存等几种,在ASP.NET中已经可以实现对页面局部进行缓 存,而使用memcached的缓存比ASP.NET的局部缓存更加灵活,可以缓存任意的对象,不管是否在页面上输出.而memcached最大的优点是 可以分布式的部署,这对于大规模应用来说也是必不可少的要求. LiveJournal.com使用了memcached在前端进行缓存,取得了良好的效果,而像wikipedia,sourceforge等也采用了或即将采用memca

中文Appium API 文档

该文档是Testerhome官方翻译的源地址:https://github.com/appium/appium/tree/master/docs/cn官方网站上的:http://appium.io/slate/cn/master/?ruby#about-appium 中文Appium API 文档 第一章:关于appium1.1 appium客户端客户端类库列表及Appium服务端支持 这些类库封装了标准Selenium客户端类库,为用户提供所有常见的JSON 格式selenium命令以及额外的

网络资源收集工具概要设计文档

1.引言 1.1编写目的 将之前会议中记录的设计要点进行总结和规划,供团队内开发者和测试人员进行代码编写与测试. 1.2项目背景 软件名: 网络资源收集工具 本软件任务:为下一组元数据抽取和整理工具进行对接,为下一组提供其所需的各类海量数据. 2.任务概述 2.1目标 总的目标是编写一个更快捷,更稳定的爬虫软件,维护并改善学长的代码并在其基础上进行完善创新. 分开来讲有学长代码规范的编写,学长遗留BUG的修复,多个种子链接功能的添加,广告过滤功能的优化,暂停爬取功能的实现,关键词筛选功能的添加与

网络资源收集工具详细设计文档

1.引言 1.1编写目的 将之前会议中记录的设计要点进行总结和规划,供团队内开发者和测试人员进行代码编写与测试. 1.2项目背景 软件名: 网络资源收集工具 本软件任务:为下一组元数据抽取和整理工具进行对接,为下一组提供其所需的各类海量数据. 2.总体设计 2.1需求概述 将35w+个符合条件的网页,问答,文章放入数据库,具体请参见需求文档. 2.2软件结构 3.程序块ConnectServer描述 3.1功能 连接数据库服务器,进行插入以及查询数据库操作. 3.2性能 快速打开和关闭数据库连接

OpenCV+VS2013+Win8+64位配置文档

配置环境 编程平台:VS2013 系统:Windows8 64位 X64架构 ? 安装OpenCV 1 下载OpenCV-2.4.9,下载网址 http://opencv.org/ 2 解压OpenCV到 D:\Program Files\OpenCV\opencv249 3 配置系统变量 添加OpenCV变量: D:\Program Files\OpenCV\opencv249\build 在Path后添加: D:\Program Files\OpenCV\opencv249\build\x6

需求文档可以不签字吗之二-理论推导

怎么可能在没有需求文档的情况下,把软件开发出来? 完全有可能.回想下当年读书的教研组,回想下自己的编程经历,总有至少那么几次,在种种的原因下,在没有需求文档的情况下,软件已经编写好了.也许那个软件规模小些,质量不是太好,但确实是没有需求文档的情况下把它编了出来. 所以没有需求文档是可以把软件开发出来的. 为了保证这样的软件达到要求,显然需要另外的手段.笔者认为最要紧的手段是快速地将运行的软件给用户试用或观看,收集用户的反馈,根据用户反馈再修改.这是敏捷软件开发所倡导的"短迭代"和&qu