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

相关推荐
PHOSKEY3 天前
光子精密3D工业相机陶瓷基片平面度检测!赋能电子制造质控升级
平面·3d·3d工业相机
csuzhucong6 天前
平面平铺
平面
AI科技星10 天前
时空的几何动力学:基于光速螺旋运动公设的速度上限定理求导与全维度验证
人工智能·线性代数·算法·机器学习·平面
Evand J11 天前
【UWB与IMU紧耦合定位,MATLAB例程】UWB的TOA定位方法,与IMU紧耦合,对目标轨迹定位并输出误差统计。适用于二维平面的高精度定位导航
开发语言·matlab·平面·uwb·组合导航
zVGKKTvT15 天前
嘿,今天来跟大家分享一下我做的 FPGA 以太网多通道实时同步采集系统,这可是个挺实用且有趣的项目呢
平面
求真求知的糖葫芦15 天前
巴伦学习(三.一)一种可以实现阻抗变换的平面Marchand巴伦的公式推导学习笔记(中)(自用)
笔记·学习·平面·射频工程
芯片SIPI设计16 天前
地平面不连续性对100G PAM4以太网信号完整性的影响
数学建模·平面
求真求知的糖葫芦16 天前
巴伦学习(三.一)一种可以实现阻抗变换的平面Marchand巴伦的公式推导学习笔记(下)(自用)
笔记·学习·平面
AI科技星17 天前
从复平面旋转到三维螺旋:欧拉公式在张祥前统一场论中的几何角色与运动合成
线性代数·算法·机器学习·平面·矩阵·概率论
求真求知的糖葫芦18 天前
巴伦学习(三.一)一种可以实现阻抗变换的平面Marchand巴伦的公式推导学习笔记(上)(自用)
笔记·学习·平面·射频工程