python - 我的立体声校准正确吗?为什么我的三角测量不起作用呢?
问题描述
我正在尝试从立体相机的图像中获取 3D 点云。我在 Python 中使用 OpenCV 校准了我的立体相机(每个 240x320),得到了 0.25 的重投影误差。我使用了一个 9x10 行和列的棋盘图案,并在不同的光照条件下以不同的角度拍摄了 10 张图像,并在拍摄的同时移动了相机。(我不确定,也许这就是问题所在)然后我将它们导入matlab,matlab给了我棋盘角。(我选择 matlab 是因为它比 opencv 精确得多)然后我将角点加载到我的 python 校准脚本中。
内在校准完美无瑕:
但是我不确定是否可以使用外部校准的结果,因为图像仍然是圆形并且有那些黑色空间;图像的矩形中心很好:
参数和矩阵被保存并加载到另一个脚本中。该脚本通过左右图像运行 sobel 算子,并在两个图像中找到匹配的边缘像素:
然后我将这些匹配的像素交给 cv.triangulatePoints(projMatr1, projMatr2, projPoints1, projPoints2) 这应该给我点的 3D 坐标。我用 plotly 绘制它们,但结果无法识别,并且远离所示杯子的边缘:
有谁知道,它可能是什么或我做错了什么?如果需要,我可以在这里发布我的代码。
解决方案
好的,我尝试从 [row, col] => [col, row] 交换匹配点的行和列元素,现在三角测量正在工作:
仍然存在错误匹配,但没关系,我期待它们。但是更改行和列不适用于图像:
但那是一个不同的故事,我对目前的结果感到满意。
推荐阅读
- r - 自相关函数 $r_k$ 在滞后 $k$ 处的线图
- elasticsearch - 如何搜索弹性搜索并按值计算行/结果
- scala - Py4JJavaError:调用 o10695.write 时出错。: java.lang.StackOverflowError
- python - 用于视频处理的 Argparse 语法
- amazon-web-services - 防止用户自行使用联合身份提供商 (FIP) 注册,但如果管理员添加,则允许使用 FIP 登录
- oracle19c - oracle.jdbc.OracleDatabaseException: ORA-01722: 无效号码
- python - Pycharm在放入并从队列中获取后丢失对象指示符
- jquery - Flexslider - 在最后一张幻灯片上禁用滚动
- reactjs - 2个问题,我似乎无法摆脱每个孩子应该有一个id错误
- abap - CL_GUI_ALV_GRID 可编辑字段不刷新