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

相关推荐
Matlab光学8 天前
MATLAB仿真:从平面到立体! 3D 曲线光束塑形技术,微观操控再升级
平面·3d
杀生丸学AI12 天前
【平面重建】3D高斯平面:混合2D/3D光场重建(NeurIPS2025)
人工智能·平面·3d·大模型·aigc·高斯泼溅·空间智能
fengfuyao98514 天前
基于MATLAB实现任意平面太阳辐射量计算
算法·matlab·平面
zl_vslam15 天前
SLAM中的非线性优-3D图优化之地平面约束(十四)
算法·计算机视觉·平面·3d
科士威传动25 天前
滚珠导轨平行度与平面度的精准保障方法
人工智能·科技·平面·机器人·自动化·制造
Venus-ww1 个月前
平面三轴机器人的阻尼最小二乘法(DLS)逆运动学求解
平面·机器人·最小二乘法
啊西:1 个月前
SuperMap iClient3D for WebGL平面场景实现绘制任意面进行GPU空间查询
平面·3d·webgl
Ccjf酷儿1 个月前
计算机网络 (郑烇) 5 网络层:控制平面
网络·计算机网络·平面
点云侠1 个月前
基于选权迭代法的空间平面拟合
线性代数·算法·平面