小编Fob*_*obi的帖子

从2个图像的3d重建没有关于相机的信息

我是这个领域的新手,我正试图用2D图像中的3d模拟一个简单的场景,我没有关于相机的任何信息.我知道有3种选择:

  • 我有两个图像,我知道我从XML加载的相机模型(intrisics)loadXMLFromFile()=> stereoRectify()=>reprojectImageTo3D()

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

  • 我无法校准相机(这是我的情况,因为我没有拍摄2张图像的相机,然后我需要在SURF,SIFT两个图像上找到对关键点(我可以使用任何blob)实际上是检测器,然后计算这些关键点的描述符,然后根据它们的描述符匹配图像右侧和图像左侧的关键点,然后从它们中找到基本矩阵.处理更加困难,如下所示:

    1. 检测关键点(SURF,SIFT)=>
    2. 提取描述符(SURF,SIFT)=>
    3. 比较和匹配描述符(BruteForce,基于Flann的方法)=>
    4. findFundamentalMat()从这些对中找到基本的mat()=>
    5. stereoRectifyUncalibrated() =>
    6. reprojectImageTo3D()

我正在使用最后一种方法,我的问题是:

1)是不是?

2)如果没问题,我对最后一步有疑问stereoRectifyUncalibrated()=> reprojectImageTo3D().reprojectImageTo3D()功能的签名是:

void reprojectImageTo3D(InputArray disparity, OutputArray _3dImage, InputArray Q, bool handleMissingValues=false, int depth=-1 )

cv::reprojectImageTo3D(imgDisparity8U, xyz, Q, true) (in my code)
Run Code Online (Sandbox Code Playgroud)

参数:

  • disparity - 输入单通道8位无符号,16位带符号,32位带符号或32位浮点差异图像.
  • _3dImage- 输出与3相同大小的3通道浮点图像disparity.每个元素_3dImage(x,y)包含(x,y)从视差图计算的点的3D坐标.
  • Q- 可以获得的4x4透视变换矩阵stereoRectify().
  • handleMissingValues - 指示函数是否应处理缺失值(即未计算差异的点).如果handleMissingValues=true,那么具有与异常值相对应的最小视差的像素(参见StereoBM::operator())被转换为具有非常大的Z值(当前设置为10000)的3D点.
  • ddepth - 可选的输出数组深度.如果为-1,则输出图像将具有 …

c++ opencv stereoscopy 3d-modelling 3d-reconstruction

33
推荐指数
1
解决办法
2万
查看次数