我的学期项目是校准具有大基线(~2m)的立体相机。所以我的方法是在没有精确定义的校准模式(如棋盘)的情况下运行,因为它必须很大并且难以处理。
我的问题与此类似:从 2 张图像进行 3d 重建,而没有有关相机的信息
程序到现在:
- 角检测左图
goodFeaturesToTrack
- 精致的角落
cornerSubPix
- 在右图中找到角落位置
calcOpticalFlowPyrLK
- 计算基本矩阵 F
findFundamentalMat
- 计算H1、H2整流单应矩阵
stereoRectifyUncalibrated
- 纠正图像
warpPerspective
- 计算视差图
sgbm
到目前为止效果还不错,但如果我改变角的数量,校正后的图像会在透视图中“跳跃”..
不知道这是否是表格不精确或错误,或者是否由于没有已知的相机参数或没有镜头失真补偿而无法计算(但也发生在筑波照片上..)欢迎提出建议:)
但不是我的主要问题,现在我想重建 3D 点。
但reprojectImageTo3D
需要我目前还没有的 Q 矩阵。所以我的问题是如何计算它?我有基线,两台摄像机之间的距离。我的感觉是,如果我将视差图转换为 3d 点云,我唯一缺少的是比例尺吗?所以如果我在基线中设置,我得到了 3d 重建对吗?那怎么办?我还计划用棋盘分别补偿每个相机的镜头失真作为第一步(小而一次靠近一个相机,所以我不必在 10-15 米之外,在两者的重叠区域有一个大图案。 .) 所以如果这有帮助我也可以使用相机参数..
除了http://docs.opencv.org之外还有文档吗?我可以看到并理解 Q 矩阵的计算内容和方式,或者如果我在 Qt 中按 F2,我可以打开源代码(对我来说可能很难理解 ^^),我只能看到带有传输参数类型的函数..(对不起,我对这一切都很陌生)
- 左:找到角的输入
- 顶部 h1,h2:纠正图像(这个角数看起来不错^^)
- SGBM:视差图