Halcon 3D基础知识及常用函数

一、基本概念

1、点云(Point Cloud)

点云是一组3D数据点,每个点由笛卡尔坐标系或其他坐标系中的一个三维坐标表示,它被认为是一组非结构化的三维点,象征着三维物体的几何形状。点云是一种简单、完整的数据结构,消除了网格数据的复杂性。

2、位姿(Pose)

Halcon中的Pose是一个7参数元组,表示3D平移和旋转的组合。它可以描述一个坐标系相对于另一个坐标系的位置和方向,或者用于在不同坐标系间转换点坐标。Pose通过齐次变换矩阵实现刚性变换。一个pose是具有7个参数的元组:3个参数描述平移(TransX、TransY、TransZ),3个参数描述旋转(RotX、RotY、RotZ)。最后一个参数确定了平移和旋转的顺序(以及旋转的方向)。

3、深度图(Depth Map)

深度图就是从图像采集器到场景中各点的距离(深度)作为像素值的图像。像素值表示深度: 深度图的每个像素值代表场景中该点到摄像头或传感器的距离,通常用灰度值来表示。较亮的像素表示较近的物体,而较暗的像素则表示较远的物体。深度值可以是以毫米、米等单位测量的实际距离,或是相机坐标系中的相对距离。

  • 相对深度:在某些情况下,深度图并不提供场景中物体的实际物理距离,而是提供一种相对深度信息,即物体间的相对远近。
  • 绝对深度:这种深度图包含物体到传感器的真实物理距离,这对机器人导航、3D建模等精确应用至关重要。

深度图通常是单通道图像,不包含颜色信息。每个像素的值是一个浮点数或整数,代表场景中的深度。与RGB图像相比,深度图通常更强调几何信息,而非视觉纹理。

视角和投影: 深度图反映的是从摄像机或传感器视角下的距离,因此它通常依赖于特定的相机模型。不同视角或摄像机位置会产生不同的深度图。相机内参(如焦距、光心位置)和外参(相机在空间中的位置和方向)都会影响深度图的生成。

二、Halcon 3D基础函数

1)read_object_model_3d

功能:从文件读取一个3d模型。

参数说明:read_object_model_3d( : : FileName, Scale, GenParamName, GenParamValue : ObjectModel3D, Status)

        FileName:要读取的点云文件名;

        Scale:文件中数据的缩放因子;

        ObjModel3D:输出 3D对象模型句柄;
        Status:输出状态信息;

2)visualize_object_model_3d

功能:用于显示3d模型。该函数功能很多,包括设置位姿,颜色,鼠标翻转、缩放、平移,选择和取消选择目标,降低鼠标灵敏度,切换检查模式等。

参数说明:visualize_object_model_3d( : : WindowHandle, ObjectModel3D, CamParam, PoseIn, GenParamName, GenParamValue, Title, Label, Information : PoseOut)

WindowHandle:窗体句柄。
ObjectModel3D:3d模型。

CamParam:相机参数
PoseIn:初始位姿。
PoseOut:用户调整模型姿态后输出这个3d姿态。

3)surface_normals_object_model_3d

功能:用于计算三维物体模型的三维曲面法线。

参数说明:surface_normals_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : ObjectModel3DNormals)

: : ObjectModel3D:包含3D点数据的3D对象模型句柄。
Method:法线计算方法。默认值:‘mls’。
GenParamName:一般平滑参数的名称。值列表:‘mls_abs_sigma’, ‘mls_force_inwards’, ‘mls_kNN’, ‘mls_order’, ‘mls_relative_sigma’。

GenParamValue :一般平滑参数的值。。
ObjectModel3DNormals:具有计算出的三维法线的三维对象模型的句柄。

4)smooth_object_model_3d

功能:用于平滑3D对象模型的3D点。

参数说明:smooth_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : SmoothObjectModel3D)

: : ObjectModel3D:包含3D点数据的3D对象模型句柄。
Method:法线计算方法。默认值:‘mls’。
GenParamName:一般平滑参数的名称。值列表:“ mls_abs_sigma”,“ mls_force_inwards”,“ mls_kNN”,“ mls_order”,“ mls_relative_sigma”

SmoothObjectModel3D:带有光滑的三维点数据的三维对象模型的句柄。

5)triangulate_object_model_3d

功能:为三维对象模型创建曲面三角剖分。

参数说明:triangulate_object_model_3d( : : ObjectModel3D, Method, GenParamName, GenParamValue : TriangulatedObjectModel3D, Information)

: : ObjectModel3D:包含3D点数据的3D对象模型句柄。
Method:三角化方法。包括:'greedy', 'implicit', 'polygon_triangulation', 'xyz_mapping' GenParamName: 三角化参数名称。                                                                                               GenParamValue:三角化参数值。

TriangulatedObjectModel3D:三角化处理后的3D模型;

Information:三角化过程的其他信息。

6)create_surface_model

功能:用于创建3D对象模型的表面匹配模型。内容涉及模型创建、参数设置、采样距离、边缘支持、基于视图的分数计算以及对噪声数据的处理,强调了法线方向和模型质量对匹配稳定性的影响。

参数说明:create_surface_model( : : ObjectModel3D, RelSamplingDistance, GenParamName, GenParamValue : SurfaceModelID)

: : ObjectModel3D:包含3D点数据的3D对象模型句柄。

RelSamplingDistance:相对于物体直径的采样距离。

GenParamName:通用参数的名称。

GenParamValue:通用参数的值。

SurfaceModelID:表面模型的句柄。

7)create_pose

功能:创建3D位姿;

参数说明:create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)

: : TransX, TransY, TransZ:指定沿x轴,y轴和z轴的平移;

RotX, RotY, RotZ:指定绕x轴,y轴和z轴的旋转;

OrderOfTransform:选择平移方式。

OrderOfRotation:选择旋转方式。

ViewOfTransform:变换的视角。

Pose:三维姿态。输出为一个包含7个元素的 pose,通常表示为 [Tx, Ty, Tz, Rx, Ry, Rz, Order],其中 Tx, Ty, Tz 为平移分量,Rx, Ry, Rz 为旋转分量,Order 为旋转顺序。

8)gen_plane_object_model_3d

功能:创建表示平面的三维对象模型;

参数说明:gen_plane_object_model_3d( : : Pose, XExtent, YExtent : ObjectModel3D)

: : Pose:平面的位姿;输入平面的中心和旋转;元素数量: Pose == 7

XExtent:指定平面范围的x坐标;

YExtent:  指定平面范围y坐标;

ObjectModel3D:3D模型结果;

9)intersect_plane_object_model_3d

功能:将三维对象模型与平面相交。

参数说明:intersect_plane_object_model_3d( : : ObjectModel3D, Plane : ObjectModel3DIntersection)

: : ObjectModel3D:三维对象模型

Plane :带姿态的平面;

ObjectModel3DIntersection:  将交点描述为一组线的三维对象模型的句柄。

上一篇:elasticsearch 数据导出/导入


下一篇:C++学习第五天