4、Halcon图形变量

  1. 图形变量Image
    1. 通道:每一个通道可以理解为一个矩阵彼此独立,灰度图是单通道,彩色图(RGB)是三通道
    2. 像素类型:'int1','int2',int4','int8','byte','real','direction','cyclic','complex'

      常见的是byte (8位,一个字节,区间0~255)

    3. 图像算子

      算子--------》Image

    4. 预处理图像

      使用mean_imge或inomial_filter噪声

      抑制小斑点或细线使用mean_imge

      平滑图像可以使用smooth_image

      如果又想平滑图像又想保存边缘,可以尝试anisotropic_diffusion(对于大图像处理时间可能会长)

  2. 图形变量Region
    1. Region可以理解为符合某些性质像素的子集,如下图灰度图片通过阈值操作后产生的红色区域就是Region就是选中的区域,它只表示一个区域。黑色覆盖部分在叠加时候可以理解为透明的一块区域。

      例子:

      *读入一张图片

      read_image (Image, 'C:/picture/1.jpg')

      *转换为灰度图

      rgb1_to_gray (Image, GrayImage)

      *进行阈值操作产生一个region

      threshold (GrayImage, Regions1, 91, 255)

      *清空图形窗口,只显示Regions1

      dev_clear_window ()

      dev_display (Regions1)

       

    2. 也可以通过代来生成规则的region区域

      *代码生成region

      dev_clear_window ()

      gen_circle (Circle, 200, 200, 100.5)

      gen_ellipse (Ellipse, 400, 400, 0, 100, 60)

    3. 鼠标绘画region区域

    *鼠标手动绘画生成region

dev_clear_window ()

*当鼠标执行到这里的时候程序会一直卡在这里,直到鼠标在3600窗口(图形窗口)绘画并右键点击后才继续往下执行

draw_region (Region, 3600)

效果:

鼠标左键划区域:

右键单击确认,并自动生成该region

    注:region也不一定是一个区域,表示层区域只是它的一种形式,也可以修改它的表示形式为边界:

  1. Region筛选操作:

    有时对图像进行阈值操作时可能会产生很多不感兴趣的region,可以通过它的面积,圆度(圆为1,有缺口或孔则小于1)、宽度等进行筛选:

    read_image (Bond, 'die/die_03')

    *阈值操作

    threshold (Bond, Regions, 0, 59)

    *连通域操作,把每个分开的region分离

    connection (Regions, SelectedRegions)

    *面积筛选操作

    select_shape (SelectedRegions, SelectedRegions1, 'area', 'and', 150, 5000)

     

  2. 计算每个连通域region的中心坐标以及面积

area_center (SelectedRegions1, Area, Row, Column)

  1. Region联合操作:

  1. Region转换操作shape_trans

    例子:下面以'convex'为例子。选择发这个参数是可以填充他的凹角

*读入一张图片

read_image (Image, 'C:/picture/1.jpg')

*转换为灰度图

rgb1_to_gray (Image, GrayImage)

*进行阈值操作产生一个region

threshold (GrayImage, Regions1, 91, 255)

 

shape_trans (Regions1, RegionTrans, 'convex')

效果:

执行shape_trans

执行后:

  1.  

    1. 例子:

      read_image (Image, 'C:/123.JPG')

      *XLD

      threshold_sub_pix (Image, Border,60)

      效果:

      放大后:

      说明:XLD是一个边缘轮廓线,它不像Region类型是沿着像素点的边缘,而是穿过亚像素(经过某种运算进行插值)所以XLD的进度比Region高。如上图。

    2. read_image (Image, 'C:/123.JPG')

      threshold (Image, Regions, 0, 65)

      *第一参数为region类型,第二个参数为输出的XLD类型

      gen_contour_region_xld (Regions, Contours, 'border')

      效果:(红色为region,蓝色为XLD)

      注:由于这个XLD是有Region转换过来的,说一则是的XLDRegion差不多一样,都是沿着像素点边缘。

gen_polygons_xld (xld2, Polygons2, 'ramer', 2)//xld contour转换为xld polygon

*圆度筛选

select_shape_xld (Border, SelectedXLD, 'circularity', 'and', 0.8, 1)

*凸度筛选

select_shape_xld (Border, SelectedXLD, 'convexity', 'and', 0.8, 1)

*离心度(椭圆长半轴比短半轴)

select_shape_xld (Border, SelectedXLD, 'anisometry', 'and', 1.4, 9999999)

*最大半径

select_shape_xld (Border, SelectedXLD, 'max_diameter', 'and', 0, 7)

  1. threshold_sub_pix (Image, Border_xld,60)

    area_center_xld (Border_xld, Area, Row, Column, PointOrder)

*合并在同圆上的XLD

union_cocircular_contours_xld (Border_xld, UnionContours, 0.5, 0.1, 0.2, 30, 10, 10, 'true', 1)

*合并在同直线的XLD

union_adjacent_contours_xld (Border_xld, UnionContours2, 10, 1, 'attr_keep')

*合并邻近的XLD

union_collinear_contours_xld (Border_xld, UnionContours1, 100, 100, 2, 0.1, 'attr_keep')

例子:

*XLD进行闭合操作

shape_trans_xld (Border_xld, XLDTrans, 'convex')

效果:

segment_contours_xld (Border_xld, ContoursSplit, 'lines_circles', 5, 4, 2)

 

  1. *拟合圆

    fit_circle_contour_xld (SelectedXLD, 'algebraic', -1, 0, 0, 3, 2, Row, Column, Radius, StartPhi, EndPhi, PointOrder)

    *拟合椭圆

    fit_ellipse_contour_xld (SelectedXLD, 'fitzgibbon', -1, 0, 0, 200, 3, 2, Row1, Column1, Phi, Radius1, Radius2, StartPhi1, EndPhi1, PointOrder1)

    *拟合直线

    * fit_line_contour_xld (SelectedXLD, 'tukey', -1, 0, 5, 2, RowBegin, ColBegin, RowEnd, ColEnd, Nr, Nc, Dist)

    *拟合矩形

    * fit_rectangle2_contour_xld (SelectedXLD, 'regression', -1, 0, 0, 3, 2, Row2, Column2, Phi1, Length1, Length2, PointOrder2)

posted @ 2022-04-30 20:46  ihh2021  阅读(1008)  评论(0编辑  收藏  举报