halcon中XLD

avatar
作者
猴君
阅读量:0

一、halcon中XLD的概念

     在 HALCON 中,XLD(Extended Line Description)是用于描述图像中几何形状和轮廓的高级数据结构。XLD 提供了比传统边缘检测结果更丰富的信息,并支持亚像素精度。这使得 XLD 在许多图像处理和计算机视觉应用中非常有用,如形状匹配、物体检测、图像分割等。它可以表示许多形状

XLD 的特性:

  1. 亚像素精度:XLD 支持亚像素精度,这意味着轮廓的坐标可以在像素之间,从而提供更高的精度。
  2. 丰富的几何信息:XLD 包含了关于轮廓的详细信息,如每个点的坐标、曲率、法线方向等。
  3. 多样的形状描述:XLD 可以表示多种几何形状,包括直线段、圆弧、椭圆等。
  4. 可视化和操作:HALCON 提供了多种函数,用于创建、操作、变换和可视化 XLD 轮廓。

XLD 的数据结构:

XLD 轮廓主要由一系列点(亚像素坐标)和连接这些点的线段组成。常用的 XLD 对象包括:

  • Contours (轮廓):表示连续的边界线。
  • Polylines (折线):由多个线段组成。
  • Polygon (多边形):由闭合的线段组成。
  • Ellipse (椭圆):表示椭圆形状。
  • Circle (圆):表示圆形。

 亚像素的轮廓可以分为两种: 1.闭轮廓:首尾相交; 2.开轮廓:首尾不相交 

1. 闭轮廓(Closed Contours)

闭轮廓是指轮廓的起点和终点相交,即形成一个封闭的形状。闭轮廓通常用于表示完整的对象边界,例如圆形、矩形或其他多边形形状。闭轮廓的首尾相连,使其能够准确描述对象的外形和面积。

示例:

* 生成一个矩形的闭轮廓  gen_rectangle2_contour_xld(Rectangle, 200, 200, 0, 100, 50)  * 显示闭轮廓  dev_display (Rectangle)

2. 开轮廓(Open Contours)

开轮廓是指轮廓的起点和终点不相交,即形成一个未闭合的形状。开轮廓通常用于表示边缘或轮廓片段,例如对象的一部分边缘或线段。开轮廓在测量和匹配任务中非常有用,尤其是当只需要部分轮廓信息时。

示例:

* 生成一个开轮廓  gen_polygons_xld(Polygon, [200, 300, 400], [200, 250, 200])  * 显示开轮廓  dev_display (Polygon)

二、halcon中XLD相关算子

2.1、轮廓提取和检测

  • edges_sub_pix: 提取亚像素边缘轮廓。
  • lines_gauss: 从图像中提取亚像素精度的直线轮廓。
  • find_edges_sub_pix: 提取亚像素精度的边缘。
  • gen_contours_xld: 生成轮廓线的 XLD 描述。

2.2、 轮廓处理

  • clip_contours_xld: 剪裁 XLD 轮廓到指定的矩形区域内。
  • reduce_domain: 减小图像域,并对 XLD 轮廓进行裁剪(间接影响)。
  • segment_contours_xld: 将 XLD 轮廓分割为多个部分。

2.3、 轮廓特征提取

  • area_center_xld: 计算 XLD 轮廓的面积和中心。
  • select_shape_xld: 从给定的 XLD 轮廓中选择满足特定形状特征的轮廓。
  • select_contours_xld:从给定的 XLD 轮廓中选择满足多个特征要求的轮廓,更适合用于筛选基于轮廓长度、方向等特征的轮廓。
  • measure_pairs: 在 XLD 轮廓上进行测量。

2.4、 轮廓拟合

  • fit_line_contour_xld: 拟合直线到 XLD 轮廓。
  • fit_circle_contour_xld: 拟合圆形到 XLD 轮廓。
  • fit_ellipse_contour_xld: 拟合椭圆到 XLD 轮廓。
  • fit_rectangle2_contour_xld: 拟合矩形到 XLD 轮廓。

2.5、 轮廓变换

  • affine_trans_contour_xld: 对 XLD 轮廓应用仿射变换。
  • shape_trans_xld: 将 XLD 轮廓转换为其他形状,如凸包、外接圆、矩形等。
  • scale_contours_xld: 对 XLD 轮廓进行缩放。

2.6、 轮廓合并

  • union_collinear_contours_xld: 合并在同一直线上的 XLD 轮廓。
  • union_cocircular_contours_xld: 合并在同圆上的 XLD 轮廓。
  • union_adjacent_contours_xld: 合并相邻的 XLD 轮廓。

2.7、 轮廓显示

  • dev_display: 在窗口中显示 XLD 轮廓。
  • disp_arrow: 显示箭头,用于标记 XLD 轮廓的重要部分。

