代码地址:https://github.com/Xingxiangrui/circle_detect_on_phone_screen
目录
辅点检测程序说明
一、MSER算法
'RegionAreaRange',[600 3000]
'ThresholdDelta'
Eccentricity偏心率
二、霍夫变换找圆形区域
代码
辅点检测程序主要分两个主要部分:
- MSER区域提取
- 霍夫变换找圆形区域
辅点区域为用这两个算法的检测到的结果区域进行叠加
MSER = Maximally Stable Extremal Regions
目前业界认为是性能最好的仿射不变区域,MSER是当使用不同的灰度阈值对图像进行二值化时得到的最稳定的区域,特点:
1.对于图像灰度的仿射变化具有不变性
2.稳定性,区域的支持集相对灰度变化稳定
3.可以检测不同精细程度的区域
如下图:不同色彩的区域即为MSER探测出的灰度较为连续的区域。
在MSER算法运用到辅点的探测中时,运用辅点区域的特性对两个参数进行设置
区域的大小。经过测量,辅点区域的大小取值范围在[600 3000]之间
此参数可以避免探测到过大或者过小的区域。
'ThresholdDelta'
此值表示不同区域间灰度的差值,此值越小则算法探测到的区域数目越多。为了避免漏检情况,程序设置了四个
仅用上面两种参数可以探测出区域面积范围在600到3000的区域
下图为运用这两个参数探测到的结果
为了找出辅点区域,需要进一步进行筛选,辅点区域为圆形或方形区域,有着小的偏心率
Eccentricity偏心率
辅点区域的偏心率多小于0.8,运用这一参数就能把偏心率过大的区域滤掉。如下图,左为探测到区域,右为其中偏心率小于0.8的区域
MSER可以探测到灰度值相近的区域,但是当辅点左右差值过大的时候,或者辅点与背景对比度过小的时候,MSER算法检出率不高,注意到辅点中心与外围之间是圆形的,可以借助霍夫变换找出边缘,进而找出圆形区域。
运用霍夫变换找出边缘,然后在边缘中找出半径在14到40之间的圆形,
- 'ObjectPolarity','bright'辅点区域周围较暗,中间较亮,故检测背景较暗,中间较亮的圆形区域。
- 'Sensitivity',0.85,此值越大,算法越敏感,会把像圆的 区域检测出来,返回更多的圆。此值较小时候,算法会比较严格需要很圆的区域。
- 'EdgeThreshold',0.02,表示检测到边缘时的灰度差值,此值小的时候会把相邻像素点之间更小的差值当作边缘来看,因为辅点区域圆边缘与周围差值较小,所以此值应设较小。
红色圈出即为检测到的圆。
两个算法结合可以提升检出率
附:
1.Matlab霍夫变换找圆程序说明:
http://cn.mathworks.com/help/images/ref/imfindcircles.html#outputarg_metric
2.MSER区域探测程序说明:
http://cn.mathworks.com/help/vision/ref/detectmserfeatures.html