用 iTwin Capture Modeler 把无人机航拍照片拼成正射影像
无人机航拍后,几百张照片堆在硬盘里,可能要做的事是把这些照片拼成一张带地理坐标的正射影像,给奥维互动地图当底图,或者插进 AutoCAD 当工程设计的底图。
iTwin Capture Modeler(前身是 Bentley 的 ContextCapture)能干这个活。它的强项是空三(Aerotriangulation)和真三维重建,本文只介绍「正射影像」这一条路线——空三、Orthomosaic 重建、Production 导出,最终拿到一张 GeoTIFF。
整套流程在一台普通台式机上跑完,约 2 小时(详见后文「处理时长参考」)。
开始之前
几个程序的分工
装好 iTwin Capture Modeler 后,开始菜单的 Bentley 文件夹下会出现一串相似名字的程序,第一次用容易懵。它们的分工是:
- iTwin Capture Modeler Master:主程序,建项目、设参数、提交任务都在这里——本文绝大部分操作的入口。
- iTwin Capture Modeler Engine:实际干活的后台进程,跑空三和重建。需要手动,启动后保持后台运行;Master 提交的任务会进入队列,由 Engine 依次处理。如果 Engine 没开,Master 提交了也不会动——这是新手最容易踩的坑。
- iTwin Capture Modeler Settings:设置程序,包含硬件检查工具,见下一小节。
- iTwin Capture Desktop Viewer:查看生产出来的 3D 模型用的,做正射影像不用打开。
硬件检查
打开 iTwin Capture Modeler Settings → Configuration 页签,重点看三项:

- GPU Benchmark:点 Start Benchmark 跑一次,记下 OpenGL 跑分。本文后面给出的处理时间是在 RTX 2060 / 跑分 151.1 的机器上测得的,你可以用自己的跑分倍数粗略外推。
- GPU AI compatibility:做空三时的色彩自动校正会用到 AI 模型,这里显示「Your computer can run AI jobs」才能用机器学习色彩校正。
- GPU Gaussian Splatting compatibility:做正射影像用不到,但显示 CUDA 算力可以心里有数(7.5 及以上能跑高斯泼溅,留给将来做倾斜摄影建模时参考)。
新建项目与导入照片
打开 Master,右上角点 New Capture → New Block:

填项目名(本文用 PROJ_20260413_DaQing 这种「项目标签_日期_地名」的命名),保存位置选个有足够磁盘空间的盘——单个项目跑完几十 GB 是常事。
进入新建的 Block 后,Photos 页签里点 Add Photos → Add Entire Directory,直接选无人机照片所在的文件夹:

整个文件夹一次性导入比逐张挑省事得多。导入完成后,照片列表会显示每张照片的相机型号、传感器尺寸、焦距、GPS 坐标等信息——大疆这类消费级无人机会把这些 EXIF 信息写得很完整,iTwin Capture Modeler 自动识别,不需要手动选相机型号、不需要手动输入坐标。
检查图像完整性
照片导入后、提交空三前,强烈建议跑一次完整性检查。点照片列表上方的 Check Image Files:

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

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

本项目导入时是 542 张照片,这一步全部通过——文件层面没有损坏。但「文件能打开」不等于「每张照片都能成功用于空三」,后续空三可能仍然会剔除部分照片(光线太差、与其他照片重叠不足、模糊等),见后文「空三结果」小节。
如果这一步就有失败的,先把损坏的照片删掉或修好再继续——空三阶段对损坏文件容忍度很低,提前发现比中途报错重来强得多。
空三(Aerotriangulation)
空三是把每张照片的精确位置和姿态算出来的过程,是后续所有重建的基础。在 Block 页面右上角点 Submit Aerotriangulation,弹出 Aerotriangulation Definition 对话框。
提交:本地还是云端?
点 Submit Aerotriangulation 后弹出选择:

- Process with iTwin Capture Modeler Engine:在自己电脑上跑,前提是 Engine 已经手动启动。
- Process on the Cloud:云端跑,提示「最高快 3 倍」,但需要 Bentley 的云服务订阅。
个人用户和小团队选本地即可。确认 Engine 已经从开始菜单打开,且窗口在后台运行,然后点 Process locally,Engine 就会接管任务开始算。
Positioning/Georeferencing
这一页决定空三如何利用已有的位置信息把整个 Block 摆到正确的世界坐标里。

