7.8.9.BLOB分析及流程,图像分割出区域,区域集合运算及特征筛选
BLOB分析及流程
BLOB分析:将图像分割出区域然后再进行分析
以ball例子为例
流程如下:
读取图片->找产品(即焊板)->缩小区域聚焦于产品上->阈值分割->根据特征找焊点(即圆形,使用圆进行开运算)->统计形状
灰度直方图:可以滑动两端的线控制哪个灰度值的区域显示
阈值分割的方法
1.普通灰度值分割
threshold(Image, Region, 128, 255)
2.自动分割,例如自动分割黑色区域,使用的是OSTU大津法自动获取分割阈值,适用于简单的,前景和背景明显的
binary_threshold (Image, Region1, 'max_separability', 'dark', UsedThreshold)
3.局部动态阈值分割,一般结合均值滤波使用,适用光线有变化、不均匀的场景,以下代码中,mean中w表示与周围的w个像素做平均,w一般与想找出的线条或者区域的宽度相关,设宽度为d,则w一般取值为2*d+1,dyn中c表示像素的灰度差
mean_image (Image, ImageMean, w, w)
dyn_threshold (ImageMean, ImageMean, RegionDynThresh, c, 'light')
区域集合运算及特征筛选
形态学运算:开、闭、膨胀、腐蚀,集合运算:union(并)、difference(减)、intersection(交)
例子:目标是找到那7个小圆点,思路是先找到下图黄色的矩形,然后缩小范围找到绿色矩形再到大圆,然后再缩小范围找到小圆
1.阈值分割,打散,打散后绿色部分智能找到边界,然后使用fill_up填充绿色部分,再使用矩形开运算找到绿色的矩形
2.然后通过面积或者矩形度,进一步筛选出下图绿色的小矩形
3.使用交运算,将矩形和之前打散的部分相交,得到矩形内的所有小元素及其边界,为一个整体,注:一个和一个交运算结束后结果为一个整体,多个和一个交运算结果为多个,交运算前后是有区别的
4.再次打散
5.使用圆度加外接圆半径寻找大圆圈
6.再将大圆与上次打散相交,得到大圆内的元素
7.再使用面积寻找小圆,并寻找多少个,求半径