• halcon知识:区域专题【07】


    一、提要

    本篇与halcon之区域:多种区域(Region)特征(6)​​​​​​​属于同一篇博文,本篇将继续矩阵的算子,包括矩特征。海明距离等。

    二、区域算子

    2.1 regiongrowing是将区域合并的算法

    regiongrowing: 将图像分割成相同强度的区域 --- 光栅化成大小为 Row * Column 的矩形。为了判断两个相邻的矩形是否属于同一个区域,只使用它们的中心点的灰度值。如果灰度值差小于或等于 Tolerance,则将矩形合并为一个区域。

    如果 g_{1} 和 g_{2} 是要检查的两个灰度值,则在以下情况下将它们合并到同一区域:

    1)    | g_{1} - g_{2} | < torlerance

    2)    | g_{1} - g_{2} | < torlerance &  | g_{1} - g_{2} | < 127

    3)    255 - | g_{1} - g_{2} | < torlerance  & 127 < | g_{1} - g_{2} | 

    2.2 expand_region充实区域间隙

    expand_region 填充输入区域之间的间隙,这是由于在分割算子中抑制小区域而导致的,例如,(模式“图像”)或分离重叠区域(模式“区域”)。这两种用途都源于地区的扩大。操作员通过向一个区域添加或删除一个像素宽的“条”来工作。

    扩展仅发生在指定为非“禁止”的区域(参数 ForbiddenArea)。迭代次数由参数Iterations 确定。通过传递“最大”,expand_region 迭代直到收敛,即,直到不再发生变化。通过为此参数传递 0,将返回所有非重叠区域。两种操作模式(“图像”和“区域”)在以下方面有所不同:

    'Image'
            输入区域被迭代扩展,直到它们接触到另一个区域或图像边界。在这种情况下,图像边界被定义为从 (0,0) 到 (row_max,col_max) 的矩形。这里,(row_max,col_max) 对应于所有输入区域(即在 Regions 和 ForbiddenArea 中传递的所有区域)的最小周围矩形的右下角。因为 expand_region 同时处理所有区域,所以区域之间的间隙均匀分布到所有区域。通过将重叠区域平均分配到两个区域来分割重叠区域。

    'region'
            不执行输入区域的扩展。相反,通过将重叠区域均匀地分配到各个区域来仅分割重叠区域。因为与原始区域的交集是在输出区域的收缩操作间隙之后计算的,即分割不完整。这可以通过第二次调用 expand_region 来防止,将原始区域的补集作为“禁止区域”。

    2.3  get_region_index

       功能:包括给定像素在内的所有的区域的索引。就是给定一个坐标,该坐标落到哪个区域内。

    • get_region_index(Regions : : Row, Column : Index)

    2.4 get  region_thickness

       功能:查询主轴附近区域的宽度(厚度)。

    • get_region_thickness(Region : : : Thickness, Histogramm)

            运算符 get_region_thickness 计算截面中每个像素沿主轴(参见 elliptic_axis)的区域厚度。主轴上某一点处的厚度定义为轮廓与主轴上铅垂在相应点上相距最远的交点之间的距离。此外,运算符 get_region_thickness 返回区域厚度的直方图。直方图的长度对应于观察区域中出现的最大厚度。

    1. read_image(Image, 'fabrik')
    2. get_image_size(Image, Width, Height)
    3. auto_threshold(Image, Regions, 3 )
    4. dev_open_window(0, 0, Width, Height, 'black', WindowHandle)
    5. select_obj(Regions, RegSelect, 1)
    6. get_region_thickness(RegSelect,Thickness, Histogramm)

            只能通过一个区域。如果该区域有多个连接组件,则只研究第一个。所有其他组件都被忽略。

    如上图中RegSelect是这个样子。而得到的Thickness只是第一个单独region块的扫描线宽度的列举。 

    2.5  hamming_distance

    • hamming_distance(Regions1, Regions2 : : : Distance,

       功能:两个区域间的汉明距离。

    算子 hamming_distance 返回两个区域之间的汉明距离,即不同区域的像素数(距离),即一个区域包含但另一个区域不包含的像素数:

     Distance:距离

    distance=|region1\cap \overline{region2}| + |region2\cap \overline{region1}

     Similarity:相似系数

    Similarity = 1- \frac{distance}{|region1|+|region2|})

      2.6 hamming_distance_norm

    • hamming_distance_norm(Regions1, Regions2 : : Norm : Distance, Similarity)

    功能:两个区域间的归一化汉明距离。

            运算符 hamming_distance_norm 返回两个区域之间的汉明距离,即不同区域的像素数(距离)。在计算差异之前,Regions1 中的区域被归一化到 Regions2 中的区域。结果是一个区域中包含但另一区域中不包含的像素数:

    2.7 hamming_change_region 

    hamming_change_region (Holes, OutputRegion, Width, Height, Error)

    hamming_change_region 更改由 Width 和 Height 给定的图像左上部分的区域,使得生成的区域与输入区域的汉明距离为 Distance。这是通过从输入区域添加或删除距离点来完成的。

    1. * Remove noise from a region
    2. *
    3. read_image (Caltab, 'caltab')
    4. get_image_size (Caltab, Width, Height)
    5. threshold (Caltab, Region, 0, 120)
    6. connection (Region, ConnectedRegions)
    7. select_shape (ConnectedRegions, SelectedRegions1, 'convexity', 'and', 0.9, 1)
    8. select_shape (SelectedRegions1, SelectedRegions2, 'area', 'and', 200, 1000)
    9. union1 (SelectedRegions2, Holes)
    10. for Error := 1 to 10000 by 1000
    11. * Change the region with the 'Error' hamming distance
    12. hamming_change_region (Holes, OutputRegion, Width, Height, Error)
    13. dev_clear_window ()
    14. dev_set_color ('red')
    15. dev_display (OutputRegion)
    16. hamming_distance (Holes, OutputRegion, Distance1, Similarity1)
    17. * Remove noise
    18. remove_noise_region (OutputRegion, NoiseRed, 'n_4')
    19. hamming_distance (Holes, NoiseRed, Distance2, Similarity2)
    20. dev_set_color ('green')
    21. dev_display (NoiseRed)
    22. stop ()
    23. endfor

    2.8 inner_circle

       功能:一个区域内部最大的圆周。

    • inner_circle(Regions : : : Row, Column, Radius)

    获得区域的内部最大内接圆。

    2.9 inner_rectangle1

       功能:一个区域内部最大的矩形。

    • inner_rectangle1(Regions : : : Row1, Column1, Row2, Column2)

    区域内部最大矩形,该矩形边平行于窗口。 

    2.10 moments_region_2nd

       功能:区域的矩特性。

    • moments_region_2nd(Regions : : : M11, M20, M02, Ia, Ib)

            moment_region_2nd 计算 Regions 中输入区域的几何矩 M11、M20 和 M02。此外,输入区域的长轴和短轴在 Ia 和 Ib 中计算并返回。协方差矩阵由下式给出:

             2 阶行相关矩在 M20 中返回,2 阶列相关矩在 M02 中返回。矩 M11 表示区域点的行和列坐标之间的协方差。

    r0和c0是区域 R 的重心坐标。那么力矩定义为:

    2.11 moments_region_2nd_invar

       功能:区域的某矩特性。

    • moments_region_2nd_invar(Regions : : : M11, M20, M02)

    运算符 moment_region_2nd_invar 计算轴的缩放力矩 (M20, M02) 和通过平行于坐标轴 (M11) 的中心的轴的惯性系数。

    Z0和S0是区域 R 的中心与区域 F 的坐标。Mij 然后矩定义为:

     其中Z和S是区域所有点的坐标。

    2.12 moments_region_2nd_rel_invar

       功能:计算相关矩的参数。

    • moments_region_2nd_rel_invar(Regions : : : PHI1, PHI2)

    运算符 moment_region_2nd_rel_invar 计算缩放的相对矩 (PHI1, PHI2)。

    矩 PHI1 和 PHI2 定义为:

     如果传递了多个区域,则结果存储在元组中,元组中值的索引对应于输入中区域的索引。

    在空白区域的情况下,如果没有设置其他行为,则所有参数的值都为 0.0(参见 set_system)。

  • 相关阅读:
    测试--自动化测试selenium
    基于SSM的“鲜花”电子商务平台设计与实现
    Idea index过程时间长
    后凯恩斯学派给出的不同答案-中国视角下的宏观经济
    数据库小记-mysql-DDL、DML、DQL
    css去掉图片底部白边
    北理工嵩天Python语言程序设计笔记(5 程序的控制结构)
    【故障公告】攻击式巨量并发请求再次来袭,引发博客站点故障
    【编程题】【Scratch一级】2022.06 报时的公鸡
    0015Java程序设计-springboot美食网站
  • 原文地址:https://blog.csdn.net/gongdiwudu/article/details/125487335