Blob检测
一 Laplace 算子
使用一阶微分算子可以检测图像边缘。对于剧烈变化的图像边缘,一阶微分效果比较理想。但对于缓慢变化的图像边缘,通过对二阶微分并寻找过零点可以很精确的定位边缘中心。二阶微分即为 Laplace 算子,在 "图像边缘检测" 中进行的推导。以一维图像为例,下图给出边缘的一阶与二阶运算结果:

红色区曲线表示原始边缘,绿色曲线表示一阶微分结果,蓝色区域表示二级微分结果。
如何使用 Laplace 算子检测到图像边缘呢?其基本方法如下:
1)使用 Laplace 算子与图像卷积;
2)在邻域(3*3, 5*5, 7*7等)中寻找卷积后最大值与最小值;
3)当最大值大于0,最小值小于0,最大值大于某固定阈值,最小值小于某固定阈值的负值时认为找到边缘(避免噪声干扰);
二 Laplacian of Gaussian(LoG)
Laplace 算子检测边缘同时也检测到噪声,可以首先使用 Gaussian Kernel 对图像去噪,然后在去噪后图像上应用 Laplace 算子。
由于线性运算可结合性质,有如下结论:
;
以下给出证明:
;
。
根据以上结论,由于 Gaussian Kernel 在卷积运算前已知且相对固定,可以先对求解 LoG,然后再使用 LoG 对图像卷积。
;
;
;
。

上图给出一维高斯函数的一阶微分(绿色)与二阶微分(蓝色)。
通过离散化近似处理,可以得到 LoG 核模板(5*5),
,使用该模板检测图像边缘,步骤如下:
1)计算 LoG 核;
2)使用 LoG 核与图像卷积;
3)在5*5邻域中寻找卷积后最大值与最小值;
4)当最大值大于0,最小值小于0,最大值大于某固定阈值,最小值小于某固定阈值的负值时认为找到边缘;
三 Difference of Gaussian(DoG)
使用 DoG 可以得到与 LoG 近似的效果,步骤如下:
1)使用宽度
高斯核与原图像卷积
;
2)使用宽度
高斯核与原图像卷积
;
3)求两卷积之差
;
可以提前计算出来
;

上图给出两个不同宽度的一维高斯函数的一阶微分(红色与绿色)与DoG(蓝色),观察发现 DoG 与 LoG 形状基本一致,所有可以使用 DoG 求二阶过零点。
四 Blob检测
使用 LoG 可以检测函数过零点,以一维图像为例,如下图:

对不同尺寸Blob块使用 LoG ,可得如下结果:

由上图可知,对于不同尺寸Blob块,二阶微分响应不同。当Gaussian函数尺度与Blob块直径基本一致时,产生最大响应。
对于一个固定尺寸Blob块,使用不同尺度Gaussian函数时,响应如下:

Laplacian 响应随着
增大而减小,需要对对响应值进行归一化处理。
高斯函数的一阶微分对理想阶跃边缘的响应随着
增大而降低,在一阶微分卷积前乘以
以归一化响应,在二阶微分卷积前乘以
以归一化响应。
以下给出二维归一化 LoG 表达式:
。
使用不同尺度归一化Gassian二阶微分,响应如下:

通过以上图像可知,当Gassian函数尺度与Blob块直径基本一致时,产生最大响应。
通过以上观察,可得到Blob块检测方法:
1)使用不同尺度Gassian函数的归一化二阶梯度分别于图像卷积;
2)合并不同尺度下卷积图像形成三维图像;
3)在三维图像中寻找局部极大值,该极大值即为检测到的Blob块,其中Blob块中心由所在图像坐标决定,Blob块半径由所在尺度决定,其值为
。
五 Blob 特征点描述
当检测到特征点后,使用自相关函数可以描述 Blob 特征点形状特征:
;
令
,在 uv 平面上可以得到一个椭圆,如下:

