有许多关于从已知内部校准的立体视图进行3D重建的帖子,其中一些是非常好的.我已经阅读了很多这些内容,根据我所阅读的内容,我正在尝试使用下面的管道/算法来计算我自己的3D场景重建.我将列出方法,然后在底部询问具体问题.
0.校准你的相机:
CalibrateCamera()和棋盘程序,但是这个功能也包括在Matlab的摄像机标定工具箱.OpenCV例程似乎运行良好.1.基本矩阵F:
findFundamentalMat()来获得F,它提供了许多选项方法(8点算法,RANSAC,LMEDS).x'Fx = 0其中x'和x是(x, y)齐次坐标中的原始图像点对应关系,(x, y, 1)并且三个向量中的一个被转置,以便乘法有意义.每个对应关系越接近于零,越好的F就越服从它的关系.这相当于检查派生的F实际从一个图像平面映射到另一个图像平面的程度.我使用8点算法获得~2px的平均偏差.2.基本矩阵E:
3.对E的内部约束:
USV.t那么它的奇异值应该是= a, a, 0.S的前两个对角元素应该相等,第三个零.E_new = U * diag(1,1,0) * V.t当然可以保证服从约束.你基本上人为地设置了S =(100,010,000).4.全相机投影矩阵:
x = PX关系.此外,P = …Java的ParseInt方法将很乐意解析前导零提供的十进制值,而不会抛出异常,剥离零:
int value = Integer.parseInt("050", 10);
Run Code Online (Sandbox Code Playgroud)
将导致整数值50.
但是,我有一个应用程序需要这样的字符串作为无效输入被拒绝.到目前为止,我对该问题的解决方案是将解析后的整数转换回字符串,并比较原始/解析字符串的长度,以查看是否已剥离任何字符,例如:
String original = "050";
value = Integer.parseInt( "050", 10);
String parsed = Integer.toString(value);
if (original.length() != parsed.length()) {
System.exit(1);
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,但感觉有点hacky.是否有更好的方法来检测和处理前导零?