图像处理特征不变算子系列之Moravec算子(一)
论文转载请注明出处:http://blog.csdn.net/kezunhai
1977年,Moravec提出了兴趣点(Points of Interests)的概念,并应用于解决Stanford Cart的导航问题。1981年, Moravec在International Joint Conference on Artificial Intelligence发表了篇题为:Obstacle Avoidance and Navigation in the Real World by a Seeing Robot Rover的文章,并将其应用与立体匹配。本文将主要介绍Moravec算子的点特征提取的原理和过程。
Moravec的原理如果有一句话来说就是:通过滑动二值矩形窗口寻找灰度变化的局部最大值。具体来说主要包括四个过程:
1)滑动窗口计算灰度变化(Calculate intensity variantion from shifting windows)
滑动窗口在现有的技术中已经有了很多应用,如模板匹配、目标检测(hog特征的行人检测)等。在Moravec算子中,一般窗口的大小取3×3、5×5、7×7等等,但是随着窗口的增大,计算量也就越大。Moravec算子通过对窗口的水平、垂直和对角八个方向进行移动(Horizontally、Vertically and four diagonals),计算原窗口与滑动窗口差的平方和来得到灰度的变化。我们进一步通过下图一个3×3的滑窗来进行说明:
上图中,红色框表示的是原始框,而蓝色框表示向右上的滑动框,白色框表示前景255,黑色框表示背景0。那么原始框和滑动框的灰度变化通过对应位置差的平方和来表示,也即通过下式来计算:
同样,根据上式计算另外七个方向滑动框的灰度变化(水平向左、水平向右、垂直向上、垂直向下以及四个对角)。至此,我们就计算完成了8个方向的灰度变化,我们称此操作位Moravec operator(Moravec算子)。
2)构造角点性映射图(Construct the cornerness map)
在构造角点映射图之前,我们先来分析下,通过上式的我们可以得到角点吗?或者凭什么通过计算两个框对应位置的差的平方和就可以检测到角点?问题问得好,我们来看下面的图:
上面四张图上的四个红色的框表示我们正在处理的窗,第一幅图中的窗在表示在目标内部或者是背景上,该区域灰度分布均与,通过对其在8个方向上灰度,灰度变化很小;第二幅图中的窗跨在图像的边缘处,当垂直于边缘方向滑动窗口时将会导致灰度的很大变化,而沿着边缘滑动窗时,灰度变化较小;第三幅图中的窗在角点处,不管往哪个方向滑动窗口,都会导致灰度的很大变化;而第四幅图中的框内是一个离散点,滑动窗向任意方向滑动也会导致灰度的很大变化。
因此,通过上面的描述和分析,我们可以知道,Moravec算子可以作为一种角点性的度量,这种度量是通过求8个方向的滑窗来的最小值来表示。用公式表示如下:
我们通过下图来描述角点映射图的构造:
上图中的是通过Moravec算子计算得到的,其中1表示1*255^2,2表示2*255^2。通过上图可以知道:
(1)角点位于局部最大值处,我们可以应用非极大值抑制找到局部最大值(non-maximal suppression)。
(2)离散点(噪声点)与角点有相同的角点性(cornerness),因此Moravec算子对噪声敏感,但是通过增大滑窗的大小可以对噪声起到一定的抑制作用,可同时增加了计算量。另一方面,可以通过设定一个阈值T来对cornerness map进行二值化,小于阈值T的cornerness map设置为0,从而对离散点的局部最大值进行抑制。阈值的选择引用原文的话:Choosing this threshold is difficult as it must be set high enough to avoid these false corners(isolated pixel), but low enough to retain as many true corners as possible.
(3)Moravec算子不能应用与图像边界的一定区域(标记为X的区域),对于这部分区域,一般直接忽略,在cornerness map中这些区域对应的值置0。
下面对Moravec算子的基本步骤进行简单的总结,其主要包括包括:
我们再上两张效果图:
从上图也可以看到,Moravec算子对角点的检测效果还不错,但是对于对角线上的角点容易出现误检。
总结:Moravec算子作为第一个广泛应用的角点检测算法,开创了角点检测的新纪念,后续的很多角点检测算子都是在其基础上通过扩展得到的。但是Moravec算子也存在诸如方向各异性、噪声敏感、对旋转不具备不变形(角点不具备repeatability)、滑动窗内的各个像素权重同质性(中心像素权重大,离中心越远,权重越小)。在下一篇中,我将介绍一种对Moravec算子进行改进、在很多领域取得非常广泛应用的另一种算子-----Harris算子。
另外可以参考:
http://code.google.com/p/jfeaturelib/wiki/Moravec(可以现在Moravec算子的库和源代码)
http://kiwi.cs.dal.ca/~dparks/CornerDetection/moravec.htm (Moravec算子的更细节内容)
图像处理特征不变算子系列之Moravec算子(一)的更多相关文章
- Python 图像处理 OpenCV (12): Roberts 算子、 Prewitt 算子、 Sobel 算子和 Laplacian 算子边缘检测技术
前文传送门: 「Python 图像处理 OpenCV (1):入门」 「Python 图像处理 OpenCV (2):像素处理与 Numpy 操作以及 Matplotlib 显示图像」 「Python ...
- Spark常用算子-KeyValue数据类型的算子
package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import or ...
- Spark常用算子-value数据类型的算子
package com.test; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; im ...
- 实现Sobel算子滤波、Robers算子滤波、Laplace算子滤波
前几天,老师布置了这样一个任务,读取图片并显示,反色后进行显示:进行Sobel算子滤波,然后反色,进行显示:进行Robers算子滤波,然后反色,进行显示.我最后加上了Laplace算子滤波,进行了比较 ...
- matlab练习程序(Moravec算子)
这个算子算是图像历史上第一个特征点提取算法了,1977年提出的,很简单,拿来练手很合适. 算法原理如下: 1.选取一个合理的邻域遍历图像,这里是5*5邻域的.在邻域中依次计算,垂直,水平,对角与反对角 ...
- Moravec算子
Moravec在1981年提出了Moravec角点检測算子,并将它应用于立体匹配.它是一种基于灰度方差的角点检測方法.该算子计算图像中某个像素点沿着水平.垂直.对角线.反对角线四个方向的灰度方差,当中 ...
- (转)Spark 算子系列文章
http://lxw1234.com/archives/2015/07/363.htm Spark算子:RDD基本转换操作(1)–map.flagMap.distinct Spark算子:RDD创建操 ...
- 图像处理-07-图像的轮廓提取-Robert算子
图像的轮廓提取-Robert算子 图像的边缘:周围像素灰度有阶跃变化或“屋顶”变化的那些像素的集合,边缘广泛存在于物体与背景之间.物体与物体之间,基元与基元之间,是图像分割的重要依据. 物体的边缘是由 ...
- OpenCV图像处理篇之边缘检测算子
OpenCV图像处理篇之边缘检测算子 转载: http://xiahouzuoxin.github.io/notes/ 3种边缘检测算子 一阶导数的梯度算子 高斯拉普拉斯算子 Canny算子 Open ...
随机推荐
- perl 自动登陆网站发短信
use LWP::UserAgent; use HTTP::Date qw(time2iso str2time time2iso time2isoz); use Net::Ping; use Sock ...
- 基于visual Studio2013解决面试题之1007鸡蛋和篮子
题目
- 设计模式模式适配器(Adapter)摘录
23种子GOF设计模式一般分为三类:创建模式.结构模型.行为模式. 创建模式抽象的实例,他们帮助建立一个系统,是独立于如何.这是一个这些对象和陈述的组合.创建使用继承一个类架构更改实例,一个对象类型模 ...
- Codeforces Round #277 (Div. 2) 题解
Codeforces Round #277 (Div. 2) A. Calculating Function time limit per test 1 second memory limit per ...
- sharepoint具体错误提示
sharepoint页面发生错误时,默认不会显示具体错误信息,只显示“未知错误”提示.需要修改配置站点的webconfig文件,才能显示出具体错误提示.具体方法如下: 将safeMode中的CallS ...
- WCF随笔3----消息编码器
原文:WCF随笔3----消息编码器 我们都知道,message是wcf通信框架进行通信的最基本的单位,但是wcf开发人员其实根本不需要直接与message打交道,一样能够写好wcf相关的程序.这是因 ...
- ASP.NET - TreeView
设置节点图片 : Windows资源管理器左侧的树型资源结构图中,各节点都有图片连接,例如磁盘的图片.光盘的图片和文件夹的图片等,使资源的表现更加形象.IEWebControls的TreeView控件 ...
- 如何在settings里的休眠模式里添加永不休眠
最近项目需求里需要在设置菜单的休眠模式里添加一项永不休眠选择项.针对MTK平台的修改方式有如下几步骤.(其他平台和android原生系统的修改方式类似,只是android原生系统修改永不休眠需要通过设 ...
- python输出htmltestrunner中文乱码如何解决
python unittest要产生一个可看的报告,需要借助一个第三方的包 下载HTMLTestRunner.py 第三方库 ,参考地址: http://tungwaiyip.info/softwar ...
- gulp工作流
小屁活动使用 gulp+less gulpfile.js var gulp = require('gulp'), cssmin = require('gulp-minify-css'), less = ...