首页 > 解决方案 > 我的立体声校准正确吗?为什么我的三角测量不起作用呢?

问题描述

我正在尝试从立体相机的图像中获取 3D 点云。我在 Python 中使用 OpenCV 校准了我的立体相机(每个 240x320),得到了 0.25 的重投影误差。我使用了一个 9x10 行和列的棋盘图案,并在不同的光照条件下以不同的角度拍摄了 10 张图像,并在拍摄的同时移动了相机。(我不确定,也许这就是问题所在)然后我将它们导入matlab,matlab给了我棋盘角。(我选择 matlab 是因为它比 opencv 精确得多)然后我将角点加载到我的 python 校准脚本中。

内在校准完美无瑕:

内在校准和不失真后的立体图像

但是我不确定是否可以使用外部校准的结果,因为图像仍然是圆形并且有那些黑色空间;图像的矩形中心很好:

外部校准后的立体图像

参数和矩阵被保存并加载到另一个脚本中。该脚本通过左右图像运行 sobel 算子,并在两个图像中找到匹配的边缘像素:

匹配像素

然后我将这些匹配的像素交给 cv.triangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2) 这应该给我点的 3D 坐标。我用 plotly 绘制它们,但结果无法识别,并且远离所示杯子的边缘:

3D 绘图

有谁知道,它可能是什么或我做错了什么?如果需要,我可以在这里发布我的代码。

标签: pythonopencvcamera-calibration

解决方案


好的,我尝试从 [row, col] => [col, row] 交换匹配点的行和列元素,现在三角测量正在工作:

改变行列后的结果

仍然存在错误匹配,但没关系,我期待它们。但是更改行和列不适用于图像:

更改行和列后匹配

但那是一个不同的故事,我对目前的结果感到满意。


推荐阅读