Daily Build

用 iTwin Capture Modeler 把无人机航拍照片拼成正射影像

无人机航拍后,几百张照片堆在硬盘里,可能要做的事是把这些照片拼成一张带地理坐标的正射影像,给奥维互动地图当底图,或者插进 AutoCAD 当工程设计的底图。

iTwin Capture Modeler(前身是 Bentley 的 ContextCapture)能干这个活。它的强项是空三(Aerotriangulation)和真三维重建,本文只介绍「正射影像」这一条路线——空三、Orthomosaic 重建、Production 导出,最终拿到一张 GeoTIFF。

整套流程在一台普通台式机上跑完,约 2 小时(详见后文「处理时长参考」)。

开始之前

几个程序的分工

装好 iTwin Capture Modeler 后,开始菜单的 Bentley 文件夹下会出现一串相似名字的程序,第一次用容易懵。它们的分工是:

硬件检查

打开 iTwin Capture Modeler Settings → Configuration 页签,重点看三项:

gpu-benchmark

新建项目与导入照片

打开 Master,右上角点 New Capture → New Block

new-block-menu

填项目名(本文用 PROJ_20260413_DaQing 这种「项目标签_日期_地名」的命名),保存位置选个有足够磁盘空间的盘——单个项目跑完几十 GB 是常事。

进入新建的 Block 后,Photos 页签里点 Add Photos → Add Entire Directory,直接选无人机照片所在的文件夹:

add-entire-directory

整个文件夹一次性导入比逐张挑省事得多。导入完成后,照片列表会显示每张照片的相机型号、传感器尺寸、焦距、GPS 坐标等信息——大疆这类消费级无人机会把这些 EXIF 信息写得很完整,iTwin Capture Modeler 自动识别,不需要手动选相机型号、不需要手动输入坐标

检查图像完整性

照片导入后、提交空三前,强烈建议跑一次完整性检查。点照片列表上方的 Check Image Files

check-image-files-button

弹出对话框选择 Check image file header only (faster) 即可——只读文件头,几秒钟扫完几百张照片;Load the entire image file 是逐张完整解码,慢很多,通常用不到。

check-image-files-dialog

点 Start,等结果出来。理想结果是「N/N image files were successfully opened」:

check-image-files-passed

本项目导入时是 542 张照片,这一步全部通过——文件层面没有损坏。但「文件能打开」不等于「每张照片都能成功用于空三」,后续空三可能仍然会剔除部分照片(光线太差、与其他照片重叠不足、模糊等),见后文「空三结果」小节。

如果这一步就有失败的,先把损坏的照片删掉或修好再继续——空三阶段对损坏文件容忍度很低,提前发现比中途报错重来强得多。

空三(Aerotriangulation)

空三是把每张照片的精确位置和姿态算出来的过程,是后续所有重建的基础。在 Block 页面右上角点 Submit Aerotriangulation,弹出 Aerotriangulation Definition 对话框。

提交:本地还是云端?

点 Submit Aerotriangulation 后弹出选择:

submit-aerotriangulation-menu

个人用户和小团队选本地即可。确认 Engine 已经从开始菜单打开,且窗口在后台运行,然后点 Process locally,Engine 就会接管任务开始算。

Positioning/Georeferencing

这一页决定空三如何利用已有的位置信息把整个 Block 摆到正确的世界坐标里。

aerotriangulation-georeferencing

Adjustment constraints——这一组是「硬约束」,让空三平差时严格服从某种已知精确数据(控制点、点云扫描、毫米级 RTK/PPK 后处理坐标等)。消费级无人机航拍没有这类高精度约束数据,全部不勾

Final rigid registrationPhoto positioning metadata——这是「软配准」,空三先靠照片之间的特征匹配自由解算出一个相对一致的姿态网,再整体平移/旋转/缩放(rigid transformation,不变形)去拟合每张照片 EXIF 里写的 GPS 坐标。大疆这类消费级无人机 GPS 精度在米级,整体配准到这个精度就够当底图用,不需要更精确的约束。