Adjustment constraints——这一组是「硬约束」,让空三平差时严格服从某种已知精确数据(控制点、点云扫描、毫米级 RTK/PPK 后处理坐标等)。消费级无人机航拍没有这类高精度约束数据,全部不勾。
Final rigid registration 选 Photo positioning metadata——这是「软配准」,空三先靠照片之间的特征匹配自由解算出一个相对一致的姿态网,再整体平移/旋转/缩放(rigid transformation,不变形)去拟合每张照片 EXIF 里写的 GPS 坐标。大疆这类消费级无人机 GPS 精度在米级,整体配准到这个精度就够当底图用,不需要更精确的约束。
如果选 Control points / Point clouds 但又没准备这些数据,提交时会报错。本文场景一律选 Photo positioning metadata。
Use targets 不勾——这个是给地面铺了 QR Code / AprilTag / ChiliTag 物理标靶的工业测量场景用的。消费级无人机航拍跳过。
Settings
这一页控制空三本身的算法行为。

Poses and tie points 选 Adjust——四个选项的差异:
- Compute:从零开始解算位姿和连接点,完全忽略 EXIF 里的位置信息。适用于完全没有 GPS 数据的照片(比如手持相机近景拍摄)。
- Adjust:用 EXIF 里的位置信息作为初值,再让算法微调。消费级无人机的标配选项。计算密度选默认的 normal keypoints density(配对模式 default pairs selection mode)即可;keypoints density 越高匹配越稳但越慢,绝大多数场景 normal 已经够用。
- Extend:在已有空三结果上追加新照片(比如分两次飞,后期补飞了一些照片)。
- Lock:锁住已有位姿不动,只解算新的连接点。
Optical parameters 选 Adjust main parameters——相机镜头有畸变(包括径向畸变、切向畸变),即使是同型号的镜头,每一只的畸变参数也略有差异。让空三自己拟合这只镜头的畸变参数比硬用 EXIF 里的标称值精度高得多。
- Adjust main parameters:调整焦距、主点、径向畸变、切向畸变;保持长宽比和倾斜不变——后两个参数对消费级无人机不需要解算(这类相机的传感器是规规矩矩的矩形),强行解算反而可能引入数值不稳定。这是消费级无人机的标准选项。
- Lock all parameters:完全相信 EXIF 里的参数。仅适用于已经做过精确相机标定的工业相机。
Targets extraction 选 None——和前一页的 Use targets 对应,没铺标靶就选 None。
Automatic color correction 选 Machine Learning——用 AI 模型校正照片间的曝光和色彩差异(云影、不同时段的光线变化、相机自动白平衡漂移等),效果明显好于传统统计方法。前提是前面「硬件检查」里 GPU AI compatibility 显示支持。如果机器不支持 AI 任务,选 Block-wise 或 Photogroup-wise 作为退路。
Create splats 关闭——高斯泼溅(Gaussian Splatting)是一种新型 3D 渲染表示,本文做正射影像用不到。打开会显著增加空三耗时。
空三结果
空三完成后,Block 的 Overview 页签会显示完整的统计信息。
关于照片数量从 542 → 309:本项目第一次空三后,软件提示有相当一部分照片「不能用于重建」——这些照片可能是飞行盘旋时拍的重复帧、光线不佳、或者与其他照片重叠率不够。我把这些被标记的照片从 Photos 列表里手动剔除(直接选中右键 Remove),重新提交一次空三,得到了下面这张干净的结果。剔除问题照片再重跑一次空三是常见做法,避免它们污染最终重建质量。

最终空三结果的关键数据:
- Photos positioning level: georeferenced —— 整个 Block 已正确定位到地理坐标系(依赖 EXIF 里的 GPS 坐标 + Photo positioning metadata 软配准)。
- 309 photo(s) in 1 photogroup(s), 6.2 gigapixels —— 309 张照片归为同一个 photogroup(同型号相机、同焦距),合计 62 亿像素的输入数据。
- 309 photo(s) in the main component —— 全部 309 张都被纳入主连接体,没有照片掉队。main component 里的照片数 = 总数是空三成功的关键标志,如果两个数字不一致,说明仍有照片没能被正确连接,需要再检查或剔除。
- 309 known position(s) and 309 known rotation(s) —— 每张照片都解算出了精确的位置(XYZ)和姿态(roll/pitch/yaw)。
- 50243 automatic tie point(s) —— 算法自动找到了 5 万多个连接点,平均每张照片约 160 个,用于约束相邻照片的相对位置。
- Resolution ranges from 0.0058 meters to 0.0071 meters —— 实际地面分辨率(GSD)在 5.8–7.1 mm 之间——这是所有照片中最近和最远的像素地面距离。这个数字非常关键:它告诉你后续重建分辨率的上限,本项目用 0.05 m/pixel 完全在能力范围内(约为 GSD 的 7–8 倍)。
- Block has color correction using machine annotation —— 已应用机器学习色彩校正。
各项数据正常后,可以进入下一步重建。
新建重建与 Spatial Framework
Block 树中会多出一个带「- AT」后缀的子节点(Block_1 - AT),这就是上一步空三的产物。在它上面右键或选中后点 New Reconstruction:

