halcon中XLD

一、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:)
Halcon获取xld是通过读取dxf文件并进行一系列操作来实现的。首先需要使用read_contour_xld_dxf函数读取dxf文件的机械坐标数值,并存储在DxfContours。然后使用union_adjacent_contours_xld函数来合并邻近的XLD,使得细小线段拼接起来,结果存储在UnionContours。接下来可以使用count_obj函数获取UnionContours的轮廓数量,并使用select_obj函数选择其一个轮廓。然后可以使用get_contour_xld函数获取该轮廓的坐标值。另外,还可以使用length_xld函数获取轮廓的长度。最后,可以使用create_local_deformable_model_xld函数创建可变形模型,并使用get_deformable_model_contours函数获取模型的轮廓。如果需要进行镜像操作,可以使用hom_mat2d_reflect函数进行上下翻转,并使用affine_trans_contour_xld函数对UnionContours进行仿射变换。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [Halcon读取dxf文件生成xld,然后实现点坐标遍历/缩放/镜像/求最大面积等操作(★firecat推荐★)](https://blog.csdn.net/libaineu2004/article/details/102821750)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT3_1"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值