斑点检测(LoG,DoG) [上]
斑点检测(LoG,DoG) [上]
在计算机视觉中,斑点检测是指在数字图像中找出和周围区域特性不同的区域,这些特性包括光照或颜色等。一般图像中斑点区域的像素特性相似甚至相同,某种程度而言,斑点块中所有点是相似的。
如果将兴趣点的特性形式化表达为像素位置的函数,那么主要有两类斑点检测方法:
差分方法。这类方法主要基于函数在对应像素点处的导数。
局部极值方法。这类方法主要是在找出函数的局部极值。
在该领域中,斑点检测也被称为兴趣点检测或者兴趣区域检测。
研究斑点检测的目的有几点。其中最主要的是斑点检测能够完整的刻画像素所在区域信息,而这些信息是边缘检测和焦点检测所不能获得的。斑点检测获得的局部区域特征可以被用于后续进一步处理,比如在目标出现和部分遮挡的目标识别或追踪问题中准确刻画目标信息等。在其他领域,斑点检测还可以通过对直方图的尖峰检测实现分割。斑点检测子的另一个常见的应用是作为文本分析和识别中的基元。最新研究中,斑点检测越来越多的被应作图像宽基线立体匹配中的兴趣点检测和基于表观的目标识别中的局部图像特征。
这里主要介绍两种斑点检测方法--LoG和DoG。在介绍这两种斑点检测方法时,我们简单回顾下边缘检测方法--梯度算子和Laplacian算子。
边缘检测回顾
图像中的边缘一般分为两种:屋脊型边缘和阶跃型边缘,如下图是边缘剖面,纵坐标表示像素值

其中a,c子图是屋脊型边缘,向a那种函数趋势像屋脊的类型称为屋脊型边缘,c是a反方向情况,b,d是阶跃型边缘。
边缘的检测可以通过一阶导数、二阶导数计算,我们以a,b图为例(c,d类似),其一阶导数,二阶导数图如下

在实际应用中,一般只考虑阶跃边缘,因为只要采样足够或者说窗口足够小,屋脊型边缘也可以看做是阶跃边缘。
对于阶跃边缘可以使用一阶导数的极值来判断边缘。 梯度算子定义是:

为了简化计算,一般将梯度算子写成

在图像中,导数运算离散成差分运算,于是得到下面一些一阶算子
罗伯特算子

对应卷积模板为

可见该算子对对角边缘检测效果较好。
Sobel算子

对应的卷积模板为

该算子其实是经过了高斯平滑后计算差分。
Prewitt算子(方向模板)
对应的卷积模板为

即不同方向的一阶导数。
对于阶跃边缘还可以使用二阶导数的过零点(zero-acrossing)判定
Laplace算子就是二阶导数算子,其定义为两个方向上一阶导数的内积。
我们用
表示Laplace算子,则二维的laplace算子为

对于图像使用二阶差分代替二阶导数,则

于是二阶laplace算子的卷积模板可以为

如果我们考虑到四个方向,即

则卷积模板为

计算出每一像素点的二阶导数值之后,我们希望找到过零点,但图像是离散的,要找过零点还需进行拟合,拟合后的曲线找到过零点还要在离散过程很麻烦且完全没必要。这里可以直接寻找二阶导数正负交替的点作为边缘点。
二维图像的例子

对于阶跃边缘,梯度算子检测的范围较广,如下图中绿色线波峰很宽域内值都近似,而laplace算子(蓝色线)计算的是过零点,显然精确很多,下图中红色线是阶跃信号。

但是laplace算子是一种高通滤波模型,对于出现的独立噪声非常敏感,所以一般先对图像进行平滑之后再使用laplace算子检测边缘,使用Gaussian平滑和Laplace算子就形成了LoG算子。
高斯拉普拉斯算子(LoG,Laplacian of Gaussian)
假设对图像
,使用尺度为
的高斯平滑

然后再使用Laplace算子检测边缘

其中*是卷积符号,这是因为

定义高斯拉普拉斯算子

相当于对高斯模板先进行Laplace再与图像进行平滑。
将LoG展开,看其具体形式

所以

即高斯平滑后乘以与位置有关的系数。
一维情形下高斯函数及其一阶导数,和LoG的曲线图

LoG模板可以为

高斯差分算子(DoG,Difference of Gaussian)
类似于高斯拉普拉斯算子,DoG同样首先对图像进行高斯平滑。

定义DoG算子:

则高斯平滑后差分图像为

为什么DoG可以检测边缘,具体理论我们稍后再分析,这里先给出一个直观感受