弹出两个选项:
- 3D Reconstruction:真三维模型,做倾斜摄影建模选这个。
- Orthomosaic:2.5D 模型,正射影像和 DSM 走这个——本文选这个。
进入新建的重建节点(默认名 Orthophoto/DSM_1),核心配置在 Spatial Framework 页签。
裁剪重建范围(ROI)
地图视图里默认会用照片覆盖范围生成一个矩形 ROI(Region of Interest,蓝色框)。但实际航测时,边缘几张照片往往覆盖了不需要建模的区域(隔壁的农田、施工场外的道路等),让这些区域参与重建会浪费时间和算力。
点左侧工具栏的「立方体」按钮编辑 ROI:

注意:如果按钮显示「Not available in read only mode」,说明当前打开的是只读项目,需要先关掉重新以可编辑模式打开,或者新建一个 Capture。
裁剪掉不需要的边角,把 ROI 收紧到真正关心的区域。本项目是大庆某条线状走廊的航测,裁剪后 ROI 是一个细长的多边形,而不是大矩形——这一步能减少后续重建的 tile 数量,直接节省时间。
分辨率(Resolution)

分辨率单位是 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° 划成一个带,每个带有自己的编号。判断自己在哪个带,有两种方法:
- 公式法(30 秒):
UTM 带号 = ⌈(经度 + 180) ÷ 6⌉。例如大庆在东经 125° 左右,(125 + 180) ÷ 6 = 50.83,向上取整得 51,所以是 UTM 51 带,北半球加 N,即UTM zone 51N。 - 查询法(更省事):打开 epsg.io,搜索城市名,直接出 EPSG 编号。
Tiling 与资源预算
Tiling(分块)用 Regular planar grid,Tile size(meters)默认 22 米——这是 Capture Modeler 根据分辨率自动算出来的合理值,通常无需修改。下方 Overview 会实时显示:
- Dimensions:整个 ROI 的实际尺寸(本项目 209.591 × 874.529 × 9.4158 米——细长的走廊)。
- Orthomosaic/DSM dimensions:输出图像的像素尺寸(4192 × 17491)。
- The tiling contains N tile(s):总分块数(本项目 130)。
- Expected maximum RAM usage for a job:预估单个 tile 处理峰值内存(本项目 9 GB)——确认这个数小于你机器的可用内存。
如果 RAM 数字超过你机器的实际内存,把 Tile size 调小可以降低单 tile 内存占用(代价是 tile 数变多、总处理时间略增)。
Production Definition
Spatial Framework 配置好后,右上角点 Submit Production(本地或云端,选择逻辑同空三),弹出 Production Definition 对话框。这个对话框的参数比前面都多,需要逐项过一遍。
Purpose

只勾 Export Orthomosaic/DSM。Reference model 在重建已完成的情况下不可选(灰显属正常);Water detection 是水面检测,正射影像项目用不到。
Format/Options
这是 Production Definition 的核心,参数较多,逐一说明:

Resolution(meters):0.05,与 Spatial Framework 保持一致。
Maximum image part dimension(px):4096。这个值控制单张输出文件的最大边长。如果勾选了 Merge output parts(下一项),这个值影响不大;如果不勾,它直接决定每张分块文件的大小,建议 4096 或 8192。
Merge output parts:勾选——具体是否勾选,后面「输出体积估算」小节会给出明确的判断方法,这里先勾上。
Orthomosaic 子区
- Color source:
Reference orthophoto(默认)。 - Format:
TIFF/GeoTIFF——这是 AutoCAD 和奥维互动地图都直接支持的格式。 - No data:选 Transparent。当 ROI 是不规则多边形(比如本项目的细长走廊)时,输出 GeoTIFF 是矩形,ROI 之外的区域必须填一个值。选 Color(默认黑色)的话,影像四周会有大块黑边;选 Transparent,这些区域是透明的,叠加到地图或 CAD 上边界整洁。
- Image sharpening:
Enabled。锐化对目视判读和工程底图有利。仅当后续要做辐射定标、植被指数计算时才关掉(本文场景用不到)。
Temperature Map
不勾——消费级无人机一般没有热成像传感器。
DSM 子区
- Format:
TIFF/GeoTIFF。 - No data:
-9999(默认)——这是 GIS 行业的事实标准空值,所有主流软件都识别。
输出体积估算
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?
判断逻辑很简单:
- 总体积 < 2 GB → 勾选 Merge。合并成一个大文件,管理方便,GIS 和 AutoCAD 都能直接加载,加载性能也无压力。这是绝大多数项目的情况。
- 总体积 ≥ 2 GB → 取消 Merge。原因有二:一是接近 4 GB 普通 GeoTIFF 上限时合并会触发 BigTIFF 模式,AutoCAD 对 BigTIFF 支持不稳定,某些版本能加载、某些版本会报错或显示异常;二是单文件过大时,GIS 软件加载和切换图层都会变卡。分块输出后用 INSGEO 等工具批量加载,体验更好。
本项目总体积 < 1 GB,毫无悬念地勾选 Merge。
Spatial Reference System

