我是这个领域的新手,我正试图用2D图像中的3d模拟一个简单的场景,我没有关于相机的任何信息.我知道有3种选择:
我有两个图像,我知道我从XML加载的相机模型(intrisics)loadXMLFromFile()=> stereoRectify()=>reprojectImageTo3D()
我没有它们,但我可以校准我的相机=> stereoCalibrate()=> stereoRectify()=>reprojectImageTo3D()
我无法校准相机(这是我的情况,因为我没有拍摄2张图像的相机,然后我需要在SURF,SIFT两个图像上找到对关键点(我可以使用任何blob)实际上是检测器,然后计算这些关键点的描述符,然后根据它们的描述符匹配图像右侧和图像左侧的关键点,然后从它们中找到基本矩阵.处理更加困难,如下所示:
findFundamentalMat()从这些对中找到基本的mat()=>stereoRectifyUncalibrated() => 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,则输出图像将具有 …