【问题标题】:How to match laser points in laser based stereo camera?如何在基于激光的立体相机中匹配激光点?
【发布时间】:2026-01-08 10:30:01
【问题描述】:

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

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

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

【问题讨论】:

  • 我认为这个假设是错误的,两个图像中必须有相同数量的点(每行?)。如果我理解正确,您可能只需要/需要每条像素线一个激光点。您可以使用均值/中值位置,也可以近似多项式或样条?
  • 单独共享帧而不是合并可能会更好

标签: python opencv computer-vision stereo-3d


【解决方案1】:

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

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

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

有几种经典的基于激光条纹三角测量方法的寻峰算法,您可能会发现this other answer of mine 很有用。

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

【讨论】:

  • 感谢您的详细解答。我会稀释我的激光,更换我的相机,并分享结果。您能否分享更多关于立体+激光设置的资源以供进一步阅读?