2.8、 轮廓分析

  • contour_xld_to_polygon_xld: 将 XLD 轮廓转换为多边形 XLD。
  • polygon_to_xld: 将多边形数据转换为 XLD 轮廓。

三.XLD的应用

3.1 生成XLD的操作

 threshold_sub_pix (Image, Border, Threshold, Features)
 作用:提取图像中的亚像素级别轮廓,利用亚像素精度提高边缘的准确性。

  • Image: 输入图像,通常是灰度图像或者经过预处理的图像。
  • Border: 设置边缘检测的边界类型(例如,'light'、'dark'),决定了是检测明亮边缘还是暗边缘。
  • Threshold: 用于轮廓提取的阈值,图像的灰度值与此阈值比较,确定是否属于轮廓。
  • XLD: 输出的 XLD 轮廓。

xld的特征部分和region有很多相同的部分:
1.基础特征:xld面积,中心,宽高,左上角及右下角坐标。
2.形状特征:圆度,紧密度,长度,矩形度,凸性,偏心率,蓬松度(bulkiness),外接圆半径,外接矩形的方向及两边长度等。
3.云点特征:云点面积,中心,等效椭圆半轴及角度,云点方向等。
4.几何特征:二阶矩等。 

3.2 选取特定XLD

1. select_shape_xld (XLDs, SelectedXLD,Feature, Operation, Min, Max)

功能:选择特定形状特征要求的xld轮廓或多边形
算子参数:
XLDs:要提取的XLD
SelectedXLDs:提取到的XLD
Feature:提取XLD的特征依据
Operation:特征之间的逻辑关系(and or)
Min,Max:特征值的要求范围

在下面示例中,select_shape_xld 算子根据宽度在 50 到 100 之间筛选 XLD 对象。 

* 读取包含XLD的图像 read_image (Image, 'some_image_with_xlds.jpg') edges_sub_pix (Image, Edges, 'canny', 1, 20, 40) * 根据宽度筛选XLD select_shape_xld (Edges, SelectedXLD, 'width', 'and', 50, 100) * 显示结果 dev_display (SelectedXLD) 

2. select_contours_xld (Contours, SelectedContours, Features, Min, Max, Min2, Max2)

功能:选择多种特征要求的XLD轮廓 (如长度 开闭 方向 等特征,不支持多边形)
算子参数:
Contours:要提取的XLD轮廓
SelectedContours:提取到的XLD轮廓
Features:提取XLD轮廓的依据(筛选)
Min,Max,Min2,Max2:特征值的范围

在下面示例中,select_contours_xld 算子根据轮廓长度在 50 到 100 之间,宽度在 20 到 50 之间筛选轮廓对象。

* 读取图像并提取轮廓 read_image (Image, 'some_image_with_contours.jpg') edges_sub_pix (Image, Edges, 'canny', 1, 20, 40) gen_contours_skeleton_xld (Edges, Contours, 'filter', 1, 'true') * 根据轮廓长度和宽度筛选轮廓 select_contours_xld (Contours, SelectedContours, 'contour_length width', 50, 100, 20, 50) * 显示结果 dev_display (SelectedContours) 

3. area_center_xld (XLD, Area, Row, Column, PointOrder)

作用:计算每个输入轮廓的区域面积以及质心的位置。PointOrder 参数用于指定计算质心时轮廓点的顺序,这对于正确计算质心位置非常重要。

算子参数:
XLD:要提取的XLD轮廓
Area:轮廓的面积
Row:轮廓的质心行坐标
Column:轮廓的质心列坐标
PointOrder:用于计算质心时的轮廓点顺序,'positive'(正向顺序,通常顺时针),'negative'(负向顺序,通常逆时针)

3.3 XLD的合并操作

合并是指XLD的元组中,将相邻部分合并成一个,算子如下:

union_collinear_contours_xld:合并在同一直线的XLD

union_cocircular_contours_xld:合并在同圆的XLD

union_adjacent_contours_xld:合并邻近的XLD

XLD的转换操作

shape_trans_xld (XLD, XLDTrans, Type)

作用:转换XLD的形状,其中Type为转换的类型如上面的四种类型

  • XLD: 输入的 XLD 轮廓

  • XLDTrans: 输出的 XLD 轮廓

  • Type: 转换类型。指定要进行的转换类型。常用的转换类型有:convex(凸包)、outer_circle (外接圆)、rectangle1 (最小外接矩形)、rectangle2 (最小外接斜矩形)。

XLD的分割操作
算子:

  • segment_contours_xld(Contours:ContoursSplit:Mode,SmoothCont,Max,LineDist1,MaxLineDist2:)

广告一刻

为您即时展示最新活动产品广告消息,让您随时掌握产品活动新动态!