我在 OpenCV 3.0 下使用 stereoRectifyUncalibrated()
方法研究立体视觉。
我按照以下步骤校准我的系统:
- 检测并匹配来自 2 个摄像头的图像之间的 SURF 特征点
- 应用
findFundamentalMat()
与匹配的对 - 使用
stereoRectifyUncalibrated()
获得校正单应性。
对于每个相机,我计算一个旋转矩阵如下:
R1 = cameraMatrix[0].inv()*H1*cameraMatrix[0];
要计算 3D 点,我需要获得投影矩阵,但我不知道如何估计平移 vector 。
我尝试了 decomposeHomographyMat()
和这个解决方案 https://stackoverflow.com/a/10781165/3653104但是旋转矩阵与我用 R1 得到的不一样。
当我用 R1/R2 检查校正后的图像时(使用 initUndistortRectifyMap()
然后是 remap()
),结果似乎是正确的(我用极线检查) .
我对视觉知识的薄弱有点迷茫。因此,如果有人可以向我解释。谢谢:)
最佳答案
您提供的链接中的代码 (https://stackoverflow.com/a/10781165/3653104) 计算的不是旋转而是相机的 3x4 位姿。
姿势的最后一列是你的平移 vector
关于c++ - 单应性投影矩阵,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28234532/