轻量正射实现原理技术文档
一、功能
在已知(或近似已知)相机内外方位的前提下,把倾斜航拍原始栅格重采样到与地面对齐的统一格网,产出带地理参考的正射 DOM。
实现上不承担空三解算、稠密匹配或神经网络推理;输入是影像、标定参数、可选数字高程模型,输出是正射 GeoTIFF 等。核心是把摄影测量共线条件 实现为 GDAL 可回调的坐标变换,由通用栅格重投影引擎按输出驱动 反查源像素并插值;有地形数据时,对每个输出点做高程闭合迭代,使投影面贴 DEM 而非单一水平面(工程上称 CCE)。
外围实现包括:飞控姿态驱动的快拼入口、空三成果驱动的批量正射编排、双光传感器仿射配准、以及基于镶嵌线矢量的多景融合。该模块解决"位姿已知时像素与地面的可逆映射及写盘"。
二、整体架构
从维护角度,实现分为四层:
- 几何内核:相机模型(视觉/测绘两套像素约定)、外方位旋转、畸变正逆变换、地面点与像点互算。
- 栅格平台适配层:将上述互算注册为 GDAL 变换器;串联地理变换、可选投影重投影、帧模型逆变换。
- 任务编排层:单景 CCE 正射、多景并行、快拼姿态转换、镶嵌与双光配准。
- 对外导出层:极少量 C 接口;多数能力在内部命名空间中以类与选项结构暴露。
一次正射数据流:
输出格网行列 → 地面平面坐标 → [迭代] 地形高程
→ 共线逆解源像点 → 去畸变 → 源影像插值 → 写入目标波段
以下按 五类实现任务 展开;每类只写为何这样设计、数值上做什么、与内存和 IO 如何配合,不写接口名,少用符号名。
三、类型一:CCE 帧式正射(全库几何终点)
所有"真正正射"的实现最终都汇聚到这一类。
3.1 要解决的几何问题
中心投影下,地面点与像点满足共线:摄影中心、物点、像点一线。已知外方位(摄影中心坐标、姿态旋转)和内方位(焦距、主点、像元、畸变),可:
- 正算:给定地面三维坐标,求源影像行列号(用于预览、范围估算)。
- 逆算:给定地面平面坐标与高程假设,求源影像行列号(正射重采样实际使用)。
正射纠正本质是:对输出 DOM 每个格网中心,求其对应的源影像采样位置,再双线性或三次卷积取色。
3.2 相机模型的两套实现
同一物理相机,有两套约定:
| 约定 | 像素与像方关系 | 畸变 |
|---|---|---|
| 计算机视觉 | 以主点为原点,行号方向与测绘相反 | 径向+切向;去畸变用固定精度迭代 |
| 摄影测量 | 像素乘像元尺寸换算毫米级像方坐标 | 测绘多项式;仅在像方接近幅内时改正 |
实现原则:热路径上外方位已化为三乘三旋转矩阵,不再每点分解欧拉角。正算时先旋转到相机坐标系、透视除、加畸变、再转像素;逆算顺序相反。
易错点:视觉模式与测绘模式的主点、像元含义不可混用,否则高程迭代发散或整图拉伸。
3.3 高程闭合迭代(CCE 核心)
无地形时:整幅地面按平均高程或常数高处理,等价传统"平面纠正",山区误差大。
有地形时:对每个输出点:
- 用当前假设高程,由像方射线与地面关系解算平面坐标(闭式一步)。
- 将平面坐标映射到高程栅格,双线性或最近邻采样得地形高。
- 以新高程重复解算,直至平面坐标与高程变化均低于阈值,或达到最大迭代次数。
- 用收敛后的三维共线关系得到源影像行列。
地形栅格与正射输出投影不一致时,在采样高程前插入坐标转换。
这是标量不动点迭代;地形粗糙、迭代上限偏低时会有残差,靠阈值截断;无数据像素回退平均高。
3.4 与 GDAL 重投影的衔接
不手写双重循环遍历输出图,而是:
- 构建帧模型变换器(含地形路径、平均高、畸变开关、迭代参数)。
- 可选叠加投影变换器(源/目标空间参考不一致时)。
- 再包一层地理格网变换器:先把输出行列换成投影坐标,再进投影与帧模型链。
- 调用平台重投影:方向为目标到源,由平台按块回调变换器批量求源坐标并插值。
输出范围与分辨率:先用变换器正算影像四角/边界在地面的包络,得到建议四至与行列数;用户可强制地面分辨率或裁剪范围,实现上重算仿射变换参数与宽高。
3.5 地形数据的分块加载
整幅 DEM 可能远超内存。实现策略:
- 根据输出正射四至(外扩若干像素)在 DEM 上裁窗口;
- 将窗口读入内存,生成仅描述该窗口的虚拟栅格描述;
- 把变换器绑定的地形路径改为该虚拟描述,必要时销毁并重建变换器。
避免全局打开地形文件。
3.6 行向优化(热路径)
重投影常按行扫描输出。若一批变换点的地面北坐标相同、地形格网无旋转、投影一致,则对地形只读一行(或插值所需窄带),该行所有输出点共用缓冲。
否则每点单独查地形,IO 成为瓶颈。这是针对栅格扫描顺序的特化,新增地形源时要验证是否仍满足条件。
3.7 写盘
创建目标驱动格式数据集;设置投影与仿射变换;按内存上限分块重投影;可选波段子集、压缩与分块存储。
四、类型二:飞控 POS/姿态快拼
无空三文件时,用 GPS 与双组姿态角构造近似外方位,仍走类型一。
4.1 实现步骤
第一步 --- 摄影中心投影化
经纬度高程在 WGS84 下;按经纬度选 UTM 带,转米制投影坐标作为线元素。避免把经纬度当平面直角用。
第二步 --- 姿态转为摄影测量角
输入吊舱与飞机两组偏航、俯仰、翻滚(度)。分别构造旋转矩阵并组合;可选将翻滚置零以抑制横滚噪声。
再通过当地东北天与摄影测量系统之间的基变换,把组合姿态反解为绕轴角三元组(实现上用微扰纬度估计东向)。这是工程近似,不是完整 IMU 杆臂与延迟补偿模型(杆臂偏移在实现中可预留但未强制启用)。
第三步 --- 简化内参
由幅宽、幅高、视场角推等效焦距(像素),主点取影像中心,畸变系数为零。
第四步 --- 单景批量正射入口
装入仅含一景的选项:地形路径或常数高、投影 WKT、上述内外参;调用类型一完整流程,在 UTM 下生成临时正射。
第五步 --- 地理格网回写
临时正射再重投影到 WGS84 地理坐标;删除临时文件。最终产品常在经纬度格网下交付。
4.2 结论
快拼的精度瓶颈在姿态与零畸变假设,不在重采样内核。内核与测绘级正射相同,差异在参数来源粗糙。
五、类型三:空三后批量 DOM
5.1 职责边界
不重复几何;负责读取优化后的相机表与影像表、统一地面采样间隔、并行调度多景类型一。
5.2 实现步骤
第一步 --- 解析标定成果
从文本或工程约定格式载入:每相机焦距、像元、主点、畸变系数;每影像路径、关联相机、摄影中心、姿态角。校验影像引用的相机存在。
第二步 --- 统一 DOM 地面间隔
若用户未指定分辨率:对每景估算中心邻域地面采样间隔(利用共线正算与航高/地形),再对全集取平均,写入选项。
意图:多景 DOM 尺度一致,便于后续镶嵌;否则最细与最粗源硬拼会模糊或锯齿。
第三步 --- 并行索引
按起始索引与块大小划定子集;线程池上限可配置;进度回调在临界区更新,避免竞态。
第四步 --- 每工作线程独立正射
线程内从表组装畸变数组、内参数组、外参数组;调用类型一单景入口。单景失败通常记录日志并继续,无全局事务(由上层工程重跑)。
第五步 --- 输出约定
多景时由上层为每景指定输出路径;本模块示例中存在写单一目标路径的简化形态,集成时需在外层展开文件名。
5.3 内存与 IO
每线程同时持有源影像句柄与重投影瓦片缓冲;地形文件只读共享;每景可能触发地形窗口虚拟化。内存上限通过重投影选项限制瓦片大小。
六、类型四:可见光与红外配准
6.1 问题与假设
双光吊舱两相机光心分离、焦距与像元不同,同一地物在两张图上像素位置不同。在共面地面、光轴近似平行、航高远大于基线 时,可用二维仿射(缩放+平移,无旋转交叉项)近似红外到可见光的映射。
6.2 参数换算
物理焦距、像元尺寸换算为像素焦距;主点像素坐标;基线向量(毫米)换算为米;相对航高取负值约定与实现内高度差一致。
6.3 仿射系数推导(实现逻辑)
对可见光像点,地面深度在可见光系约为航高;红外相机有效航高为航高减竖直基线分量。
- 尺度系数:两像素焦距之比,再乘两航高之比(水平基线近零时退化为焦距比)。
- 平移系数:由水平基线在像方引起的偏移,减去缩放后红外主点与可见光主点之差。
得到二乘二对角缩放加二维平移的仿射;反向映射(红外到可见光)用互逆公式,实现里两套系数对应不同重采样方向,方向搞反会导致拉伸到错误象限。
6.4 映射表预计算
对目标宽高每个整数像素,直接算源图浮点坐标,写入浮点映射栅格并落盘。
大图固定仿射时,查表重采样比每点解析求参快一个数量级。
6.5 影像重采样
仿射路径用平台仿射变换;映射表路径用重映射插值;可选统一内存矩阵走加速后端。重复次数参数仅用于性能测试。
6.6 实现边界
不含畸变、地形起伏、相对姿态差;不能替代空三联合标定。适用于粗对齐;精对齐需上层特征匹配。
七、类型五:镶嵌线多景 DOM 融合
7.1 前提
输入已是(或已 warp 到)统一投影的正射栅格。本类不再做共线几何 ,只做像素归属与辐射过渡。
7.2 实现步骤
第一步 --- 并集画布
遍历所有源 DOM,用建议输出算法求各源地面四至,取并集;地面采样间隔取各源中最细者;可选与用户范围相交。创建空的目标数据集,设投影与仿射参数。
第二步 --- 镶嵌线矢量
读面矢量,属性字段标明该面内像素应取自哪幅源名。实现上将矢量几何变换到目标(或源)行列坐标系,供裁剪使用。
第三步 --- 逐源贴图
对每幅源:配置重投影选项,绑定对应镶嵌线几何;设置羽化距离(平台内置沿 cutline 距离融合);将源有效区 warp 进目标画布。找不到对应线划的源可跳过或按全幅处理(由标志控制)。
第四步 --- 羽化与偏移
羽化宽度传给平台的 cutline 混合距离;实现上对线划外扩若干像素,避免羽化带被裁切。
第五步 --- 并行与资源
多线程读源;内存上限限制 warp 缓存。可选建金字塔概览。
7.3 实现者要点
辐射融合委托平台 cutline 混合,不自写 alpha 混合双重循环。几何配准误差大于羽化宽度时仍会出现重影,属镶嵌固有限制。源名与矢量字段必须字符串一致,集成契约要在工程层统一命名规则。
八、辅助:地形内存窗口
动机:类型一中变换器需反复采样地形,整幅加载不可行。
过程:用输出正射地面包络与地形仿射参数求相交窗口行列范围;读出子阵;生成仅覆盖子阵的虚拟栅格元数据;替换变换器所绑定的地形源;必要时重建变换器链。
失败常见原因:地形与正射投影系不一致,相交为空或转换失败------集成时须先统一空间参考。
九、辅助:地面间隔与范围估算
附属于类型一、三,不单独交付产品:
- 地面间隔估算:在像主点附近取微分或射线地面交,估米每像素,供批量统一分辨率。
- 影像地面角点:四角像点反算地面坐标,用于预览范围。
- 平均地形高:角点采样地形或常数,无 DEM 时作迭代初值。
十、总结
| 类型 | 核心落点 | 逻辑链 |
|---|---|---|
| 一、CCE 正射 | 几何内核 + 栅格重投影 | 逆变换与地形迭代 → 变换器链 → 四至与分辨率 → 地形窗口 → 分块写盘 |
| 二、POS 快拼 | 姿态与投影预处理 | UTM 线元素 → 角元素近似 → 假内参 → 类型一 → 经纬度格网 |
| 三、批量 DOM | 表驱动编排 | 读标定 → 平均地面间隔 → 并行 → 每景类型一 |
| 四、双光配准 | 仿射与映射表 | 推系数 → 预计算映射 → 重采样 |
| 五、镶嵌 | 矢量 cutline + 平台融合 | 并集画布 → 线划归属 → 逐源 warp 羽化 |