我正在尝试使用来自不同视图的2D图像进行3D模型重建。我正在遵循Matlab的这个示例代码来获得所需的结果: Structure From Motion From Two Views
以下是从相机拍摄的测试图像:
以1cm的平移手动拍摄第1张和第2张图像:
使用第一张和第二张图片的匹配功能叠加:
以2cm的平移手动拍摄第1张和第2张图像:
使用第一张和第二张图片的匹配功能叠加:
这些是我为每种情况得到的平移向量和旋转矩阵:
1cm翻译:
翻译矢量:[0.0245537412606279 -0.855696925927505 -0.516894461905255]
旋转矩阵:
[0.999958322438693 0.00879926762261436 0.00243439415451741;
-0.00887800587357739 0.999365801035702 0.0344844418829408;
-0.00212941243132160 -0.0345046172211024 0.999402269855899]
2cm翻译:
翻译矢量:[-0.215835469166982 -0.228607603749042 -0.949291111175908]
旋转矩阵:
[0.999989695803078 -0.00104036790630347 -0.00441881457943975;
0.00149220346018613 0.994626852476622 0.103514238930121;
0.00428737874479779 -0.103519766069424 0.994618156086259]
在文档中,它表示它是两幅图像之间的相对旋转和平移。
但我无法理解这些数字的含义以及上述数值的单位是什么。
任何人都可以至少让我知道我们在哪些单位进行平移和旋转,或者如何提取旋转和平移,这与现实世界的值如cm / mm和弧度/度分别相当?< / p>
答案 0 :(得分:1)
您可以将旋转矩阵转换为axis-angle-representation,您可以在其中获得以弧度表示的角度。如果您无法访问该软件包,可以使用vrrotmat2vec函数或通过跟随this自行实现翻译来完成此操作。然后角度将以弧度为单位。
当谈到翻译时,你不会在一个在现实世界中有意义的单元中得到它,因为你不知道它的规模。不幸的是,这通常是来自运动的结构的问题。不可能知道你是将图像放在接近小的东西还是远离大的东西的地方。
当使用来自运动的结构来构建3D模型时,幸运的是这不是问题,因为您仍然可以正确地获得相对距离。因此,您将能够捕捉场景(通过遵循本教程的其余部分),但您无法说出某物是2厘米还是2公里高,除非您在图像中有一些您知道实际大小的东西。 / p>
希望有所帮助:)