我的立体声校准正确吗?为什么我的三角剖分法不起作用?

时间:2018-09-20 13:12:01

标签: python opencv camera-calibration

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

内在校准是完美的:

stereo images after intrinsic calibration and undistortion

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

stereo images after extrinsic calibration

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

matched pixels

然后我将那些匹配的像素移交给cv.triangulatePoints(projMatr1,projMatr2,projPoints1,projPoints2),这应该给我这些点的3D坐标。我用plotly绘制了它们,但是结果无法识别,而且在所示杯子的边缘附近也没有。

3D plot

有人有想法吗,可能是什么,或者我做错了什么? 如果需要,我可以在此处发布我的代码。

1 个答案:

答案 0 :(得分:1)

好吧,我尝试交换匹配点的行和列元素 [row,col] => [col,row],现在三角剖分正在起作用:

result after changing row and column

仍然存在错误的匹配项,但是那没关系,我希望这些匹配项。 但是更改行和列不适用于图像:

matches after changing row and column

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