1

我的学期项目是校准具有大基线(~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,我可以打开源代码(对我来说可能很难理解 ^^),我只能看到带有传输参数类型的函数..(对不起,我对这一切都很陌生)

http://i.stack.imgur.com/A1Wjc.jpg

  • 左:找到角的输入
  • 顶部 h1,h2:纠正图像(这个角数看起来不错^^)
  • SGBM:视差图
4

1 回答 1

0

所以我在这里发现了 Q 矩阵的约束: 使用 OpenCV 生成 3d 点(假设正面平行配置)

所有这些参数都由单相机校准给出: c_x , c_y , f

基线是我测量的:T_x

所以这暂时有效,只有单位对我来说不是那么清楚,我已经使用它们形成以 px 为单位的单个相机校准,并以米为单位设置基线,将视差图除以 16,但它接缝的比例不正确。 .

顺便说一句,上面的视差图是错误的^^,现在看起来更好了。您必须进行反剪切变换,因为 stereoRectifyUncalibrated 正在剪切您的图像(未记录?)。Charles Loop Zhang Zhengyou Zhang 在“7 Shearing Transform”的论文中描述: http ://research.microsoft.com/en-us/um/people/Zhang/Papers/TR99-21.pdf

结果:http: //i.stack.imgur.com/UkuJi.jpg

于 2014-08-15T14:37:43.697 回答