我正在尝试使用来自不同视图的2D图像进行3D模型重建。我遵循Matlab中的示例代码来获得所需的结果:Structure From Motion From Two Views。
以下是从摄像头拍摄的测试图像:
手动拍摄第一张和第二张平移为1 1cm的图像:

覆盖第一张和第二张图片的匹配特征:

手动拍摄平移2 2cm的第一张和第二张图像:

覆盖第一张和第二张图片的匹配特征:

以下是我为每种情况获得的平移向量和旋转矩阵:
1 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]2 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]在文档中,它说它是两个图像之间的相对旋转和平移。
但我无法理解这些数字是什么意思,以及上述数值的单位是什么。
至少有人能让我知道我们得到的平移和旋转的单位是什么,或者如何提取旋转和平移,它们在任何方面都可以与实际的值相比较,比如厘米/毫米和弧度/度?
发布于 2016-03-23 01:15:11
您可以将旋转矩阵转换为axis-angle-representation,在其中您可以获得以弧度表示的角度。这可以使用vrrotmat2vec函数来完成,或者如果您没有访问包的权限,也可以通过遵循this自己实现一个转换程序。角度将以弧度为单位。
然而,当涉及到翻译时,你不会得到一个在现实世界中有意义的单位,因为你不知道规模。不幸的是,这通常是一个从运动到结构的问题。你不可能知道你拍摄的图像是靠近小的东西还是远离大的东西。
当使用运动中的结构来构建3D模型时,幸运的是这不是问题,因为您仍然可以正确地获得相对距离。因此,您将能够捕获场景(通过遵循教程的其余部分),但您无法说出是否有2厘米或2公里高的东西,除非您在图像中有您知道的真实大小的东西。
希望它能有所帮助:)
https://stackoverflow.com/questions/36159223
复制相似问题