halcon 和PCL 中平面矫正算法原理

一、什么叫"平面矫正"?

HALCON / PCL / 工业视觉 / 点云 里,所谓 平面矫正,本质只有一件事:

通过估计一个参考平面,把点云或图像坐标系旋转 / 平移,使该平面满足某个规范姿态

常见目标形式:

HALCON / PCL 做的不是"神秘算法",而是:RANSAC 平面 + 坐标变换

目标 数学表达
平面变成 XY 平面 z=0
平面法向对齐 Z 轴 n=(0,0,1)
平面"摆正" 去除倾斜
标定基准 统一世界坐标

二、统一数学模型(核心骨架)

1️⃣ 平面模型

无论 HALCON / PCL:

2️⃣ 平面矫正的数学目标

三、HALCON 中平面矫正算法原理

1️⃣ HALCON 的"官方思路"

HALCON 并不直接叫"平面矫正",而是拆成三步:

cpp 复制代码
① 平面提取(RANSAC / MSAC)
② 平面参数 → 坐标变换
③ 点云 / 图像变换

2️⃣ 平面提取(第一性原理)

核心算子

segment_planes_object_model_3d

内部算法

  • MSAC(RANSAC 的改进)

  • 目标函数:

3️⃣ 从平面到"矫正"的数学过程(关键)

(1) 得到平面法向

cpp 复制代码
PlaneInfo = [nx, ny, nz, d]

(2) 构造旋转矩阵(核心思想)

(3) 平移(让平面落在 z=0)

4️⃣ HALCON 中的实现哲学

HALCON 帮你做了第 ① 步

第 ②③ 步通常由:

  • rigid_trans_object_model_3d

  • pose_to_hom_mat3d

完成。

📌 HALCON = 高度封装的"RANSAC + 刚体变换"

四、PCL 中平面矫正算法原理(更透明)

1️⃣ 平面分割(RANSAC)

复制代码
pcl::SACSegmentation 

数学模型:

PCL 的典型思路:

(1) 得到法向量

cpp 复制代码
Eigen::Vector3f n(a,b,c);

(2) 目标法向

cpp 复制代码
Eigen::Vector3f z(0,0,1);

(3) 构造旋转矩阵

cpp 复制代码
Eigen::Quaternionf q; 
q.setFromTwoVectors(n, z);
 Eigen::Matrix3f R = q.toRotationMatrix();

📌 这一步 = Rodrigues 的数值稳定实现

3️⃣ 平移补偿

找任一平面点 ppp,变换后应满足:

z=0

平移:t = -R * p;


4️⃣ 应用刚体变换

复制代码
pcl::transformPointCloud(cloud, cloud_out, T);

五、HALCON vs PCL 的本质区别(重点)

https://blog.csdn.net/weixin_39354845/article/details/134760348

相关推荐
程途拾光1585 天前
一键生成幼儿园安全疏散平面图设计美观合规又省心
论文阅读·安全·平面·毕业设计·流程图·课程设计·论文笔记
刘叨叨趣味运维7 天前
解剖K8s控制平面(上):API Server与etcd如何成为集群的“大脑“与“记忆“?
平面·kubernetes·etcd
Ulyanov9 天前
超越平面:用impress.js打造智能多面棱柱演示器
开发语言·前端·javascript·平面
求真求知的糖葫芦10 天前
微波工程4.3节散射矩阵(S参数矩阵)参考平面移动与广义散射参数学习笔记(下)(自用)
学习·平面·矩阵·射频工程
yongui4783412 天前
实现线结构光技术的摄像机标定、光平面标定与三维重建
数码相机·平面
咯哦哦哦哦15 天前
pick_and_place_with_2d_matching_moving_cam.hdev *眼在手上 2D匹配,3D抓取【案例解析】
计算机视觉·平面·3d
Matlab光学24 天前
MATLAB仿真:从平面到立体! 3D 曲线光束塑形技术,微观操控再升级
平面·3d
杀生丸学AI1 个月前
【平面重建】3D高斯平面:混合2D/3D光场重建(NeurIPS2025)
人工智能·平面·3d·大模型·aigc·高斯泼溅·空间智能
fengfuyao9851 个月前
基于MATLAB实现任意平面太阳辐射量计算
算法·matlab·平面