1、形态学练习:找到电路板中的所有的圆形内容并输出直径

* 此练习来自官方示例解读,官方示例 ball.hdev
* ball.hdev: Inspection of Ball Bonding
*dev_update_window 指定操作符调用返回的所有图标对象是否必须显示在活动图形窗口中
*(DisplayMode = 'on'--默认)或不显示(DisplayMode = 'off')。
dev_update_window ('off')
*关闭所有窗口
dev_close_window ()
dev_open_window (0, 0, 728, 512, 'black', WindowID)
read_image (Bond, 'die/die_03')
dev_display (Bond)
*设置窗口中显示的字体Size、字体格式Font、是否加粗、是否倾斜
set_display_font (WindowID, 14, 'mono', 'true', 'false')
*在屏幕右下角显示单击继续运行字样
disp_continue_message (WindowID, 'black', 'true')
stop ()
*二值化
threshold (Bond, Bright, 100, 255)
*将所选区域拟合成最矩形
shape_trans (Bright, Die, 'rectangle2')
dev_set_color ('green')
dev_set_line_width (3)
*设置填充模式,fill为显示填充区域,margin为显示填充的边框
dev_set_draw ('margin')
dev_display (Die)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*将区域冲图中扣出
reduce_domain (Bond, Die, DieGrey)
threshold (DieGrey, Wires, 0, 50)
*填充掉面积为1-100的区域
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
dev_display (Bond)
*设置填充模式,fill为显示填充区域,margin为显示填充的边框
dev_set_draw ('fill')
*设置颜色为红色
dev_set_color ('red')
dev_display (WiresFilled)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*开操作圆形
opening_circle (WiresFilled, Balls, 15.5)
dev_set_color ('green')
dev_display (Balls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*连通域打断
connection (Balls, SingleBalls)
*区域筛选
select_shape (SingleBalls, IntermediateBalls, 'circularity', 'and', 0.85, 1.0)
*区域列排序
sort_region (IntermediateBalls, FinalBalls, 'first_point', 'true', 'column')
dev_display (Bond)
dev_set_colored (12)
dev_display (FinalBalls)
disp_continue_message (WindowID, 'black', 'true')
stop ()
*找到区域内最小的圆,并输出圆心的坐标和半径
smallest_circle (FinalBalls, Row, Column, Radius)
*获取圆形的个数
NumBalls := |Radius|
*获取圆形的直径
Diameter := 2 * Radius
*求平均直径
meanDiameter := mean(Diameter)
*最小直径
minDiameter := min(Diameter)
dev_display (Bond)
*在窗口中显示完成的圆形
disp_circle (WindowID, Row, Column, Radius)
dev_set_color ('white')
*窗口中输出半径
disp_message (WindowID, 'D: ' + Diameter$'.4', 'image', Row - 2 * Radius, Column, 'white', 'false')
dev_update_window ('on')
