cvReprojectImageTo3D - 从二维图像中进行三维建模的问题

5
我非常需要您关于这个问题的帮助。我正在尝试从2D图像中建模一个简单的3D场景。我使用了两张图像(左右两张-著名的筑波场景)。 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(视差图,3D图像,Q)
但是我不知道在stereoRectify中传递什么输入,我只有两张图像,没有任何关于相机的信息。(也许我可以使用stereoRectifyUncalibrated,如果可以的话,我该如何操作?)
请帮帮我 谢谢

答案可以吗,还需要更多信息吗? - jmartel
1个回答

13

来自OpenCV文档的摘录:

"函数stereoRectify为每个相机计算旋转矩阵(虚拟地)使两个相机图像平面成为同一平面。因此,这使所有极线都是平行的,从而简化了密集立体匹配问题。该函数输入由stereoCalibrate()计算的矩阵,并在输出中提供2个旋转矩阵以及新坐标下的2个投影矩阵。"

答案:

它意味着有三种选择:

  • 或者您有两个图像并且您知道相机的模型(内部参数),例如您从XML文件中加载的相机模型:loadXMLFromFile()= > stereoRectify()= > reprojectImageTo3D()

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

  • 或者您无法校准相机(这是您的情况,因为您没有Sir Tsukuba的相机),然后:您需要在两个图像上找到配对关键点,例如SURF,SIFT等(实际上您可以使用任何斑点检测器),然后计算这些关键点的描述符,根据它们的描述符从图像右侧和图像左侧匹配关键点,然后找到从它们中得到的基本矩阵。处理要更加困难,就像下面这样: detect keypoints(SURF,SIFT)= > extract descriptors(SURF,SIFT)= > compare and match descriptors(BruteForce,Flann based approaches)= > find fundamental mat(findFundamentalMat()) from these pairs = > stereoRectifyUncalibrated()= > reprojectImageTo3D()

我希望以上回答对您有所帮助,如果没有,请告诉我。

朱利安


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接