这一步最容易踩坑的地方:下拉框默认可能显示一个 Local East-North-Up (ENU) 选项——不要选它。Local ENU 是以某个原点为中心的局部直角坐标系,没有全球地理参考,导出的 GeoTIFF 在奥维互动地图里无法自动定位,在 AutoCAD 里也不能跟其他带坐标的图纸对齐。
应当选择和 Spatial Framework 一致的 SRS——本项目选 WGS 84 / UTM zone 51N (EPSG:32651)。两个阶段的坐标系必须一致,否则会出现奇怪的偏移。
Extent 与 Destination
- Extent:默认全选(Use all tiles)即可。如果只想导出 ROI 的一部分,可以在这里画框框选。
- Destination:默认输出到项目目录下的
Productions\Production_1\子文件夹,无需修改。
提交生产与处理时间
参数全部确认后点 Submit:

选 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:

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

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:GeoTIFF 主文件,内嵌坐标系信息。.tfw:ESRI World File,纯文本格式的配准文件,记录像素与世界坐标的变换参数。GeoTIFF 本身就含坐标信息,但有些软件(包括较老的 AutoCAD)只读 World File 不读 GeoTIFF 内嵌信息,所以.tfw是兼容性保险。.tif.ovr:金字塔(Overviews),预先存了多级降采样副本,GIS 或 CAD 软件在缩小到全图视图时直接读对应分辨率层,十倍以上加速。复制/分享文件时,这三个必须一起带——只拷.tif会丢配准和金字塔。
后续使用
正射影像(.tif + .tfw + .tif.ovr)做出来后,最常见的几个去处:
导入 AutoCAD
把「三件套」放到一个目录,用 INSGEO 这个 AutoLISP 脚本一条命令批量导入,影像会按 World File 自动落到正确的世界坐标上,不需要手动量距离对齐。
如果项目没勾选 Merge,导出了多个分块文件,INSGEO 也能一次勾选全部分块批量插入。详细操作和团队协作下的 SMB 共享、ETRANSMIT 打包流程,见 INSGEO 文章。
导入奥维互动地图
奥维互动地图支持把 GeoTIFF 影像作为离线自定义地图加载,前提是导出时没用 Local ENU 坐标系(用 UTM 即可,本文已强调)。具体操作奥维官方文档说得很清楚:
- 《如何导入 TIFF 格式的航拍图》 —— 奥维 PC 端,支持单张、批量、整文件夹三种方式(分块导出的项目也能一次性全部导入)。
- 《手机端如何导入 TIFF 格式航拍图》 —— 奥维移动端(Android / iOS)直接导入 GeoTIFF,外业巡查时不用带电脑。
如果文件过大导致奥维加载缓慢,可以先用 QGIS 或 Global Mapper 把 GeoTIFF 重新切片或转换为 JPG/MBTiles 再导入。
导入 QGIS / ArcGIS / Global Mapper
主流 GIS 软件对 GeoTIFF 支持都很好——直接把 .tif 拖进去,软件会自动读取内嵌的坐标系信息并定位。几个常用场景:
- QGIS(免费开源):拖入即可加载;想叠加在线底图(如天地图、OpenStreetMap),装 QuickMapServices 插件;做切片缓存可以用 Processing 工具箱的「Generate XYZ tiles」。
- ArcGIS Pro:通过 Catalog 直接添加 Raster Dataset;如果要做正射影像镶嵌或与其他数据源融合,用 Mosaic Dataset。
- Global Mapper:File → Open Data Files 加载 GeoTIFF;它的优势是格式转换特别强(GeoTIFF ↔ ECW / MrSID / JPEG2000 / MBTiles 等),文件过大不便分发时用 Global Mapper 转 ECW 能压缩到原来的 1/10 大小,画质损失肉眼几乎不可见。
DSM 文件(Production_1_DSM_merge.tif)也可以一并加入这些软件,做坡度/坡向分析、等高线提取、土方计算等深加工。
本文采用 CC BY-NC-SA 4.0 协议发布,可自由转载、修改,但需保留作者署名、不可用于商业用途、衍生作品需以相同协议发布。