菜单

ContextCapture空三错乱问题解决方法

2019年8月14日 - ContextCapture(原Smart3D)教程

为了进行三维重建,ContextCapture必须非常准确地知道每个输入照片组的照片组属性和每个输入照片的姿态。如果您忽略这些属性,或者您不知道它们是否具有足够的准确性,ContextCapture可以通过称为空三(有时缩写为AT)的过程自动计算这些参数。

空三基于块(Block),并生产一个计算好相关属性的新块(Block)。空三会参考当前摄像机位置(例如,从GPS初始化)或基于地理参考控制点。

尽管ContextCapture可以在没有输入照片姿态初始信息的情况下完成空三,但不建议对大量照片进行计算;在这种情况下,没有任何初始位置信息的空三可能失败或者错乱。大数据集最好包括大概的姿态信息(例如INS),也可以通过XML或MS Excel文件导入。ContextCapture可以完成一个非常大的块(Block)的空三计算,块大小的唯一限制是计算机内存。

译者注:这也是为什么大面积的航拍会进行分块空三,有些单位具备Tb级的内存,而有些单位只能使用32G内存。可以根据实际情况考虑分块的方式。常规建议16G或者32G内存不要超过8000张照片。

导入照片,默认参数空三结果

注:失败后检查的时候发现,默认导入后,照片的角度是不对的,这里smart3d直接识别了照片的姿态信息(可能是导致错误的因素之一)

smart3d识别了照片的姿态信息

原始数据导入

 

默认参数的空三

默认参数的空三

问题排查:

a.发现block导入照片后,不含sensorsize参数,smart3d无法自动识别拍摄照片的相机,没有对应的参数来做空三结算

b.实验的时候为了快速检验空三,设置了downsampling为60%(此值过低也会导致空三失败,一般建议60%以上)

c.单机照片,发现步骤二里提到的照片的姿态信息不对(问题解决后发现)

解决方法:

a.右键照片属性看到相机型号:Sequoia,相机制造商:Parrot,百度和谷歌都只得到这是sensefly旗下的一款多光谱相机,只能查到多光谱相关的一些参数,没有找到相机的sensorsize后想到用pix4d去做空三是成功的,那pix4d应该是识别了正确的相机参数,去验证:

pix4d识别的相机参数

pix4d识别的相机参数

 

b.setdownsampling改为100%(空三的时间会长,这里没有一个参数一个参数去验证,直接改了两个集体验证)

四、空三成功

成功的空三效果

成功的空三效果

分块空三再合并

首先,我们打开Smart3D Master和Engine,新建项目,将航片导入Block,结果如图

打开Smart3D Master和Engine

打开Smart3D Master和Engine

可以简单的预览一下航线图,打开3D View,如图

打开3D View

打开3D View

从这个View中并没有看到有什么问题,接着我们按照常规,进行下一步,提交空三运算。

空三运算之后,我们打开3D View,看下处理结果,发现空三已经错乱了,如图

空三已经错乱

空三已经错乱

解决办法

1、加Tie Point,重新进行空三运算

2、在变形最严重处,将数据分块,分块进行空三,最后进行合并。

第一种办法试了下,有一定的效果,但是并没有根本性的完全将空三纠正过来。

下面我们着重介绍第二种办法:

首先,预览3D View,如下图,确定如何将航片分块

确定如何将航片分块

图五中,红色线框处为航线连接处,且在线路的中间位置,因此我们确定将其作为分割的地方。

将航片导出KML,如图

将航片导出KML

将导出的KML加载到Google Earth (国内使用建议用LSV)中,如图

导出的KML加载到Google Earth

确定红色框线处为我们要分割的地方,根据图像的名字,将航片分为两个部分,分别导入两个块中,进行独立的空三运算,如图

独立的空三运算

结果如图

整体空三运算

我们看到分块的结果还是很不错的,比整体空三运算的效果要好很多

下面我们进行合并,将两个块进行合并,如图

两个块进行合并

合并后的块如下图,将原来的航片分为了两个Photogroup

原来的航片分为了两个Photogroup

我们对合并后的Block进行空三,结果如图

合并后的Block进行空三

空三错乱已经基本解决,然后我们就根据需求生成相应的Production,通过Wish3D上传展示。

发表评论

邮箱地址不会被公开。 必填项已用*标注