首页 > 解决方案 > 如何在基于激光的立体相机中匹配激光点?

问题描述

我正在尝试用激光扫描物体以提取 3D 点云。我的设置中有 2 个摄像头和 1 个激光。我所做的是将掩码中的非零点作为 projPoints arg 提供给 OpenCV 的 triangulatePoints 函数。由于 triangulatePoints 函数的两个点数必须相同并且有 2 个掩码,如果一个掩码的非零点比另一个多,我基本上通过这样做将其缩小到其他的大小:

l1 = len(pts1)
l2 = len(pts2)
newPts1 = pts1[0:l2]

有没有匹配左右帧非零点的好方法?

立体疼痛

标签: pythonopencvcomputer-visionstereo-3d

解决方案


首先,如果您的图像通常看起来像这样,那么您的传感器已经深度饱和,因此您的 3D 范围要么一文不值,要么远不如它们可能的准确度。

其次,您的目标应该是在该对的每个图像上的每个校正扫描线上匹配一个点,而不是一组点。使用激光条纹的整个想法是在尽可能小的点或带上获得聚焦良好的光束,这样您就可以详细探测表面。

为获得最佳精度,应在原始(失真和未校正)图像的每条扫描线上独立完成寻峰,因此它不受未失真和立体校正程序使用的插值的影响。相反,您将使用几何不失真和立体校正变换将原始图像中检测到的峰值映射到校正的峰值。

有几种经典的基于激光条纹的三角测量方法的寻峰算法,您可能会发现我的这个其他答案很有用。

最后,如果您的设置预期如图所示,除了感兴趣的对象外,激光条纹还照亮两个正交平面,那么您根本不需要使用立体:您可以求解跨越的 3D 平面激光条纹投影仪并通过与该平面相交进行三角测量,每条光线将激光条纹图像的峰值反向投影到物体上。这类似于 JY Bouguet 在他的旧博士学位中使用的一种方法。关于桌面摄影的论文(这里是S. Seitz的总结)。该专利详细介绍了使用激光剥离器的一种实施方式。这个方法出人意料准确:我们在 1999 年使用极小的 640x480 CCD 摄像机,在一立方英尺的体积中实现了大约 0.2 毫米的精度。专利已过期,因此您可以免费享受它。


推荐阅读