做过遥感图像处理的人应该都有体会:拿到一景原始影像时,不管它是卫星拍回来的,还是无人机拼出来的,基本都不能直接拿去出图、分类或做定量反演。云影、雾霾、地物颜色发灰、道路线条弯曲、房屋错位……这些乱七八糟的问题如果不处理,后续所有操作都是白费功夫。这就是“遥感图像的校正”存在的意义。简单说,校正就是解决两件事:地物的亮度真不真,像素的位置准不准。
这篇文章我打算把遥感图像校正涉及的几大类内容一次性理清楚。从辐射校正、大气校正,到几何校正、正射校正,再到很多人搜索过的红外图像两点校正、黑电平校正、像差校正、误差校正,以及MapGIS矢量校正这些细分类别。我会结合自己实际处理影像时踩过的坑,尽量用大白话把原理和步骤讲明白,希望不管你是刚接触遥感的学生,还是需要经常处理影像的从业者,都能从中找到能直接上手的东西。
1. 遥感图像校正在对付哪些“失真”
1.1 原始影像为什么不能直接使用
先说一个最容易被忽视的概念:传感器记录的并不是地物真实的颜色或亮度,它只是记录了一个“数字记录值”,也就是DN值。DN值的大小取决于地物反射的太阳辐射、大气的吸收和散射、传感器的响应特性、太阳高度角、观测角度等。换句话说,同一片农田,今天拍和明天拍,不同传感器拍,甚至同一传感器不同角度拍,最后的DN值都不一样。但农田自身的反射率是没有变的。如果直接用DN值去做植被指数或水体提取,结果就会飘,不同时间、不同区域的影像根本没法对比。
再说位置。卫星成像时受到轨道姿态误差、地球自转、曲率、地形起伏的影响,像元对应的地面位置并不一定是它“看起来”该在的位置。山区影像高层建筑物变形、公路穿过河流,这类现象在无校正影像里非常常见。所以校正不是“追求完美”,而是把影像拉回到一个统一、可度量、可比对的基准上。
1.2 校正的框架:辐射、几何、传感器三个层面
我习惯把遥感图像校正拆成三个层面来理解:
- 第一层是传感器本身的问题,包括暗电流、响应非均匀性、镜头像差等。这些属于“仪器误差”,通常在数据生产阶段或者上注到卫星的控制系统时处理,用户拿到的数据大多已经做过基础处理,但偶尔也需要自己再做一步。
- 第二层是辐射层面的问题,把DN值变成有物理意义的辐亮度或反射率,再把大气影响去掉。
- 第三层是几何层面的问题,把像素放到正确的地理位置上。
它们的关系可以看作流水线:传感器校正错误,后面的辐射和几何校正都会带上“脏底子”;辐射校正不彻底,你后面做的分类训练集就是错的;几何校正精度不够,你叠加矢量、做变化检测的结论就不靠谱。每一层都会向上传递误差,这也是为什么我总是强调“校正是一切遥感分析的地基”。
1.3 关于“误差校正”这个词的理解
很多人第一次搜“误差校正”,可能是从MapGIS或者测量数据处理里来的。其实误差校正是一个更广义的概念:只要是利用已知参考值去修正测量或处理结果中存在的偏差,都可以叫误差校正。遥感里的GCP几何校正、辐射定标,本质上都是误差校正的一种。理解的工具是“误差”本身:偏差是系统性的还是随机性的。系统误差可以通过模型消除,随机误差只能统计评估。控制点残差、RMSE、图像配准的平均偏差,这些指标都是在描述误差校正之后还剩多少偏差。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 辐射校正、黑电平校正与红外两点校正
2.1 辐射定标:把DN值变成物理量
辐射定标是整个辐射校正体系里最“机械”但最重要的一步。它的目标是把传感器记录的DN值转换为传感器入瞳处的辐亮度,进一步转换为表观反射率。绝大多数卫星传感器的辐射定标都可以写成线性关系:
L = gain × DN + offset
其中gain是增益系数,offset是偏置系数。这两个系数的来源是实验室定标加在轨定标更新。我经常遇到的新手问题就是拿到Landsat数据不知道去哪找这两个数。以Landsat 8/9 OLI数据为例,MTL文件里直接写明了RADIANCE_MULT_BAND_x和RADIANCE_ADD_BAND_x,分别对应gain和offset。做植被指数或者真彩色合成时,有人直接用DN值计算,做完之后发现NDVI范围不对,就是因为少了这一步定标。
举个例子,某波段DN值为5000,增益是0.012,偏置是-5.7,那么辐亮度就是:
L = 0.012 × 5000 - 5.7 = 54.3 W/(m²·sr·µm)
但要判断地物反射率,还需要再考虑太阳辐射。把辐亮度转为表观反射率经典的公式不复杂,需要用到太阳光谱辐照度、太阳天顶角、日地距离等参数。很多软件如ENVI里面自动帮你算了,但如果你是自己写脚本处理,一定要注意单位:辐照度单位通常是W/(m²·µm),最终得到的反射率是无量纲而且通常在0到1之间的值。大于1往往意味着参数或单位有问题,比如波谱范围不对,或者太阳天顶角用的是度而不是弧度。
2.2 黑电平校正:先扣掉传感器底噪
黑电平这个词来源于电子学里的暗电流。传感器在没有入射光的条件下,由于探测器本身的载流子热激发和电路偏置,仍然会有一个电信号输出。这个信号对应在图像上就是一个不是零的基底值。如果不把它扣掉,会导致暗目标亮度偏高,尤其影响水体、山体阴影这些暗地物的提取。黑电平校正步骤非常简单,就是拿遮光条件下测得的暗响应值,从原始信号中减去:
V_corrected = V_raw - V_dark
但实际应用中要注意一个问题:黑电平并不是固定不变的,它随探测器温度变化而变化。所以很多传感器会周期性采集黑体数据,用实时黑电平做动态扣除。特别是热红外和红外波段,对温度非常敏感,黑电平校正做不做、做得准不准,直接影响到后续温度反演的精度。
2.3 红外图像两点校正:解决探元响应不一致
说到黑电平,就一定会联想到红外图像的两点校正。我第一次接触这个词是在处理红外焦平面阵列数据时,发现即使没有目标运动,画面里也总有一层固定的条纹和斑点。这是因为焦平面每个探元的响应率不完全一致,同一个辐射亮度,不同探元输出的DN值不同。一点校正只能扣掉偏置(黑电平),但每个探元的斜率差异还在。两点校正的思路是:取两个不同温度的均匀黑体,分别测量每个探元的响应,然后按线性模型算出每个探元的增益和偏移量:
V_out(i,j) = G(i,j) × V_in(i,j) + O(i,j)
其中G和O分别为每个像元(探元)的增益修正系数和偏移修正系数。在校正时,每个点的输出都用对应的G和O重新计算,这样就消除了探测器的非均匀性。
两点校正看起来简单,但实操时有个极其常见的坑:选择的两个黑体温度范围必须覆盖目标场景的辐射范围。如果目标发射的温度超出了校正区间,探元响应不再线性,反而会出现校正过后的“蝴蝶斑”。我有一个红外热像仪项目,前期用10℃和40℃两点校正,结果去测200℃以上的物体,图像边缘出现了严重条纹。后来把校正点改为40℃和160℃,情况立刻好转。另外,两点校正也不是一劳永逸的,焦平面响应会漂移,定期要做非均匀性校正更新。
2.4 大气校正:去掉大气这层“滤镜”
如果说辐射定标解决的是传感器端的“仪器读数”问题,大气校正解决的就是大气这层“滤镜”带来的影响。大气对太阳辐射有散射和吸收,同时大气本身也发射辐射,导致传感器接收到的信号里有一部分不是地物来的。这就好比隔着起雾的玻璃看外面的景物,颜色发白、对比度下降。
大气校正的常用方法有这么几类:
- 经验线性法:选一个亮目标、一个暗目标,假设它们在大气中受的退化和加性影响可以用线性关系表达,然后构造回归方程。优点是完全基于影像自身,不需要大气参数;缺点是精度取决于所选目标是否均匀稳定。
- 暗像元法(DOS):利用清洁水面或浓密植被等暗目标,假设这部分像元反射率接近零,观测到的辐射全部来自大气程辐射,然后从整幅影像中减去该值。适合快速粗校正。
- 辐射传输模型法:利用6S、MODTRAN等模型模拟大气过程,反演地表反射率。ENVI中的FLAASH、QUAC,以及欧空局的Sen2Cor,都属于这一类。
用FLAASH做校正时,有几个参数不像软件默认的那样能随便填。传感器高度要用轨道高度,像Landsat是705公里左右,Sentinel-2是786公里左右;地面平均海拔要填影像覆盖区域的平均海拔,不是软件默认的0;大气模型的选择要根据季节和纬度。如果参数乱填,校正后影像会“变绿”或者偏色假得离谱。而且大气校正后影像通常会变暗,这是正常现象,因为去掉了大气向上散射的那部分“虚假亮光”。
2.5 关于NTC热敏电阻的误差校正
可能有人会在搜遥感载荷温度时看到“NTC热敏电阻误差校正”这个词,这里简单说明一下。NTC热敏电阻用来测量传感器或焦平面的工作温度,许多载荷的温控和黑电平校正依赖它。NTC的阻值-温度关系不是线性曲线,直接查表会有量化误差。通常做法是在出厂时做多点温度标定,用多项式拟合或查表插值来补偿非线性。这个内容比较小众,但它提醒了我们一件事:传感器的每一个测量链路都有温度相关的漂移,做一个完整的数据处理链就必须要把这些误差来源逐项扣除。遥感图像的校正在卫星端和数据处理端是闭环的,不是只在客户端做一次就好。
3. 几何校正:让每个像素落在正确的位置上
3.1 几何畸变的来源
几何校正的人气一直很高,因为用户最容易直观感受到的就是“位置不对”。几何畸变的来源大致有这么几个:
- 卫星轨道和姿态的测量误差:卫星的位置速度和传感器指向角度有误差,导致影像整体偏移、旋转、缩放。
- 传感器扫描特性:线阵推扫式传感器和摆扫式传感器的几何模型不同,对应的畸变规律也不同。
- 地球自转:对于卫星影像,地球自转会引起扫描行偏移,形成“平行四边形”畸变。
- 地球曲率和地形起伏:地形起伏在侧视观测时会产生严重的投影差,高层建筑和山体看起来会“倾倒”。
几何校正的核心思想是:用已知地理坐标的地面控制点(GCP)来反推原始影像坐标与地图坐标之间的映射关系,然后对影像重新采样,让每个输出像素都有一个准确的地理编码。
3.2 几何粗校正与几何精校正
几何校正通常分两步走。第一步是几何粗校正,也叫系统几何校正,利用卫星下传的星历参数和姿态数据,把影像修正到标准投影下。这个过程一般由卫星地面站自动完成,用户拿到的L1级数据已经做过这一步。但星历参数本身有误差,而且不考虑地形影响,所以粗校正后的影像还是会有几百米到几十米的偏差。
第二步就是几何精校正,也是大家最常做的操作。思路很简单:在原始影像上选取能准确识别的地面控制点,输入这些点的真实地理坐标;利用这些控制点求解多项式或严格几何模型参数;对全图进行坐标变换和重采样;最后用独立的检查点来验证精度。
精校正的精度和质量几乎完全取决于控制点的选取。我曾经有一次偷懒,只在影像的中央区域均匀选了9个控制点,结果边缘的残差达到了3个像元。这是因为多项式模型在远离控制点的区域外推能力很差,控制点必须分布在整个影像范围内,特别要在四角和边缘加控制点。一般一景中等分辨率影像用20到30个控制点比较稳妥,如果地形复杂或者做高精度拼接,还需要更多。
3.3 控制点选哪些、模型怎么定
控制点选择有几个基本原则:
- 地物特征必须明显且稳定。理想目标是道路交叉口、水库大坝角点、飞机场跑道端头、永不变化的裸岩标志点等。千万别选季节变化大的草地边缘、随潮汐变化的水岸线。
- 控制点在原始影像和参考影像上都必须能清晰分辨。放大了都看不清的目标,别勉强用。
- 控制点要尽量均匀分布,不能集中在一起。残差大时可以剔除个别明显的“坏点”,但要记住一次剔一个,不要连续删掉太多导致控制点数量不够。
坐标转换模型的选择也很关键。一二阶多项式在多数情况下都够用,但地形起伏大的地区必须用带地形信息的正射校正模型。以ENVI为例,做RPC正射校正时使用有理函数模型,然后输入DEM,可以逐像元消除地形投影差。对卫星影像而言,用RPC做正射校正是标准做法;对无人机影像,则多用运动恢复结构+地理配准的流程。
3.4 重采样方法到底怎么选
坐标变换完成之后,原始影像的像素中心并不落在输出网格上,所以需要用重采样算法计算每个输出像元的灰度值。常见的三种方法:
- 最邻近内插:取距离最近的原始像素值。计算量最小,能保持原始光谱值,但会产生锯齿状边缘。
- 双线性内插:取周边4个像素加权平均,边缘平滑,计算量适中,但会引起光谱值轻微恶化。
- 三次卷积内插:取周边16个像素用三次函数加权,边缘更自然,光谱保真度较好,但计算量大。
我的建议是:如果后续要做分类、纹理分析,优先选择最邻近或双线性;如果要做光谱定量分析,比如植被指数或波段比值,就选三次卷积。对于分类后的结果图做重采样,一定要用最邻近,否则会生成不存在的类别混合值。
3.5 正射校正和地形校正
很多人分不清几何精校正和正射校正。简单说,精校正解决的是影像平面位置的误差,而正射校正是将影像逐像元投影到地形上,消除因地形起伏引起的像点位移。在平原地区,正射校正和平面精校正区别不大;但在山地城市,不做正射校正,高楼和山谷的位置投影差可以达到几十个像素。正射校正必须有高精度的DEM,DEM的分辨率和精度直接决定校正后的平面精度。用航天飞机雷达地形测绘任务采集的全球30米DEM做多数中低分辨率卫星影像的正射校正足够,但处理高分辨率无人机影像时,这个精度不够。
4. 像差校正、误差分析与MapGIS矢量校正
4.1 像差校正到底在改什么
像差这个概念最早来自光学设计。任何透镜系统都不可能完美成像,常见的像差有球差、彗差、像散、场曲、畸变和色差。对遥感相机来说,畸变像差最受关注,因为它直接改变像点的几何位置,表现为画面边缘的直线变弯。虽然相机出厂时通过透镜组设计和非球面镜已经做了大量校正,但残余畸变依然存在。
在图像处理端,我们通常用畸变模型来改正。经典的畸变多项式会把理想像点坐标与畸变像点坐标之间的关系写成:
x_ideal = x_distorted + k1·r²·x_distorted + p1·(r² + 2x_distorted²) + 2·p2·x_distorted·y_distorted + …
其中k1是径向畸变系数,p1、p2是切向畸变系数,r是像点到主点的距离。利用棋盘格标定或者恒星成像标定,可以求出这些系数,然后对整幅影像做像素重映射。对于大多数普通用户来说,民用遥感数据在分发前已经做了这类光学校正,所以大家几乎感知不到这一层。但在科研或定制载荷的处理流程里,像差校正是绕不开的,常常跟黑电平校正、非均匀性校正在一块处理。
4.2 误差校正的统计评估思路
在工程实践中,“误差校正”这个词更多出现在测量平差和矢量数据处理中。它的统计本质是:通过已知的参照点,估计出系统误差模型参数,然后从观测数据中扣掉这部分系统误差,剩下的残差越小越好。
做过几何校正后,你自然会关心校正到底好不好。这里我建议每个人都要掌握三个指标:
- 均方根误差(RMSE):所有检查点残差的平方和取平均再开方,反映了整体精度。
- 最大残差:最差的那个检查点的偏差,它决定了校正结果不能用于哪些高精度场景。
- 残差分布:如果残差呈现明显的方向性(全部偏向东南),说明还有系统误差没被消除。
有次我做一景山区影像校正,RMSE看起来只有0.6个像元,但检查点残差矢量全部朝一个方向,后来发现是参考影像本身有坐标系微小偏移。所以看精度指标时,不要只盯着RMSE,要学会画残差矢量图。这个习惯让我少走了很多弯路。
4.3 MapGIS矢量校正的实用场景
有不少人是因为MapGIS才知道“误差校正”这个词。MapGIS里的矢量校正,主要解决的是纸质地图扫描后或者旧矢量数据与标准空间坐标系对不上的问题。说白了,就是把扫描的栅格地图或矢量图层通过控制点变换到正确的坐标框架下,然后再做屏幕数字化或叠加分析。
MapGIS操作流程大致是:先把待校正文件装入编辑子系统;打开“误差校正”功能,创建控制点文件;在“矢量化”或“输入点”中依次采集控制点,理论坐标要么手动输入,要么在标准底图上拾取;然后选择校正模型(常用仿射变换或多项式变换);最后执行校正,生成校正后的新文件。
这里有个经常被忽视的小问题:MapGIS的某些版本中,控制点文件和被校正图层的坐标系定义必须一致,否则校正完的图像在显示时会莫名其妙“飞”出去。而且校正后必须用“保存工程项目”的方式保存,不能只保存校正结果文件,否则配套的投影参数会丢。
4.4 遥感图像标注和校正的关系
这几年遥感AI很火,“遥感图像标注”这个热搜词背后其实藏着一个跟校正强相关的规律:标注数据集的构建应该在校正后的影像上进行。如果你直接用未校正的原始影像做目标框标注,比如船舶检测、车辆检测,那么坐标框对应的经纬度是偏的,后续跟GIS数据融合或做跨影像对比时,框的位置会对不上。另外未校正影像的颜色和亮度都“失真”,标注员会很难判断目标类别的准确边界,特别是在阴影和雾气区域。所以做遥感标注项目,第一步永远是把卫星影像统一做辐射校正、几何校正,甚至在多时相任务里还要做相对配准。
我在实际项目中负责过一批堆场目标标注,数据源是同一颗卫星的数个月影像。一开始只做了粗略的几何配准,没有做辐射归一化,导致同一堆场在不同月份影像中亮度差异非常大,标注员反馈“有时看到的是白块,有时是黑块”。后来我们用校正后的表观反射率影像重做标注,问题立刻消失,标注一致性从78%涨到92%。这件事给我的启发是:校正不只是给算法工程师看的,它直接决定数据标注的质量上限。
5. 实操中的典型问题排查与经验技巧
5.1 校正完反而更差,先别急着换软件
我遇到最多的情况是“为什么我做了辐射校正,影像反而变暗了”“为什么我做了几何校正,道路反而被切断了”。这类问题大多数不是软件的问题,而是漏了某个前置处理器或参数设置错了。下面这张问题速查表是我在实践中整理出来的:
| 问题现象 | 可能原因 | 处理建议 |
|---|---|---|
| 大气校正后影像亮度过低或偏色严重 | 大气模型或气溶胶模型选错 | 重新按纬度和季节选择大气模型,关闭水汽反演或改为固定值 |
| 几何校正后道路断裂、变形严重 | 控制点数量不足或分布不均,重采样方法不当 | 增加边缘控制点,改用三次卷积重采样 |
| 同一区域不同影像叠加后偏差很大 | 参考影像坐标系不一致,未做正射校正 | 统一投影参数,山区必须使用DEM做正射校正 |
| 红外图像出现固定图案噪声 | 两点校正的定标区间不覆盖目标温度范围 | 重新选择合理的高、低温黑体温度 |
| 图像亮边或条纹周期性出现 | 黑电平扣除不彻底或探元增益漂移 | 重新采集暗场数据,更新非均匀性校正系数 |
| 校正后RMSE很小,但叠加底图仍然错位 | 检查点与参考影像本身存在系统误差 | 画残差矢量图,检查是否存在单方向平移或旋转 |
5.2 校正好坏怎么判:视觉和定量结合
每当有同事问我“这个结果能不能用”,我的回答都是:先眼睛看,再算数。视觉检查主要看几样东西:道路和水系是否连续、建筑物边缘是否笔直、不同波段合成后的地物颜色是否符合常识。定量检查则看RMSE、重投影后的坐标重叠程度、光谱曲线是否合理。不要被单个指标迷惑。我见过过多项式阶数过高导致影像局部扭曲但RMSE反而很低的案例,因为高次多项式把控制点“强制拉齐”了,但控制点之间的区域完全放飞。所以多项式阶数能低则低,不要盲目追求RMSE好看。
5.3 我踩过的几个“冷门”坑
最后分享几个我自己踩过、也比较容易复现的坑。
第一个是关于黑电平校正的“时滞效应”。我当时做热红外数据预处理,黑体定标数据是开机后立刻采集的,但实际观测场景是在卫星工作一段时间后才拍摄,探测器温度已经明显升高。用早上的黑电平去扣除下午的图像,导致整幅图像暗目标偏亮。后来我改成根据多个黑体采集时间做插值,动态扣除,问题才解决。黑电平不是一个固定值,它是时间的函数。
第二个是关于两点校正的“区间外漂移”。前面提过,两点校正的线性区间是有限的。当场景温度远高于校正温度区间时,高点定标之后容易在画面中心形成一团一团的伪信号。很多人以为是坏元,其实是定标区间覆盖不足。校正时最好多选几个温度点做分段线性校正,或者用多点定标后插值,能大幅减少这类问题。
第三个是关于MapGIS误差校正的“投影陷阱”。我在做一批早年扫描地形图的矢量校正时,控制点坐标明明是对的,但校正结果却偏离了几万米。排查后发现MapGIS工作空间的坐标系是地理坐标,而控制点文件里给的是投影坐标,两者没有正确对应。这类问题在校正软件里比算法问题更常见,出错时先检查坐标系一致,再去动控制点。
5.4 关于后续扩展的建议
校正这件事并不是一锤子买卖。如果你的项目涉及多期影像对比,可以考虑做相对辐射归一化,把不同时间影像的亮度归一到一个基准期影像上;如果涉及高精度地图更新,那建议直接把几何校正升级为带DEM的正射校正;如果要做深度学习,建议校正完后再做影像增强和标注,这样模型输入的数据才是干净、可解释的。
我个人的感觉是,遥感图像校正听起来像是“很基础很无聊”的预处理,但恰恰是决定一个项目能不能往下走的关键。很多人在分类、目标检测阶段花大量时间调模型,最后发现精度上不去,回头检查才发现当时的几何校正精度就差了10个像素,数据标注坐标也偏了。地基没打好,楼盖得再高也白搭。如果你刚入这个领域,不妨多花点时间把校正这一步做透,后面能省下无数倍的时间。
