如何生成点云?

Posted

技术标签:

【中文标题】如何生成点云?【英文标题】:How to generate a point cloud? 【发布时间】:2010-11-09 19:18:35 【问题描述】:

使用上面的设置,我得到了平面两侧激光线的霍夫方程。我什至过滤掉了对象上的像素点。我还从我放在飞机两侧的棋盘格图案中获取了相机的外部参数(所以我知道 R1,T1 和 R2,T2)

现在我想生成对象的点云。我看到我需要将激光平面 (Elaser) 与来自相机的观察光线 (r) 相交以获得单个 3D 点 (p),关于如何执行此操作的任何线索?


更新:

这是我认为我必须做的,如果我错了,有人可以纠正我

STEP1:将所有点从(左平面)坐标系转换到(右平面)坐标系,从R1, T1和R2, T2得到一个R,T

STEP2:左平面2个激光点和右平面1个激光点在同一坐标系下求激光平面方程(在STEP1中转换为)

STEP3: 使用激光平面方程和物体上的二维点找到物体上的 3D 点


更新

这是我目前拥有的 -

【问题讨论】:

天哪,看到这让我笑了。 这些是正确的步骤。为了避免噪声敏感性,我会使用更多点来确定激光平面。那里的错误将对您在第 3 步中的准确性产生巨大影响。 【参考方案1】:

如果我没记错的话(我从未处理过结构光),您需要 i) 恢复相机和激光器之间的对极约束,ii) 从成像的激光条纹中确定每个点的对极线, iii) 将该线与激光坐标中激光条纹的已知位置相交,iv) 通过三角测量恢复 3D 信息。

为了获得最佳效果,您应该将激光条纹定向为垂直于相机和激光之间的平移矢量,因为这样上面 iii) 中的交点条件良好,因此在存在噪声的情况下最可靠地恢复。

【讨论】:

【参考方案2】:

关于 ssegvic 帖子的所有内容都是正确的,但这说起来容易做起来难。与立体相机校准类似,您需要在激光和相机之间进行校准。这实际上是通过对具有相对于参考平面的已知几何形状的对象执行测量,然后求解图像坐标到对象坐标之间的映射来完成的。执行此校准后,您可以使用生成的校准矩阵求解深度。

您可以使用许多可能的校准对象。我使用了一个黑色的平面,上面有垂直于激光平面的细白线。这将为您提供图像中的几个点,您可以使用图像处理来隔离这些点。一旦你通过平移激光相机设备的位置收集了你需要的所有点。然后,您可以在某个方向(朝向相机?)平移,同时跟踪平面深度的变化,因为这些表示您需要从图像坐标映射到的真实世界坐标。您应该根据您的选择以合理的精细增量校准您计划测量的对象的深度或操作范围(避免外推)。

【讨论】:

以上是关于如何生成点云?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 OpenCV 3.0 StereoSGBM 和 PCL 生成一对立体图像的有效点云表示

如何用unity3d把点云生成实际物体

PCL(点云库)中实时 kinect 数据的范围图像生成

常见几何模型点云生成❤️C++实现

彩色点云生成mesh的纹理

VisualSFM+PMVS生成稠密点云