第五课: 图像的 BLOB 分析处理几何变换(min_max_gray,shape_trans,fill_up_shape,select_shape_std)---ball_seq.hdev

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

 

你可能感兴趣的:(机器视觉)