繁体   English   中英

通过基线和单相机校准从2张图像进行3D重建

[英]3D reconstruction from 2 images with baseline and single camera calibration

我的学期项目是校准基线较大(〜2m)的立体声相机。 因此,我的方法是在没有精确定义的校准模式(如棋盘)的情况下运行,因为校准模式必须很大并且很难处理。

我的问题类似于: 从2张图像进行3D重建,而没有有关相机的信息

到现在为止的程序:

  • 角落检测左图像goodFeaturesToTrack
  • 精致的角落cornerSubPix
  • 在右图calcOpticalFlowPyrLK找到角位置
  • 计算基本矩阵F findFundamentalMat
  • 计算H1,H2整流单应矩阵stereoRectifyUncalibrated
  • warpPerspective图像warpPerspective
  • 计算sgbmsgbm

到目前为止,它的效果还算不错,但是如果我改变转角的数量,矫正后的图像在视角上就会“跳跃”。

不知道这是否是形式不精确或我发狂,还是由于没有已知的相机参数或没有镜头畸变补偿而无法计算(也可能在筑波的照片上发生)。欢迎提出建议:)

但不是我的主要问题,现在我想重建3D点。

但是reprojectImageTo3D需要我到目前为止还没有的Q矩阵。 所以我的问题是如何计算呢? 我有基线,两个摄像机之间的距离。 我的感觉是,如果我将视差图转换为3d点云,唯一缺少的就是比例尺了吗? 因此,如果我将基线设置为3D,那么对吗? 那怎么办? 我还计划用棋盘分别补偿每个摄像机的镜头畸变(每次较小且一次接近一个摄像机,因此我不必在两者的重叠区域中相距10-15m处有大图案的情况)。 。)所以如果这有帮助,我也可以使用相机参数..

除了http://docs.opencv.org之外,还有其他文档吗? 如果我在Qt中按F2键,就可以看到并了解Q矩阵的计算方式以及如何计算Q矩阵,或者我可以打开源代码(对我来说可能很难理解^^),我只能看到具有传递参数类型的函数。对不起,我对这一切真的很陌生)

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

  • 左:输入有找到的角
  • 顶部h1,h2:校正图像(此角点数^^看起来不错)
  • SGBM:视差图

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

所有这些参数均由单个摄像机校准给出:c_x,c_y,f

基线是我测量的:T_x

所以现在这行得通,只有我不太清楚这些单位,我已经使用它们形成了以px为单位的单摄像机校准,并以米为单位设置了基线,将视差图除以16,但是它接缝的比例不正确。 。

顺便说一下,上面的差异图是错误的^^,现在看起来更好了。 您必须执行反剪切转换,导致stereoRectifyUncalibrated剪切图像(未记录?)。 本文在Charles Loop Zhengyouyou Zhang的“ 7 Shearing Transform”上进行了描述: http//research.microsoft.com/en-us/um/people/Zhang/Papers/TR99-21.pdf

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM