opencv - cvReprojectImageTo3D - 从 2d 图像问题进行 3d 建模-

标签 opencv 3d stereo-3d disparity-mapping

我非常需要你的帮助来解决这个问题。我正在尝试从 2d 图像中模拟 3d 中的简单场景。我正在使用 2 张图片(左图和右图——著名的筑波场景) http://www.cc.gatech.edu/classes/AY2003/cs7495_fall/ProblemSets/Data/tsukuba-right.bmp 我得到了视差图。像这个。 http://www.robots.ox.ac.uk/~ojw/2op/tsukuba_score.png

在这里我有一些问题。我认为步骤应该是:

cvStereoRectify(得到Q) cvReprojectImageTo3D(视差图,3dimage,Q)

但我不知道在 stereoRectify 中传递什么作为输入,我只有 2 张图像,我没有任何关于相机的信息。 (也许我可以改用 stereoRectifyUncalibrated,如果可以,我该怎么做?)

请帮忙 谢谢

最佳答案

从 opencv 文档中提取:

"stereoRectify 函数计算每个相机的旋转矩阵,这(实际上)使两个相机图像平面成为同一平面。因此,这使得所有对极线平行,从而简化了密集立体对应问题。在输入时,该函数采用由 stereoCalibrate() 计算的矩阵在输出时给出了 2 个旋转矩阵和 2 个新坐标中的投影矩阵。”

回答:

这意味着 3 个选项:

  • 或者您有两张图片,并且您知道从 XML 加载的相机模型(内部结构),例如 loadXMLFromFile() => stereoRectify() => reprojectImageTo3D()

  • 或者您没有它们,但您可以校准您的相机 => stereoCalibrate() => stereoRectify() => reprojectImageTo3D()

  • 或者您无法校准相机(这是您的情况,因为您没有 Tsukuba 爵士的相机,然后:您需要使用 SURF、SIFT 在两个图像上找到成对的关键点(例如实际上可以使用任何 Blob 检测器),然后计算这些关键点的描述符,然后根据描述符匹配图像右侧和图像左侧的关键点,然后从中找到基本垫。处理要困难得多,就像这样:< strong>检测关键点(SURF、SIFT)=> 提取描述符(SURF、SIFT)=> 比较和匹配描述符(BruteForce、基于 Flann 的方法)=> 从这些对中找到基本垫(findFundamentalMat())=> stereoRectifyUncalibrated () => reprojectImageTo3D()

希望对你有帮助,如果没有,请告诉我

朱利安

关于opencv - cvReprojectImageTo3D - 从 2d 图像问题进行 3d 建模-,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6744094/

相关文章:

python - OpenCV-Python导入错误: DLL load failed: The specified module could not be found

objective-c - objective-c 方法中的IplImage *

C# WPF HELIX 3D 如何获取模型的 Material 并使其成为可用 Material

c++ - 对数深度缓冲区 OpenGL

c++ - opencv 的 reprojectImageTo3D() 中的深度图值

python - OpenCV 错误 : Unsupported format or combination of formats (Unsupported combination of input and output formats) in getRectSubPix

python - 如何让 grabCut 与 GC_INIT_WITH_MASK 一起工作 opencv python

matlab - 删除切片中的小值

opencv - 从视差图中获取真实深度

matlab - 估计Matlab或openCV中棋盘格点的转换