基于局部极值的分水岭算法的圆斑点检测

本次实验利用了基于局部极值的分水岭算法来实现圆斑点的检测。在OPENCV中提供了simpleBlobDetector特征检测器来实现这种斑点检测算法,正如它的名称,该算法使用最简单的方式来检测斑点类的特征点,效果较好,设置较为宽松的参数,就能取得较好的效果。

一 算法的步骤

第一步 多次二值化图像

首先通过一系列连续的阈值把输入的灰度图像转换为一个二值图像的集合,阈值范围为[T1, T2],步长为t,则所有阈值为:
T1,T1+t,T1+2t,T1+3t,……,T2

第二步 确定候选圆点

通过检测每一幅二值图像的边缘的方式提取出每一幅二值图像的连通区域,我们可以认为由边界所围成的不同的连通区域就是该二值图像的斑点。其中,并不是所有的二值图像的连通区域都可以认为是二值图像的斑点,我们通过一些限定条件来得到更准确的斑点。这些限定条件包括颜色,面积和形状,斑点的形状又可以用圆度,偏心率,或凸度来表示,具体参数和计算方法查看参数部分介绍。

第三步 对图像圆点进行分类,确定目标圆点

根据所有二值图像斑点的中心坐标对二值图像斑点进行分类,从而形成灰度图像的斑点,属于一类的那些二值图像斑点最终形成灰度图像的斑点,具体来说就是,灰度图像的斑点是由中心坐标间的距离小于阈值的那些二值图像斑点所组成的,即这些二值图像斑点属于该灰度图像斑点;

二 参数部分

filterByColor斑点颜色。

filterByArea斑点面积。连通区域的面积太大和太小都不是斑 。所以我们需要计算连通区域的面积,只有当该面积在我们所设定的最大面积和最小面积之间时,该连通区域才作为斑点被保留下来。

filterByCircularity 斑点圆度。任意形状的圆度C定义为:
这里写图片描述
其中,S和p分别表示该形状的面积和周长,当C为1时,表示该形状是一个完美的圆形,而当C为0时,表示该形状是一个逐渐拉长的多边形。

filterByInertia斑点惯性率。偏心率是指某一椭圆轨道与理想圆形的偏离程度,长椭圆轨道的偏心率高,而近于圆形的轨道的偏心率低。圆形的偏心率等于0,椭圆的偏心率介于0和1之间,而偏心率等于1表示的是抛物线。直接计算斑点的偏心率较为复杂,但利用图像矩的概念计算图形的惯性率,再由惯性率计算偏心率较为方便。偏心率E和惯性率I之间的关系为:
这里写图片描述
因此圆形的惯性率等于1,惯性率越接近1,圆形的程度越高(在实际操作中并没有用到)。
filterByConvexity 表示斑点凸度。在平面中,凸形图指的是图形的所有部分都在由该图形切线所围成的区域的内部。我们可以用凸度来表示斑点凹凸的程度,凸度V的定义为:

  • 1
    点赞
  • 33
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值