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: 将交点描述为一组线的三维对象模型的句柄。