本文是Blob示例之一,利用灰度阈值进行的分割的方法,进行焊点检测的算法思路。
电路板的图片如下:焊点是上面黑色圆形区域。

问题分析:
焊点为暗色目标区域
,而焊点的分布区域在较亮区域W,
,因此,需要将大集合M优先提出。
- *灰度处理 二值化
- threshold (Bond, Bright, 100, 255)
- *形态学处理 一般用于定位,形状转换,rectangle2带方向的矩形
- shape_trans (Bright, Die, 'rectangle2')
注意:以上将包含前景的区域提出来,缩小了搜索范围;以后操作在更小的区域上进行。通过reduce_domain将区域中的图像取出,准备进行第二次处理。
reduce_domain (Bond, Die, DieGrey)
threshold (DieGrey, Wires, 0, 50)
*用给定的形状特征填充区域:面积为1~100的区域
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
opening_circle (WiresFilled, Balls, 15.5)
connection (Balls, SingleBalls)
- select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
- sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
- smallest_circle (FinalBalls, Row, Column, Radius)
- NumBalls := |Radius|
- Diameter := 2*Radius
- meanDiameter := sum(Diameter)/NumBalls
- mimDiameter := min(Diameter)
- dev_display (Bond)
-
- disp_circle (WindowID, Row, Column, Radius)
- dev_set_color ('white')
- for i := 1 to NumBalls by 1
- if (fmod(i,2)=1)
- disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]-2.7*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')
- else
- disp_message (WindowID, 'D: '+Diameter[i-1], 'image', Row[i-1]+1.2*Radius[i-1], max([Column[i-1]-60,0]), 'white', 'false')
- endif
- endfor