如果选 Control points / Point clouds 但又没准备这些数据,提交时会报错。本文场景一律选 Photo positioning metadata。

Use targets 不勾——这个是给地面铺了 QR Code / AprilTag / ChiliTag 物理标靶的工业测量场景用的。消费级无人机航拍跳过。

Settings

这一页控制空三本身的算法行为。

aerotriangulation-settings

Poses and tie pointsAdjust——四个选项的差异:

Optical parametersAdjust main parameters——相机镜头有畸变(包括径向畸变、切向畸变),即使是同型号的镜头,每一只的畸变参数也略有差异。让空三自己拟合这只镜头的畸变参数比硬用 EXIF 里的标称值精度高得多。

Targets extractionNone——和前一页的 Use targets 对应,没铺标靶就选 None。

Automatic color correctionMachine Learning——用 AI 模型校正照片间的曝光和色彩差异(云影、不同时段的光线变化、相机自动白平衡漂移等),效果明显好于传统统计方法。前提是前面「硬件检查」里 GPU AI compatibility 显示支持。如果机器不支持 AI 任务,选 Block-wisePhotogroup-wise 作为退路。

Create splats 关闭——高斯泼溅(Gaussian Splatting)是一种新型 3D 渲染表示,本文做正射影像用不到。打开会显著增加空三耗时。

空三结果

空三完成后,Block 的 Overview 页签会显示完整的统计信息。

关于照片数量从 542 → 309:本项目第一次空三后,软件提示有相当一部分照片「不能用于重建」——这些照片可能是飞行盘旋时拍的重复帧、光线不佳、或者与其他照片重叠率不够。我把这些被标记的照片从 Photos 列表里手动剔除(直接选中右键 Remove),重新提交一次空三,得到了下面这张干净的结果。剔除问题照片再重跑一次空三是常见做法,避免它们污染最终重建质量。

aerotriangulation-result

最终空三结果的关键数据:

各项数据正常后,可以进入下一步重建。

新建重建与 Spatial Framework

Block 树中会多出一个带「- AT」后缀的子节点(Block_1 - AT),这就是上一步空三的产物。在它上面右键或选中后点 New Reconstruction

new-reconstruction-menu

弹出两个选项:

进入新建的重建节点(默认名 Orthophoto/DSM_1),核心配置在 Spatial Framework 页签。

裁剪重建范围(ROI)

地图视图里默认会用照片覆盖范围生成一个矩形 ROI(Region of Interest,蓝色框)。但实际航测时,边缘几张照片往往覆盖了不需要建模的区域(隔壁的农田、施工场外的道路等),让这些区域参与重建会浪费时间和算力。

点左侧工具栏的「立方体」按钮编辑 ROI:

spatial-framework-readonly

注意:如果按钮显示「Not available in read only mode」,说明当前打开的是只读项目,需要先关掉重新以可编辑模式打开,或者新建一个 Capture。

裁剪掉不需要的边角,把 ROI 收紧到真正关心的区域。本项目是大庆某条线状走廊的航测,裁剪后 ROI 是一个细长的多边形,而不是大矩形——这一步能减少后续重建的 tile 数量,直接节省时间。

分辨率(Resolution)

spatial-framework-detail

分辨率单位是 meters/pixel,即每个像素代表的实际地面距离。它的下限取决于无人机航拍的 GSD(Ground Sample Distance,地面采样距离)——重建分辨率比 GSD 还小是没意义的,因为照片本身就没有那么多细节。

实际工程中只需在两个值之间选一个

分辨率 适用场景
0.02 m/pixel(2 cm) 工程精细化场景:管道接头、设备铭牌、路面裂缝识别等需要看清楚小目标的工作
0.05 m/pixel(5 cm) 通用工程底图、GIS 入库、奥维互动地图底图等绝大多数场景

更精细(如 1 cm)需要无人机更低空飞行,单次航拍覆盖面积锐减、照片数量翻倍,重建时长和文件体积也成倍增长,性价比急剧下降;更粗放(如 10 cm 以上)则多数消费级无人机的 GSD 已经能轻松达到 5 cm 内,主动调粗等于浪费数据。

