一、说明

        区域和轮廓在计算中总是互相交替使用,因此,了解好轮廓,能够更好地解决区域问题。本篇介绍三个获取外轮廓的例子。

二、凸包络:get_region_convex

 凸包络:get_region_convex是基于区域的一个操作,将返回一个输入区域A的外包洛的区域B的顶点。

  • 名称

get_region_convex —查询突起的外表作为轮廓(contour)。

  • 函数原型

get_region_convex(Region : : : RowsColumns)

  • 描述

运算符get_region_convex将区域的凸包返回为多边形。多边形是描述区域外壳的线()和列坐标(列)的最小结果。多边形像素位于该区域上。多边形从最小的线号开始;在此行中具有最大列索引的像素处。旋转方向为顺时针方向。多边形的第一个像素与最后一个像素相同。运算符get_region_convex以元组的形式返回坐标。空区域作为空元组传递。

三、内接和外接形状:shape_trans

 在一个区域上实现,内接、外接、包络图形的操作。

  • 名称

shape_trans — Transform the shape of a region.

  • 参数签名

shape_trans(region : RegionTrans : Type

  • 描述

        如果选择 Type = 'outer_circle',则可能会出现生成的圆形区域未完全覆盖输入区域的情况。这是因为在内部使用运算符smallest_circle 和gen_circle 来计算外圆。正如smallest_circle 文档中所述,计算出的半径可能太小,最多可达像素。此外,由 gen_circle 生成的圆在两个方向上平移最多 0.5 个像素,即最多 像素。因此,当将两种效果相加时,原始区域可能会超出返回的圆形区域最多 1 个像素。

'convex'

凸包。

'ellipse'

与输入区域具有相同矩和面积的椭圆。

'outer_circle'

最小外接圆。

'inner_circle'

适合该区域的最大圆圈。

'rectangle1'

平行于坐标轴的最小外接矩形。

'rectangle2'

最小的外接矩形。

'inner_rectangle1'

适合该区域的最大轴平行矩形。

'inner_center'

输入区域骨架上与输入区域重心距离最小的点。

参考其他

convexity,,,,,,,,,,, _ _ _ _ _ _ _ elliptic_axisarea_centersmallest_rectangle1smallest_rectangle2inner_rectangle1set_shapeselect_shapeinner_circle

四、参考示例代码


read_image (Image, 'f:/images/DOTS/block.jpg')
rgb1_to_gray(Image,gray)

get_image_size(gray,width,height)
* gen_rectangle1(rect,0,0,height,width)
fast_threshold (gray,regin,0, 50 , 7)
get_region_convex(regin, row, col)
gen_image_const(BlkImage,'byte',width,height)

for I:=0 to |row|-1 by 1
    tmpRow :=row[I]
    tmpCol :=col[I]
    set_grayval(BlkImage, tmpRow, tmpCol, 228)
endfor
dev_display(BlkImage)
disp_polygon(3600, row, col)


原图:


halcon深度学习参数优化 halcon算法库_halcon深度学习参数优化


显示突出点: 


halcon深度学习参数优化 halcon算法库_halcon深度学习参数优化_02


 将突出点连接的图形为:


halcon深度学习参数优化 halcon算法库_halcon深度学习参数优化_03


2.2 如何从散列点生成轮廓区域


halcon深度学习参数优化 halcon算法库_halcon深度学习参数优化_04


  

  • gen_region_polygon( : Region : Rows, Columns : )

五、生成多边形:gen_region_polygon (Operator)

        用鼠标在屏幕上生成一个多边形区域。

5.1 鼠标交互 draw_polygon (Operator)

  • 名称

draw_polygon —交互式绘制多边形.

  • 函数原型

        draw_polygon( : PolygonRegion : WindowHandle : )

  • 描述

        draw_polygon 生成图像。该图像的区域恰好跨越通过鼠标单击交互输入的图像点(灰度值保持未定义)。

        按下鼠标左键时会在输出窗口中进行绘画。释放鼠标左键并在另一个位置按下它会在这两点之间绘制一条线。按鼠标右键终止输入。在 macOS 上,draw_polygon 也可以通过按退出键终止。绘画使用由 set_color、set_rgb 等设置的颜色。

        要将灰度值放在创建的 PolygonRegion 上以进行进一步处理,您可以使用运算符reduce_domain。

5.2 gen_region_polygon

        通过polygon顶点  RowsColumns 生成对应的区域。

  • 名称

gen_region_polygon — Store a polygon as a region.

  • 函数原型

gen_region_polygon( : Region : RowsColumns : )

  • 描述

        运算符 gen_region_polygon 从由一系列行和列坐标描述的多边形行创建一个区域。创建的区域由由此定义的路线的像素组成,其中它在基点之间线性插值。

        通过散列点坐标,生成一个区域,该区域是轮廓条区域。通过该区域,可以生成亚像素轮廓线。如(上图的红色线状区域)。

六、生成样条曲线:gen_contour_nurbs_xld

  • gen_contour_nurbs_xld

        gen_contour_nurbs_xld 生成近似 NURBS 曲线(非均匀有理 B 样条曲线)的 XLD 轮廓。 NURBS 曲线由其度数、控制多边形(通过行和列)、权重向量和节点向量指定。(上图的绿色线状区域)。       

         曲线的度数决定了曲线的可微性等级。曲线位于其控制多边形 (Rows,Cols) 的凸包内。权重中的权重决定了曲线被各个控制点(行、列)吸引的程度。如果选择“自动”,则会生成对所有控制点具有相同权重的权重向量。 Knots 向量描述了曲线的域。通常,此参数可以设置为“自动”。

        生成的 Contour 的精度取决于两个参数 MaxDistance 和 MaxError。 MaxDistance 限制两个后续 Contour 点的最大距离。生成的 Contour 和实际 NURBS 曲线之间的最大距离限制为 MaxError。默认情况下,近似值必须满足这两个约束,但可以将这些参数之一设置为“省略”。选择的 MaxError 和 MaxDistance 越低,曲线的近似值就越好。请注意,所有等高线点都准确地位于曲线上(数值不准确除外)。