通过命令行使用Agisoft来读取图片来进行三维重建稠密点云

  1. 简单介绍

​ Agisoft是一个非常方便的软件,拥有了读取图片并自行重建三维重建的功能,可以实现稠密点云,网格,有纹理的面的重建,它还同时具有windows,linux,mac上的版本(下载链接:https://www.agisoft.com/),然后虽然他的图形化界面会非常好看,但是从照片重建三维世界,其实是非常消耗计算力的事情,(我的渣电脑三十张照片跑了两个小时),然后我最近要处理的是几千张图片重建的任务(这得跑太久了)。所以不得不借助服务器来进行这个任务,然而服务器是完全只能用命令行,所以这样的话我们就只能使用自己提前编写好的脚本,来完成这个任务。

​ 2.具体方法

​ 以下编程平台都是在ubuntu16.04上,Agisoft提供了用户可以导入python的脚本,

在这里插入图片描述

但我们既然在命令行下,是不能这样的,所以我查阅了资料,在linux下,只需要在metashape的文件夹下(这个文件下含有metashape.sh文件)运行指令

./metashape -r xxx.py

后面的python文件是你自己编写的脚本,这样你的程序就可以按照,编写的程序进行运行

接下来进入我们脚本的编写下,脚本编写很简单,就跟我们在软件下生成点云下步骤差不多,读取图片,对齐相机,生成深度图,生成点云

import Metashape
import os 
#实例化一个chunk对象
doc=Metashape.app.document
chunk=doc.addChunk()    #在软件外部调用,因为我们在服务器下是无法看图形化界面,所以只能用这个


#添加照片
str="photo_test"#设置地址
path = []
for file_name in os.listdir(str):
    path.append(os.path.join(str, file_name))#这里将图片地址赋值在一个列表里


chunk.AddPhotos(path) #添加图片
chunk.matchPhotos(downscale=1,generic_preselection=True,reference_preselection=False)
chunk.alignCameras()#对齐相机
    #建立深度图
chunk.buildDepthMaps(downscale=4, filter_mode=Metashape.AggressiveFiltering)
 
#点云重建
chunk.buildDenseCloud()
 
#构建模型
'''
chunk.buildModel(surface_type=Metashape.Arbitrary, interpolation=Metashape.EnabledInterpolation)
 
#UV分解
chunk.buildUV(mapping_mode=Metashape.GenericMapping)
 
#纹理贴图
chunk.buildTexture(blending_mode=Metashape.MosaicBlending, texture_size=4096)
 '''
 #这上面的对计算力消耗很大,如果只是要个点云的话注释掉就好了
#保存项目
doc.save(path = "test1.psz", chunks = [doc.chunk])

这样的话我们就完成了程序的编写,就可以愉快的通过服务器来代跑程序了,

在这里插入图片描述

查看生成的项目:
在这里插入图片描述

ps:这是我在agisoft网站上下载的最简单的数据集就6张图片,如果你只是为了熟悉操作,也不要挑太多图片,用这六张图片就够了

然而截止到昨天博主在测试运在这里插入图片描述
行在服务器的情况下出现了如下问题,有没有大佬会解决的。。。。教教我。

参考blog:https://blog.csdn.net/qq_41475842/article/details/107242788

Logo

更多推荐