基于Halcon的3D点云匹配(一)

流程图

 实现逻辑

初始化环境
** 构建虚拟机相机
gen_cam_par_area_scan_division (0.06, 0, 8.5e-6, 8.5e-6, 380.0, 150.0, 760, 300, CamParam1)
** 创建3D数据显示的位姿
create_pose (70, -20, 1800, 128, 345, 185, 'Rp+T', 'gba', 'point', InitPose)

注释:

一般调整位置主要通过gen_cam_par_area_scan_division 和create_pose 算子

create_pose:create_pose 创建 3D 姿势 Pose。姿势描述刚性 3D 变换,即由任意平移和旋转组成的变换,具有 6 个参数:TransX、TransY 和 TransZ 分别指定沿 x、y 和 z 轴的平移,而 RotX、RotY 和 RotZ 描述旋转。

create_pose( : : TransX, TransY, TransZ, RotX, RotY, RotZ, OrderOfTransform, OrderOfRotation, ViewOfTransform : Pose)

TransX (输入控制):沿 x 轴的平移(单位为米)。默认值为 0.1。建议的值包括一系列负值和正值,如 -1.0, -0.75, -0.5, -0.25, -0.2, -0.1, 0.0, 0.01, 0.125, 0.25, 0.5, 0.75, 1.0。

TransY (输入控制):沿 y 轴的平移(单位为米)。默认值为 0.1。建议的值与 TransX 相同。

TransZ (输入控制):沿 z 轴的平移(单位为米)。默认值为 0.1。建议的值与 TransX 相同。

RotX (输入控制):绕 x 轴的旋转或 Rodriguez 向量的 x 分量(单位为度或无单位)。默认值为 90.0。建议的值包括 0.0, 90.0, 180.0, 270.0。典型的取值范围为 0 ≤ RotX ≤ 360。

RotY (输入控制):绕 y 轴的旋转或 Rodriguez 向量的 y 分量(单位为度或无单位)。默认值为 90.0。建议的值与 RotX 相同。典型的取值范围为 0 ≤ RotY ≤ 360。

RotZ (输入控制):绕 z 轴的旋转或 Rodriguez 向量的 z 分量(单位为度或无单位)。默认值为 90.0。建议的值与 RotX 相同。典型的取值范围为 0 ≤ RotZ ≤ 360。

OrderOfTransform (输入控制):旋转和平移的顺序。默认值为 'Rp+T'。建议的值包括 'Rp+T'(先旋转后平移)和 'R(p-T)'(先平移后旋转)。

OrderOfRotation (输入控制):旋转值的意义。默认值为 'gba'。建议的值包括 'gba'(绕 z 轴旋转后绕 y 轴旋转再绕 x 轴旋转),'abg'(绕 x 轴旋转后绕 y 轴旋转再绕 z 轴旋转),以及 'rodriguez'(Rodriguez 向量表示法)。

ViewOfTransform (输入控制):变换的视角。默认值为 'point'。建议的值包括 'point'(从点的角度看变换)和 'coordinate_system'(从坐标系的角度看变换)。

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

Halcon的3D位姿通过平移+ZYX欧拉角定义,需注意旋转顺序、右手法则及坐标系方向。 

点云数据的局部配准实实现
 **筛选图像,点数少,忽略
 get_object_model_3d_params (ObjectModel3D, 'num_points', GenParamValue)
 ......
 **使用让当前点云数据模型和前一个模型进行配准
 register_object_model_3d_pair (ObjectModel3D, ObjectModel3D, 'matching', 'default_parameters', 'accurate', Pose, Score)

 显示结果:

全局点云配准 
**全局配准
register_object_model_3d_global (RegistryModel3Ds, Offsets, 'previous', [], 'max_num_iterations', 1, HomMats3DOut, Scores)
**使用全局矩阵统一变换所有点云
affine_trans_object_model_3d (RegistryModel3Ds, HomMats3DOut, GloballyRegistryModel3Ds)

在C#中

var VisualName = new HTuple("lut", "disp_background", "point_size", "color_attrib");
var VisualValue = new HTuple("color1", "true", 1.0, "coord_z");
show3D.ExitLoop = true;
lutdisp_backgroundpoint_sizecolor_attrib
使用的 Look-Up Table 名称(即配色方案)是否显示背景色点云或模型的点的显示大小(float 类型)用于决定显示颜色的属性名(例如 coord_z 代表按 Z 坐标值着色)
color1true1.0coord_z
代表用 Halcon 内置的配色表color1表示显示背景点的显示大小是 1.0用对象的 Z 坐标值来决定每个点的颜色

 

 点云合并成一个统一模型
**点云合并成一个统一模型
union_object_model_3d (GloballyRegistryModel3Ds, 'points_surface', UnionObjectModel3D)

**显示最终重建好的完整3D管道点云
visualize_object_model_3d (WindowHandle3D, UnionObjectModel3D, CamParam1, InitPose, ['color','disp_background','point_size'], ['gray','true',1] , [], [], [], PoseOut)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值