使用2D图像进行三维重建中的旋转和平移

时间:2016-03-22 15:55:51

标签: image matlab 3d modeling

我正在尝试使用来自不同视图的2D图像进行3D模型重建。我正在遵循Matlab的这个示例代码来获得所需的结果: Structure From Motion From Two Views

以下是从相机拍摄的测试图像:

以1cm的平移手动拍摄第1张和第2张图像: manually taken images of 1st and 2nd image with translation of 1cm

使用第一张和第二张图片的匹配功能叠加: overlay with matched features of first and second image

以2cm的平移手动拍摄第1张和第2张图像: manually taken images of 1st and 2nd image with translation of 2cm

使用第一张和第二张图片的匹配功能叠加: overlay with matched features of first and second image

这些是我为每种情况得到的平移向量和旋转矩阵:

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>

1 个答案:

答案 0 :(得分:1)

您可以将旋转矩阵转换为axis-angle-representation,您可以在其中获得以弧度表示的角度。如果您无法访问该软件包,可以使用vrrotmat2vec函数或通过跟随this自行实现翻译来完成此操作。然后角度将以弧度为单位。

当谈到翻译时,你不会在一个在现实世界中有意义的单元中得到它,因为你不知道它的规模。不幸的是,这通常是来自运动的结构的问题。不可能知道你是将图像放在接近小的东西还是远离大的东西的地方。

当使用来自运动的结构来构建3D模型时,幸运的是这不是问题,因为您仍然可以正确地获得相对距离。因此,您将能够捕捉场景(通过遵循本教程的其余部分),但您无法说出某物是2厘米还是2公里高,除非您在图像中有一些您知道实际大小的东西。 / p>

希望有所帮助:)