观察椭圆可知,在短轴方向上 Blob 特征点变化速度最快,在长轴方向上变化最慢。同时,自相关矩阵描述了特征点形状及旋转关系。
当采集图像发生了射影变换(旋转,拉伸),其 Blob 特征点的自相关矩阵所描述的椭圆也会发生 旋转,拉伸变换。在描述 Blob 特征点前,首先对其进行拉伸变化将椭圆转换为正圆,这样方便对特征点进行统一描述。
以上操作使特征点具有相同的拉伸变换,但仍旧需要使特征点具有统一的旋转角度,使用梯度方向直方图可以估计特征点旋转。具体如下:
1)使用特征点周边固定区域内的梯度方向形成方向直方图;
2)使用直方图中最大 bin 作为特征点方向(零点方向);
3)在 Blob 区域内(正圆,去除拉伸)统计方向直方图,该直方图可作为特征描述符。
参考: https://www.cs.unc.edu/~lazebnik/spring11/lec08_blob.pdf
Blob检测的更多相关文章
- 斑点检测(LoG,DoG)(下)
斑点检测(LoG,DoG)(下) LoG, DoG, 尺度归一化 上篇文章斑点检测(LoG,DoG)(上)介绍了基于二阶导数过零点的边缘检测方法,现在我们要探讨的是斑点检测.在边缘检测中,寻找的是二阶 ...
- Python: scikit-image Blob detection
这个用例主要介绍利用三种算法对含有blob的图像进行检测,blob 或者叫斑点,就是在一幅图像上,暗背景上的亮区域,或者亮背景上的暗区域,都可以称为blob.主要利用blob与背景之间的对比度来进行检 ...
- CVPR 2019 行人检测新思路:
CVPR 2019 行人检测新思路:高级语义特征检测取得精度新突破 原创: CV君 我爱计算机视觉 今天 点击我爱计算机视觉置顶或标星,更快获取CVML新技术 今天跟大家分享一篇昨天新出的CVPR 2 ...
- TB3_Autorace之交通杆检测
利用blob检测算法识别交通杆,控制TB3机器人完成对交通杆的起停动作! 上一篇博文中<TB3_Autorace之路标检测>订阅了原始图像信息,经过SIFT检测识别出道路交通标志,这里我们 ...
- paper 64:尺度空间(Scale space)理论
尺度空间方法的基本思想是:在视觉信息处理模型中引入一个被视为尺度的参数,通过连续变化尺度参数获得不同尺度下的视觉处理信息,然后综合这些信息以深入地挖掘图像的本质特征.尺度空间方法将传统的单尺度视觉信息 ...
- OpenCV SIFT原理与源码分析
http://blog.csdn.net/xiaowei_cqu/article/details/8069548 SIFT简介 Scale Invariant Feature Transform,尺度 ...
- [Object Tracking] Overview of algorithms for Object Tracking
From: https://www.zhihu.com/question/26493945 可以载入史册的知乎贴 目标跟踪之NIUBILITY的相关滤波 - 专注于分享目标跟踪中非常高效快速的相关滤波 ...
- V-rep学习笔记:视觉传感器2
视觉传感器的属性设置栏中还有如下几个选项: Ignore RGB info (faster): if selected, the RGB information of the sensor (i.e. ...
- 【OpenCV】SIFT原理与源码分析
SIFT简介 Scale Invariant Feature Transform,尺度不变特征变换匹配算法,是由David G. Lowe在1999年(<Object Recognition f ...
随机推荐
- Flask_安装和配置(一)
安装Flask pip install flask 一 .创建Flask项目 Flask与Django相比,没有提供任何自动创建项目的操作,所以需要手动创建项目及启动项目的管理文件 例如,创建项目目录 ...
- springboot 项目在idea 中不能起动,但是在eclipse中能起动
新建的springboot 项目,在idea中用main方法起动时出现如下 : 但是把项目导入到eclispe中却能正常运行,百思不其解,网上一通百度,有的说没有依赖springboot的web 启动 ...
- java单元测试调用mybatis接口并执行
今天想使用单元测试类,存储一些数据到mysql,可是,一直在报错,org.springframework.beans.factory.NoSuchBeanDefinitionException: No ...
- 记一次 .NET 某消防物联网 后台服务 内存泄漏分析
一:背景 1. 讲故事 去年十月份有位朋友从微信找到我,说他的程序内存要炸掉了...截图如下: 时间有点久,图片都被清理了,不过有点讽刺的是,自己的程序本身就是做监控的,结果自己出了问题,太尴尬了 二 ...
- Visaul Studio 2015 MFC 应用程序工程创建
近一段时间开始接触到MFC桌面开发程序,忙完了一段时间的项目开发之后,来整理整理Visaul Studio 2015开发MFC桌面程序的基本功能. 首先从创建软件工程项目开始,Visaul Studi ...
- java string 转化为json_java String 转Json报错
缺少jar包依赖: java.lang.NoClassDefFoundError: org/apache/commons/beanutils/DynaBean 缺少commons-beanutils- ...
- VictoriaMerics学习笔记(2):核心组件
核心组件 1. 单机版 victoria-metrics-prod 单一二进制文件 读写都在一个节点上 作者推荐单机版 特性 merge方式配置 通过HTTP协议提供服务 内存限制(防止OOM) 使用 ...
- 【初体验】macos下android ndk交叉编译hello world,并拷贝到android手机上执行
1.机器上以前安装了java 1.8(貌似android ndk不需要java) 2. 下载android ndk,版本是android-ndk-r14b (比较奇怪,我下载了最新的android-n ...
- 判断jquery类库是否加载,如未加载则加载。
本人所有文章使用到的东西均在"渭南电脑维修网"网站中得以实现和应用,还请大家参考. 抄写别人网站的同时,N多不同的网站,势必有N多的css.javascript引用文件都会重复引用 ...
- 基础概念(3):怎么写一个c程序?
总结卡片: 遵循c语言的规则,即可写出c程序.规则下有两个重要概念:函数与变量.就好像游戏中的打仗,要考虑怎么打,谁来打."怎么打"就是流程,把流程封装起来就是函数,流程也叫算法. ...