在MATLAB中,我使用标准化Fundamental matrix计算了Eight point algorithm(两个图像)。由此我需要triangulate 3D空间中的相应图像点。根据我的理解,要做到这一点,我需要旋转和翻译图像的相机。最简单的方法当然是calibrate the cameras然后拍摄图像,但这对我的应用来说太紧张了,因为它需要这个额外的步骤。
这样我就留下了auto (self) camera calibration。我看到bundle adjustment的提及,但是在An Invitation to 3D Vision中它似乎需要初始平移和旋转,这让我觉得需要校准相机或我的理解不足。
所以我的问题是如何自动提取旋转/平移,以便我可以将图像点重新投影/三角测量到3D空间。任何MATLAB代码或伪代码都会很棒。
答案 0 :(得分:8)
您可以使用基本矩阵恢复相机矩阵并从图像中对3D点进行三角测量。但是,你必须意识到你将获得的重建将是一个投射重建,而不是欧几里德重建。如果你的目标是测量原始场景中的投影不变量,例如交叉比率,线交点等,这很有用,但它不足以测量角度和距离(你必须为此校准相机)。
如果您可以访问Hartley and Zisserman's textbook,则可以查看第9.5.3节,您可以在其中找到从基本矩阵到一对相机矩阵的内容,这些矩阵将允许您计算投影重建(我相信同样的内容出现在“易马”一书的第6.4节中。从source code for the book's algorithms is available online开始,您可能需要检查函数vgg_P_from_F,vgg_X_from_xP_lin和vgg_X_from_xP_nonlin。
答案 1 :(得分:5)
彼得的matlab代码对我很有帮助我认为:
http://www.csse.uwa.edu.au/~pk/research/matlabfns/
彼得发布了许多基本矩阵解决方案。 zisserman书中提到了原始算法此外,当你在场的时候别忘了看基本的矩阵歌曲:
http://danielwedge.com/fmatrix/
我的诚实意见中的一个优秀作品!
答案 2 :(得分:1)
如果可以任意选择3D空间,可以将第一个相机矩阵设置为
P = [I | 0]
没有翻译,没有轮换。那将为您提供从相机1定义的坐标系。那么校准第二台相机应该不会太难。