本项目选 0.05 m/pixel——空三结果显示实际 GSD 是 5.8–7.1 mm,理论上能撑到 0.01 m/pixel,但 5 cm 已经够当工程底图用,没必要追求极限。

坐标系(SRS)

大疆等消费级无人机的照片,EXIF 里已经写好了 WGS84 经纬度坐标,Capture Modeler 会根据照片落点自动选择合适的 UTM 投影带——这里通常不需要手动改。本项目大庆地区,软件自动选了 WGS 84 / UTM zone 51N (EPSG:32651)

UTM(Universal Transverse Mercator)把全球按经度每 6° 划成一个带,每个带有自己的编号。判断自己在哪个带,有两种方法:

Tiling 与资源预算

Tiling(分块)用 Regular planar grid,Tile size(meters)默认 22 米——这是 Capture Modeler 根据分辨率自动算出来的合理值,通常无需修改。下方 Overview 会实时显示:

如果 RAM 数字超过你机器的实际内存,把 Tile size 调小可以降低单 tile 内存占用(代价是 tile 数变多、总处理时间略增)。

Production Definition

Spatial Framework 配置好后,右上角点 Submit Production(本地或云端,选择逻辑同空三),弹出 Production Definition 对话框。这个对话框的参数比前面都多,需要逐项过一遍。

Purpose

production-purpose

只勾 Export Orthomosaic/DSM。Reference model 在重建已完成的情况下不可选(灰显属正常);Water detection 是水面检测,正射影像项目用不到。

Format/Options

这是 Production Definition 的核心,参数较多,逐一说明:

production-format-options

Resolution(meters)0.05,与 Spatial Framework 保持一致。

Maximum image part dimension(px)4096。这个值控制单张输出文件的最大边长。如果勾选了 Merge output parts(下一项),这个值影响不大;如果不勾,它直接决定每张分块文件的大小,建议 4096 或 8192。

Merge output parts勾选——具体是否勾选,后面「输出体积估算」小节会给出明确的判断方法,这里先勾上。

Orthomosaic 子区

Temperature Map

不勾——消费级无人机一般没有热成像传感器。

DSM 子区

输出体积估算

Production 出来的文件占多大磁盘?这个问题在勾选 Merge 之前必须心里有数,因为它直接影响下一步的判断。

通用公式

原始体积(MB) = 边长² × 波段数 × 位深字节数 ÷ 1048576

边长:Maximum image part dimension(4096 或 8192)
波段数:
  Orthomosaic + No data = Color    → 3 波段(RGB)
  Orthomosaic + No data = Transparent → 4 波段(RGBA)  ← 本文设置
  DSM                              → 1 波段
位深字节数:
  Orthomosaic 8bit  → 1
  DSM 32bit float   → 4
压缩后体积(MB) = 原始体积 × 压缩率
  GeoTIFF LZW 压缩率 ≈ 0.3–0.6

单文件参考体积(本文设置:Resolution = 0.05 m,No data = Transparent)

类型 边长 波段数 × 位深 原始体积 LZW 压缩后
Orthomosaic 4096 4 × 1 byte 64 MB 20–40 MB
Orthomosaic 8192 4 × 1 byte 256 MB 80–160 MB
DSM 4096 1 × 4 bytes 64 MB 20–40 MB
DSM 8192 1 × 4 bytes 256 MB 80–160 MB

本项目输出像素 4192 × 17491,在 4096 分块下大约切成 2 × 5 = 10 个分块(Merge 前),Orthomosaic + DSM 合计总体积约 400–800 MB。

Merge 还是不 Merge?

判断逻辑很简单:

  1. 总体积 < 2 GB勾选 Merge。合并成一个大文件,管理方便,GIS 和 AutoCAD 都能直接加载,加载性能也无压力。这是绝大多数项目的情况。
  2. 总体积 ≥ 2 GB取消 Merge。原因有二:一是接近 4 GB 普通 GeoTIFF 上限时合并会触发 BigTIFF 模式,AutoCAD 对 BigTIFF 支持不稳定,某些版本能加载、某些版本会报错或显示异常;二是单文件过大时,GIS 软件加载和切换图层都会变卡。分块输出后用 INSGEO 等工具批量加载,体验更好。

