1、min_max_gray(Regions, Image : : Percent : Min, Max, Range)
Regions:ROI区域,也就是需要计算最大最小灰度值的区域。
Image:需要计算最大最小灰度值的图像,如果传入的是RGB三通道图像,则算子自动将彩色图像转换为黑白图像进行计算。
Min: 最小的灰度值。
Max: 最大灰度值。
Range:是灰度值的跨度,也就是Max-Min的值。
Percent:百分比参数,如果percent参数设置为5,那么图像中灰度值最大和最小的5%的像素不参与最大最小灰度值的计算。
例如:宽为256高为1的图像,包含从0到255范围内的每一个灰度的像素,即图象是这样
[0,1,2,3,4,5,7,8…251,252,253,254,255]
如果percent设置为5,那么忽略掉5%的最大最小像素,即忽略256*5%=10.24个像素,即10个像素,因此最大的10个像素[246,247,248,249,250,251,252,253,254,255]和最小的10个像素[0,1,2,3,4,5,6,7,8,9]被忽略,再次强调忽略的是10个像素,而不是10个像素级。此时min_max_gray这个算子返回的的最大值是245,最小值是10。当percent=50时,min=max,当percent=0,因为这个参数的存在,所以在计算最大最小灰度值的时候,可以通过对该参数进行设置从而计算出大趋势下的极大值和极小值,避免存在极亮或极暗的点而造成干扰。
2、shape_trans(Region : RegionTrans : Type : )*改变区域的形状
*改变区域的形状,形成一个与坐标平行的最小包围矩形
shape_trans (Bright, Die, 'rectangle1')
reduce_domain (Bond, Die, DieGrey)
这两个算子通常一起使用,如下组合先膨胀再得到指定的区域也经常使用
dilation_circle (RegionClipped, RegionDilation, 2.5)
reduce_domain (Image, RegionDilation, ImageReduced)
3、fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
opening_circle (WiresFilled, Balls, 9.5)
这两个算子通常一起使用,先填充后开运算,一般开运算之前先填充或膨胀。
4、select_shape_std(Regions : SelectedRegions : Shape, Percent : )
选择给定形状相似度大于percent的区域,
选择相似度大于百分之90的平行于坐标系的矩形区域
select_shape_std (SingleBalls, Rect, 'rectangle1', 90)
* ball_seq.hdev: Inspection of Ball Bonding
dev_update_off ()
* 注意这种写法
ImageNames := 'die/' + ['die_02','die_03','die_04','die_07']
*允许12种输出颜色
dev_set_colored (12)
read_image (Bond, ImageNames[0])
get_image_size (Bond, Width, Height)
dev_close_window ()
dev_open_window (0, 0, Width, Height, 'black', WindowHandle)
set_display_font (WindowHandle, 16, 'mono', 'true', 'false')
dev_set_draw ('fill')
dev_set_line_width (3)
NumImages := |ImageNames|
for I := 0 to NumImages - 1 by 1
read_image (Bond, ImageNames[I])
dev_display (Bond)
*找出区域中最小和最大的灰度值
min_max_gray (Bond, Bond, 0, Min, Max, Range)
threshold (Bond, Bright, Max - 80, 255)
*改变区域的形状,形成一个与坐标平行的最小包围矩形
shape_trans (Bright, Die, 'rectangle1')
dev_display (Die)
reduce_domain (Bond, Die, DieGrey)
min_max_gray (Die, Bond, 0, Min, Max, Range)
threshold (DieGrey, Wires, 0, Min + 30)
fill_up_shape (Wires, WiresFilled, 'area', 1, 100)
opening_circle (WiresFilled, Balls, 9.5)
connection (Balls, SingleBalls)
*选择给定形状,相似度大于percent的区域,选择相似度大于百分之90的平行于坐标系的矩形区域
select_shape_std (SingleBalls, Rect, 'rectangle1', 90)
difference (SingleBalls, Rect, IntermediateBalls)
gen_empty_region (Forbidden)
*填补区域间的空白,或分开重叠的区域
expand_gray (IntermediateBalls, Bond, Forbidden, RegionExpand, 4, 'image', 6)
opening_circle (RegionExpand, RoundBalls, 15.5)
*区域排序
sort_region (RoundBalls, 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 (RoundBalls)
if (I != NumImages)
disp_continue_message (WindowHandle, 'black', 'true')
endif
stop ()
endfor