我们发现这里DoG算子曲线和上文中的LoG算子曲线非常相似,因此它可以作为LoG的近似来检测边缘。
未完待续,下面我们将分析尺度不变的LoG,以及DoG和LoG的关系。
参考文献:
1. Blob detection https://en.wikipedia.org/wiki/Blob_detection#The_determinant_of_the_Hessian
2. 边缘检测 http://fourier.eng.hmc.edu/e161/lectures/gradient/node6.html
3. Laplace Operator http://fourier.eng.hmc.edu/e161/lectures/gradient/node7.html
4. Laplacian of Gaussian http://fourier.eng.hmc.edu/e161/lectures/gradient/node8.html
5. Difference of Gaussian http://fourier.eng.hmc.edu/e161/lectures/gradient/node9.html
6. LoG http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm
斑点检测(LoG,DoG) [上]的更多相关文章
- 斑点检测(LoG,DoG)(下)
斑点检测(LoG,DoG)(下) LoG, DoG, 尺度归一化 上篇文章斑点检测(LoG,DoG)(上)介绍了基于二阶导数过零点的边缘检测方法,现在我们要探讨的是斑点检测.在边缘检测中,寻找的是二阶 ...
- opencv图像特征检测之斑点检测
前面说过,图像特征点检测包括角点和斑点,今天来说说斑点,斑点是指二维图像中和周围颜色有颜色差异和灰度差异的区域,因为斑点代表的是一个区域,所以其相对于单纯的角点,具有更好的稳定性和更好的抗干扰能力. ...
- Yolo:实时目标检测实战(上)
Yolo:实时目标检测实战(上) YOLO:Real-Time Object Detection 你只看一次(YOLO)是一个最先进的实时物体检测系统.在帕斯卡泰坦X上,它以每秒30帧的速度处理图像, ...
- blob斑点检测
目录 1. 可选算法 1.1. Laplacian of Gaussian (LoG) 1.2. Difference of Gaussian (DoG) 1.3. Determinant of He ...
- paper 86:行人检测资源(上)综述文献【转载,以后使用】
行人检测具有极其广泛的应用:智能辅助驾驶,智能监控,行人分析以及智能机器人等领域.从2005年以来行人检测进入了一个快速的发展阶段,但是也存在很多问题还有待解决,主要还是在性能和速度方面还不能达到一个 ...
- 医学AI论文解读 |Circulation|2018| 超声心动图的全自动检测在临床上的应用
文章来自微信公众号:机器学习炼丹术.号主炼丹兄WX:cyx645016617.文章有问题或者想交流的话欢迎- 参考目录: @ 目录 0 论文 1 概述 2 pipeline 3 技术细节 3.1 预处 ...
- 【Luogu】P2536病毒检测(Trie上DP)
题目链接 这道题我写了个01DP,f[i][j]表示跑到Trie上第i个节点,匹配到字符串第j位行不行 然后重点在*号无限匹配怎么处理 经过一番脑洞我们可以发现*号无限匹配可以拆成两种情况: 1:匹配 ...
- Arduino IDE 开发 ESP-01S/ESP-01物联网实战检测温度湿度上传MQTT服务器
一.硬件准备 USB转ESP8266两块.DHT11温度湿度传感器.ESP8266-01/ESP8266-01一块(如果学习的话多买几块,ESP-01/ESP-01S的区别) USB转ESP8266 ...
- 第十二节、尺度不变特征(SIFT)
上一节中,我们介绍了Harris角点检测.角点在图像旋转的情况下也可以检测到,但是如果减小(或者增加)图像的大小,可能会丢失图像的某些部分,甚至导致检测到的角点发生改变.这样的损失现象需要一种与图像比 ...
随机推荐
- Android 实现类似微信客户端朋友圈更新提示的小红点&栏目订阅
用到的类: com.jauker.widget.BadgeView 实现代码: BadgeView imageBadge = new BadgeView(getContext()); imageBad ...
- Spring 注释 @Autowired 和@Resource
一. @Autowired和@Resource都可以用来装配bean,都可以写在字段上,或者方法上. 二. @Autowired属于Spring的:@Resource为JSR-250标准的注释,属于J ...
- Hibernate中一对多和多对一关系
1.单向多对一和双向多对一的区别? 只需要从一方获取另一方的数据时 就使用单向关联双方都需要获取对方数据时 就使用双向关系 部门--人员 使用人员时如果只需要获取对应部门信息(user.getdept ...
- android HTTPclient
Apache包是对android联网访问封装的很好的一个包,也是android访问网络最常用的类. 下面分别讲一下怎么用HttpClient实现get,post请求. 1.Get 请求 1 2 3 4 ...
- Clr Via C#读书笔记---I/O限制的异步操作
widows如何执行I/O操作 构造调用一个FileStream对象打开一个磁盘文件-----FileStream.Read方法从文件中读取数据(此时线程从托管代码转为本地/用户模式代码)- ...
- SQL错误级别 状态 怎么定义
关于SQL Server的错误严重性级别的说明,强烈认真看一下下面的两个链接 脱机帮助 ms-help://MS.SQLCC.v9/MS.SQLSVR.v9.zh-CHS/sqlerrm9/html/ ...
- 【C#】Json数据 排版算法
我从服务器上取得一串Json数据,然后想表示到画面上.不过服务器上取下的Json数据肯定是经过压缩的,空格和换行都没有.如果直接看,可读性非常差. 由于我这个软件是内部管理用的,使用者既能直接看懂Js ...
- 图结构练习——最短路径(dijkstra算法(迪杰斯拉特))
图结构练习——最短路径 Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 给定一个带权无向图,求节点1到节点n的最短路径. ...
- 声明replicated属性之后我编译不通过的问题
- 验证备份前设置CONFIGURE CONTROLFILE AUTOBACKUP ON/OFF; 的区别
关于rman的,环境: oracle 10.2.0 rman nocatalog方式 1.首先设置 CONFIGURE CONTROLFILE AUTOBACKUP ON; 然后进行数据库全备份 RM ...