halcon domain和region总结

发布于:2024-04-19 ⋅ 阅读:(33) ⋅ 点赞:(0)

1.domain是什么

在halcon中,ROI(Region Of Interest)被称为图像的域(domain)(参考《solution_guide_i.pdf》)。这个术语来自数学中的定义域,而图像就是函数,本函数负责将坐标映射到像素值,即f(x) = gray这样子(=。=),那么这个domain就是x的范围,即定义了图像中感兴趣的部分区域(这样理解了吧)。
将region和图像结合的操作符是reduce_domain,即将原始图中定义域包含的部分保留下来

2.domain操作

原图像为:printer_chip/printer_chip_01
在这里插入图片描述

2.1 get_domain

对原始图像进行操作,返回的domain(即定义域)是整幅图像:

read_image (Image, 'printer_chip/printer_chip_01')
get_domain (Image, Domain)

可以看到,此时的domain的类型为region:
在这里插入图片描述

2.2 reduce_domain

即将图像缩减到给定的定义域中,这里创建一个ROI感兴趣区,然后将图像定义域缩减到感兴趣区内:
在这里插入图片描述

gen_rectangle1 (ROI_0, 372.795, 866.854, 763.002, 1020.81)
reduce_domain (Image, ROI_0, ImageReduced)

可以看到ImageReduced还是图像类型,大小和原始图像也一样,且能看到这个图像中包含了Region

在这里插入图片描述

2.3 complement

求ROI即Region的补集,这个在某些情况下还是挺有用的:

complement (ROI_0, RegionComplement)

在这里插入图片描述

2.4 crop_domain

裁切图像,注意此处的图像大小变为了domain定义的最小外接矩形:

crop_domain (ImageReduced, ImagePart)

在这里插入图片描述

2.5 change_domain

修改图像的定义域,注意不要超出图像范围。
下面代码中ImageReduced已经是之前定义域的图像,可直接在此基础上直接修改定义域而不需要访问原图像。

gen_circle (ROI_0, 620.11, 459.981, 189.338)
change_domain (ImageReduced, ROI_0, ImageNew)

2.6 full_domain

扩展当前定义域到最大范围,不需要多解释。

full_domain (ImageNew,ImageFull)
get_domain (ExpandedImage, Domain1)

2.7 expand_domain_gray

扩展定义域的范围,且将边界像素的灰度值复制到域的外部。HALCON中的所有滤波器根据滤波器宽度使用域外像素的灰度值。这可能会在域的边界区域产生不良的副作用。例如,如果图像的前景(域)和背景在亮度上有很大差异,滤波器操作的结果可能会导致域的边界出现不希望的变暗或变亮。

expand_domain_gray (ImageReduced, ExpandedImage, 200)

在这里插入图片描述

2.8 difference

计算两个Region的不同,只保留交集

3.Region

实际上,Domain定义的区域就是Region,halcon中没有类型Domain,只有Region,Domain只在接口上和数学定义上出现。比如上面的ROI定义,通过get_domain后拿到的就是region。

  • halcon使用“行程编码”方式描述所有的区域,即第几行从哪一列到哪一列这样描述region
  • region都是像素级的!
  • region的产生一般是通过阈值分割或形态学操作等产生的。

3.1 threshold

分割图像即可得到Region,只有一个region,包含各个独立的闭合区域,可以用connection连接为不同的多个region。
下面的操作中,ImageReduced2是只保留分割后Region的图像。

threshold (Image, Region, 128, 255)
reduce_domain (Image, Region, ImageReduced2)

在这里插入图片描述

3.2 get_region_points

这个接口很有用,可以拿到region中定义的坐标序列,在某些对像素进行批量操作时很好用。

get_region_points (Region, Rows, Columns)

在这里插入图片描述

3.3 get_region_contour

获取region边界的行列数组,忽略区域的孔。只能传递一个区域,并且此区域必须正好有一个连接组件。

3.4 gen_xx

  • gen_checker_region:创建棋盘region。

  • gen_circle( : Circle : Row, Column, Radius : ):创建圆形region,经过reduce_domain之后如图:
    在这里插入图片描述

  • gen_circle_sector:创建扇形圆

  • gen_ellipse:创建椭圆region

  • gen_empty_region:创建一个空的region,可以初始化一个空region来用于后面的循环region操作。

  • gen_rectangle1:创建一个和坐标轴平行的矩形

  • gen_rectangle2:创建一个指定朝向的矩形

  • gen_region_contour_xld:根据xld亚像素轮廓来创建region,注意会将边界的小数转变为整数。

  • gen_region_points:通过一些点来创建region

  • gen_region_histo:创建灰度统计直方图:
    在这里插入图片描述

3.5 Regions/Features

  • rea_center(Regions : : : Area, Row, Column):计算区域regions的面积及中心
  • area_holes(Regions : : : Area),运算符area_holes计算输入区域中孔的面积。区域定义为孔中包含的像素数。如果一个区域有多个孔,则返回该区域中所有孔的面积之和。
  • select_shape(Regions : SelectedRegions : Features, Operation, Min, Max : ):根据特征筛选region,和特征直方图搭配使用。
  • circularity(Regions : : : Circularity):区域的圆度,越接近圆,圆度接近1。
    其他直接参考帮助文档。
    (紧凑度compactness、边缘长度contlength、凸性convexity、矩形行rectangularity、椭圆主矩ra、椭圆次矩rb、椭圆朝向phi、各向异性测量::(椭圆的长轴和短轴之比)、蓬松度bulkiness、结构系数struct_factor、最小外接圆半径outer_radius、最大内接圆半径inner_radius、最大内接轴平行矩形的宽度inner_width/inner_height、区域边界到中心的平均距离dist_mean、区域边界到中心的距离偏差dist_deviation、圆度Roundness、多边形边数num_sides、连接组件数量connect_num、洞数量holes_num、洞面积area_holes、区域的最大直径max_diameter、区域朝向orientation、欧拉编号euler_number、最小外接矩形朝向rect2_phi、矩moments_m11/moments_m20…)

3.6 Transformations:

  • clip_region/clip_region_rel:用一个矩形框大小来裁剪region。

  • connection:连接输入的region,形成一个一个的子region。例如threshold 之后的图片如图所示,此时分割之后的region只有一个(鼠标点击后整体region被选中):
    在这里插入图片描述
    调用connection后,这种孤立的region会被单独分割出来:
    在这里插入图片描述

  • fill_up:填充region中的孔洞。

  • fill_up_shape:填充输入区域中具有给定形状特征的孔,注意是孔的形状。

  • partition_dynamic:将输入Region水平分割为宽度约为Distance的区域,如图:

  • 在这里插入图片描述

  • partition_rectangle:将输入Region水平分割为大小约为给定矩形的区域,可以看到下面的0被强行截断:
    在这里插入图片描述

  • remove_noise_region:清除region中的噪声点。
    在这里插入图片描述
    在这里插入图片描述

  • shape_trans:将region转换为内接圆、外接矩形等形状。
    在这里插入图片描述

3.7 Geometric Transformations

affine_trans_region:仿射变换
mirror_region:镜像
move_region:移动
polar_trans_region
polar_trans_region_inv
transpose_region
zoom_region:缩放

3.8 Sets

complement:计算region的互补部分。
difference:计算两个region不同的部分。
intersection:计算两个区域相交的部分
symm_difference:计算两个区域的对称差
union1:合并输入的所有region,输出一个region
union2:只合并输入的两个region