一.相关算子:
1.threshold(Image : Region : MinGray, MaxGray : )
分割图像,输出灰度值在设定的最小最大灰度之间的区域。
2.shape_trans(Region : RegionTrans : Type : )
按Type转化区域形状为RegionTrans
'convex':加凸壳。
'ellipse':和输入区域具有相同的长短测度的椭圆。
Ellipse with the same moments and area as the input region.
'outer_circle':包含区域的最小圆形。
'inner_circle':被区域包含的最大圆。
'rectangle1':最小包含矩形,平行于坐标轴。
'rectangle2':包含区域的最小矩形。
'inner_rectangle1': 适合区域大小的和区域最大长度方向一致的内矩形。
'inner_center':抽取内部骨架点,到区域中心距离最小。
3.fill_up_shape(Region : RegionFillUp : Feature, Min, Max : )
填充具有某种形状特征的区域,并输出填充区域。形状特征包括:'area', 'compactness', 'convexity', 'anisometry', 'phi', 'ra', 'rb', 'inner_circle', 'outer_circle'
4.select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : )
依据形状特点,及该特点的最大最小值选择区域。详见Help文件。
List of values: 'area', 'row', 'column', 'width', 'height', 'row1', 'column1', 'row2', 'column2', 'circularity', 'compactness', 'contlength', 'convexity', 'rectangularity', 'ra', 'rb', 'phi', 'anisometry', 'bulkiness', 'struct_factor', 'outer_radius', 'inner_radius', 'inner_width', 'inner_height', 'max_diameter', 'dist_mean', 'dist_deviation', 'roundness', 'num_sides', 'orientation', 'connect_num', 'holes_num', 'area_holes', 'euler_number', 'rect2_phi', 'rect2_len1', 'rect2_len2', 'moments_m11', 'moments_m20', 'moments_m02', 'moments_ia', 'moments_ib', 'moments_m11_invar', 'moments_m20_invar', 'moments_m02_invar', 'moments_phi1', 'moments_phi2', 'moments_m21', 'moments_m12', 'moments_m03', 'moments_m30', 'moments_m21_invar', 'moments_m12_invar', 'moments_m03_invar', 'moments_m30_invar', 'moments_i1', 'moments_i2', 'moments_i3', 'moments_i4', 'moments_psi1', 'moments_psi2', 'moments_psi3', 'moments_psi4'
5.sort_region(Regions : SortedRegions : SortMode, Order, RowOrCol : )
依据相对位置关系储存区域。
6.dev_set_colored( : : NumColors : )
显示多种输出颜色。
7.smallest_circle(Regions : : : Row, Column, Radius)
包含区域的最小圆。算法:该圆以区域中心为圆心,0.5步长递进。
* ball.hdev: Inspection of Ball Bonding
//检测电路板上的焊点//
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)
set_display_font (WindowID, 14, 'mono', 'true', 'false')
disp_continue_message (WindowID, 'black', 'true')
stop ()
threshold (Bond, Bright, 100, 255)//输出灰度值在100到255之间的区域//
shape_trans (Bright, Die, 'rectangle2') //输出Die区域,恰包含所有BRIGHT区域//
dev_set_color ('green')
dev_set_line_width (3)
dev_set_draw ('margin')
dev_display (Die)
disp_continue_message (WindowID, 'black', 'true')
stop ()
reduce_domain (Bond, Die, DieGrey) //图像定义域减小成DieGrey//
threshold (DieGrey, Wires, 0, 50)
fill_up_shape (Wires, WiresFilled, 'area', 1, 100) //填充并显示满足要求的区域,这个很重要,是下一步形态学运算的基础//
dev_display (Bond)
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 := 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
endfor
* dump_window (WindowID, 'tiff_rgb', './ball')
dev_set_color ('green')
dev_update_window ('on')
disp_continue_message (WindowID, 'black', 'true')
stop ()
dev_close_window ()