本项目总体积 < 1 GB,毫无悬念地勾选 Merge。

Spatial Reference System

production-srs

这一步最容易踩坑的地方:下拉框默认可能显示一个 Local East-North-Up (ENU) 选项——不要选它。Local ENU 是以某个原点为中心的局部直角坐标系,没有全球地理参考,导出的 GeoTIFF 在奥维互动地图里无法自动定位,在 AutoCAD 里也不能跟其他带坐标的图纸对齐。

应当选择和 Spatial Framework 一致的 SRS——本项目选 WGS 84 / UTM zone 51N (EPSG:32651)。两个阶段的坐标系必须一致,否则会出现奇怪的偏移。

Extent 与 Destination

提交生产与处理时间

参数全部确认后点 Submit:

submit-production-menu

选 Process with iTwin Capture Modeler Engine(本地处理),确认 Engine 在后台运行,任务进入队列。

处理时长参考

数值
硬件 NVIDIA GeForce RTX 2060(OpenGL 跑分 151.1,CUDA 算力 7.5)
照片数量 309 张(剔除问题照片后;6.2 gigapixels)
Tile 数量 130
分辨率 0.05 m/pixel
内存预算 9 GB
空三耗时 10min 27s
Production 耗时(重建+导出) 约 1h 33min

GPU 跑分大致与处理速度成正比——如果你的 GPU 跑分是 RTX 2060 的两倍,可以粗略估计处理时间减半。云端处理理论上还能再快 2–3 倍。

任务完成后,Production 节点状态变为 Completed:

production-completed

输出文件

打开 Productions 子目录,会看到这样的文件结构(以本项目 Production_1 为例):

output-files

Production_1/
├── Production_1_ortho_merge.tif       ← 正射影像 GeoTIFF
├── Production_1_ortho_merge.tfw       ← 正射影像配准文件(World File)
├── Production_1_ortho_merge.tif.ovr   ← 正射影像金字塔
├── Production_1_DSM_merge.tif         ← DSM GeoTIFF
├── Production_1_DSM_merge.tfw         ← DSM 配准文件
├── Production_1_DSM_merge.tif.ovr     ← DSM 金字塔
└── orthoPhoto/                        ← 原始分块文件夹(Merge 前的中间产物)

每个输出都是「三件套」:

后续使用

正射影像(.tif + .tfw + .tif.ovr)做出来后,最常见的几个去处:

导入 AutoCAD

把「三件套」放到一个目录,用 INSGEO 这个 AutoLISP 脚本一条命令批量导入,影像会按 World File 自动落到正确的世界坐标上,不需要手动量距离对齐。

如果项目没勾选 Merge,导出了多个分块文件,INSGEO 也能一次勾选全部分块批量插入。详细操作和团队协作下的 SMB 共享、ETRANSMIT 打包流程,见 INSGEO 文章

导入奥维互动地图

奥维互动地图支持把 GeoTIFF 影像作为离线自定义地图加载,前提是导出时没用 Local ENU 坐标系(用 UTM 即可,本文已强调)。具体操作奥维官方文档说得很清楚:

如果文件过大导致奥维加载缓慢,可以先用 QGIS 或 Global Mapper 把 GeoTIFF 重新切片或转换为 JPG/MBTiles 再导入。

导入 QGIS / ArcGIS / Global Mapper

主流 GIS 软件对 GeoTIFF 支持都很好——直接把 .tif 拖进去,软件会自动读取内嵌的坐标系信息并定位。几个常用场景:

DSM 文件(Production_1_DSM_merge.tif)也可以一并加入这些软件,做坡度/坡向分析、等高线提取、土方计算等深加工。


本文采用 CC BY-NC-SA 4.0 协议发布,可自由转载、修改,但需保留作者署名、不可用于商业用途、衍生作品需以相同协议发布。