我使用MeshLab处理三维扫描,特别是给网格一个纹理。 我正在尝试使用命令行自动化Meshlab的一些特性,Meshlab服务器在某些任务中运行良好。但是,我正在使用捆绑出去存储相机位置的格式,而且似乎没有打开捆绑出去文件使用meshlabserver。我需要从我的三维扫描得到相机的位置,以便应用纹理。在
我尝试过转换捆绑出去通过打开两个文件并比较其中的格式,使用Python脚本将文件文件转换为.mlp文件,但是在编写脚本的过程中,我注意到这两个文件包含的数据并不完全相同,即使对于同一个相机也是如此。特别是包含在捆绑出去文件与.mlp文件中的转换矢量不匹配。在
下面是我在MeshLab中通过导入捆绑出去文件:
<!DOCTYPE MeshLabDocument>
<MeshLabProject>
<MeshGroup/>
<RasterGroup>
<MLRaster label="IMG_1923.JPG">
<VCGCamera TranslationVector="1.47497 -1.02971 3.11087 1" LensDistortion="0 0" CameraType="0" PixelSizeMm="1 1" ViewportPx="4032 3024" CenterPx="2016 1512" RotationMatrix="0.874226 0.050346 -0.482903 0 0.0346906 -0.998544 -0.0413029 0 -0.484279 0.0193558 -0.8747 0 0 0 0 1 " FocalMm="3345.59"/>
<Plane semantic="1" fileName="images/IMG_1923.JPG"/>
</MLRaster>
...
注意“TranslationVector”属性以及其中的值。在
这是捆绑出去用于创建.mlp文件的文件:
^{pr2}$捆绑文件的解释如下:
# Bundle file v0.3
<number of images> <number of points>
<f> <k1> <k2>
<r_1,1> <r_1,2> <r_1,3>
<r_2,1> <r_2,2> <r_2,3>
<r_3,1> <r_3,2> <r_3,3>
<t_1> <t_2> <t_3>
...
其中: f: 焦距 k1和k2:径向畸变系数 r_i,j:旋转矩阵的元素 t_i:平移向量的元素
最后一行的三个值t_1、t_2和t_3是存储平移向量的位置。它与.mlp文件的不匹配。两个文件共有的所有其他值都匹配。在
链接到捆绑出去文件格式规范:http://www.cs.cornell.edu/~snavely/bundler/bundler-v0.3-manual.html#S6 (向下滚动到“VI.输出格式和场景表示”)
我希望.mlp文件包含与捆绑出去但有一个属性,即平移向量,在两个文件中不匹配。在
如果有人能解释为什么会有差异,并可能提供一种在捆绑出去文件转换为.mlp文件。在
我找到了解决办法。在
在研究了MeshLab的源代码之后,我发现了这个文件: https://github.com/cnr-isti-vclab/meshlab/blob/d596d7c086c51fbdfb56050f9c30b55dd0286d4c/src/meshlabplugins/filter_layer/filter_layer.cpp
来自630号线:
这就是从Bundler的平移向量到Meshlab的平移向量的转换的地方。在
我从上面的代码中提取的信息如下:
转换转换向量的方法捆绑出去收件人.mlp:
我在Python中测试了这个配方,其输出与.mlp文件中的相同
相关问题 更多 >
编程相关推荐