流程图
实现逻辑
初始化环境
** 构建虚拟机相机
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;
lut | disp_background | point_size | color_attrib |
使用的 Look-Up Table 名称(即配色方案) | 是否显示背景色 | 点云或模型的点的显示大小(float 类型) | 用于决定显示颜色的属性名(例如 coord_z 代表按 Z 坐标值着色) |
color1 | true | 1.0 | coord_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)