ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

遥感数据预处理:实验设计矩阵与QGIS实战(NPP夜间灯光与GF2)

遥感数据预处理:实验设计矩阵与QGIS实战(NPP夜间灯光与GF2) 最近一个做遥感的朋友半夜给我甩过来一版预处理了一半的NPP夜间灯光数据说城区像被墨水泡过噪点比信号还抢眼。我打开一看灰度拉伸和掩膜顺序反了。这种问题我在不同项目里至少见过七八次根子几乎都不在软件操作而在实验设计阶段就没把数据预处理的边界想清楚。这篇文章我就把这两件事放在一起讲先聊实验设计矩阵怎么搭再拆NPP夜间灯光数据和GF2数据在QGIS里的预处理流程。适合刚接触遥感数据处理的研究生也适合被“数据为什么这么脏”折磨到失眠的从业者。你不需要懂编程但看完至少要能回答一个问题你的预处理到底在解决什么误差。1. 内容整体设计与思路拆解1.1 为什么实验设计矩阵要走在数据预处理前面很多人拿到数据就急着开QGIS觉得实验设计是写在开题报告里的面子工程。我一开始也这样直到有一年做城市夜光与GDP关系的分析把变量跑完才发现我的样本里有两个城市在行政区划调整后夜光数据覆盖范围根本不一致。那批数据预处理得再干净结论也是错的。实验设计矩阵这概念翻译成人话就是一张表行是样本列是你打算记录的变量交叉点写清楚每个样本在每个变量上的取值怎么得到。它逼你在碰数据之前先把样本边界、时间粒度、坐标系、空间范围这些事全部定死。做矩阵的时候我习惯在最右侧加两列备注一列写“潜在误差源”一列写“对应预处理动作”。比如样本时间数据源潜在误差源预处理动作城市A2020年NPP夜间灯光云覆盖、杂散光去噪、掩膜水体城市B2020年NPP夜间灯光行政边界漂移重投影、裁剪这看起来简单但它能让你在开始干活之前就把每一处可能出问题的地方标出来。后面所有预处理步骤都是拿这张表当索引而不是靠感觉临时发挥。1.2 数据预处理在实验流程里的位置数据预处理在整个实验流程里不是起点也不是终点。它是连接“原始观测”和“有效分析”之间的一座桥。我通常把流程拆成四段实验设计、数据采集、预处理、建模分析。很多教程会把预处理单独拎出来讲但真正的问题是预处理做多狠、做到哪一步完全取决于实验设计阶段你定义的分析目标。拿NPP夜间灯光数据来说如果你只是看一个城市的整体夜间灯光的年际变化那预处理到辐射定标和去噪就够了。但如果你要做灯光与GDP的空间回归那你还得做重采样、归一化、甚至空间滞后处理。目标没定清楚预处理就没有终点很容易陷入“越处理越干净越干净越失真”的怪圈。我之前带过一个本科生他把一份GF2影像做了七遍滤波最后问我为什么图像看起来比原图还模糊。我问他你滤波是为了什么他说不上来。这就是典型的本末倒置预处理成为目的本身了。2. 核心细节解析与实操要点2.1 数据清洗的第一课区分噪声和信息数据清洗最忌讳的一件事就是把噪声和信息一起干掉。以NPP夜间灯光数据为例这个数据集是美国国家极轨卫星搭载的VIIRS传感器获取的夜间灯光遥感影像。它的原始产品里包含了云层反射的月光、船舶灯光、火光、甚至闪电引起的短暂亮光。这些都属于噪声。但有些噪声比如渔船灯光在渔业监测场景里恰恰是目标信息。所以第一步永远是明确你的研究场景。做城市研究船舶灯光就是噪声必须清除做渔业监测船舶灯光就是核心信号处理逻辑完全不同。我在处理的时候会先看数据附带的辐射定标文件和云掩膜文件把有云像元直接标记为无效然后再做下一步。实操上有一个小经验不要一上来就做中值滤波或均值滤波。滤波窗口一开很多微弱的真实信号也被抹平了。正确做法是先用掩膜把已知噪声像元剔除再对剩余像元做轻度的空间平滑。2.2 坐标系与重投影最容易翻车的环节GF2是国产高分二号卫星空间分辨率可以达到亚米级原始数据多为地理坐标系或特定的投影坐标系。QGIS里最常出现的问题就是你加载了NPP夜间灯光通常以地理坐标系WGS84存储和GF2影像可能是UTM投影然后直接叠在一起分析完全没意识到它们根本不在一个坐标系里。图层一旦发生错位后续裁剪、缓冲区分析、像元统计全是歪的。轻则边缘出现几米的偏移重则整个研究区的像元对应关系彻底错乱。处理这类问题我的强制流程是所有数据统一重投影到研究区所在UTM带重采样方法在面积统计场景用等积投影在距离量算场景用等距投影。这里有一个常见的误解有人觉得WGS84是万能的所有数据都用WGS84不就行了。不是的WGS84是一个经纬度坐标系单位是度不适合做面积和距离的精确计算。你要做面积统计就要用Albers等积投影或UTM不然面积算出来误差很大。表格可以参考这样列分析目的推荐投影理由面积统计Albers等积投影保持面积精度距离量算UTM等距投影保持距离精度全球尺度可视化WGS84地理坐标通用便捷2.3 夜间灯光数据的去噪与掩膜NPP夜间灯光数据的去噪核心就是处理那几个固定的噪声源。第一步云检测。数据产品里通常自带云掩膜文件把云覆盖区域的像元标记出来直接剔除。第二步去除杂散光。VIIRS传感器在某些角度下会受到太阳反射光的影响这些像元的DN值会异常偏高通常分布在轨道边缘。第三步去除生物质燃烧和火山喷发等瞬态光源。这一步要结合火点监测产品来辅助判断。我的习惯是分三步走做完第一步和第二步就把中间结果存档再做第三步。因为每一步的中间结果都可能在后面分析时会用到如果只保留最终结果一旦后面发现处理过度你就要从头重新跑。掩膜这一步我通常会在QGIS里用栅格计算器完成(nightlight 0) AND (cloudmask 0) AND (firemask 0)这个表达式的意思是保留灯光值大于0、且云掩膜标记为无云、且火点掩膜标记为无火的像元。剩下的像元全部置空。2.4 QGIS中GF2数据预处理的四个步骤GF2的数据预处理我在QGIS里跑过很多遍总结下来就四个步骤辐射定标、大气校正、正射校正、融合。辐射定标这一步是把影像的原始记录的灰度值转换成地表反射率或辐射亮度值。GF2数据包里通常有定标参数你可以用Rasterio或GDAL的命令行工具来跑也可以在QGIS的Semi-Automatic Classification PluginSCP插件里找到对应的工具。SPC插件里甚至有专门的卫星传感器列表选择GF2后会自动带入对应定标参数省掉不少手填的麻烦。大气校正的目的是把大气散射和吸收造成的影响去掉。SCP插件支持DOS1暗目标减法方法不需要输入太多参数适合大多数地表研究。但如果你研究水体或者做定量遥感分析建议用更严格的6S模型或FLAASH那需要你额外准备大气剖面数据。正射校正解决的是地形起伏引起的几何畸变问题。GF2数据如果只做RPC校正在山区效果不够好最好结合DEM数据做正射校正。QGIS里可以通过处理框架调用OTBOrfeo ToolBox的对应工具实现。最后是融合。GF2有2米分辨率的全色波段和8米分辨率的多光谱波段融合就是把两者合在一起得到2米分辨率的多光谱影像。常用的融合方法有Pansharpening我在QGIS里可以直接用Orfeo ToolBox的Pansharpening工具效果稳定。3. 实操过程与核心环节实现3.1 从零开始的一天NPP夜间灯光数据预处理的完整流我在拿到NPP夜间灯光数据后第一件事是查看数据说明文档确认版本、时间、坐标系和波段含义。这一步很多人会跳过直接导入导致后面永远搞不清楚某个波段到底代表什么。确认无误后我会在QGIS里建立一个工程分层管理原始数据、中间数据、掩膜数据和最终数据。QGIS的图层分组功能加上文件命名规范能避免后期你根本找不到某个中间结果。详细流程如下安装QGIS版本建议用3.x LTS版。安装半自动分类插件SCP用于影像预处理。加载数据把NPP夜间灯光的tif文件拖入QGIS。查看坐标系右键图层 → 属性 → 信息确认坐标系。如果坐标系是WGS84但研究区面积较大或需要精确面积统计重投影到Albers等积投影。加载云掩膜、火点掩膜用栅格计算器生成有效像元掩膜。应用掩膜将有效像元掩膜与原灯光数据相乘得到去噪后的数据。按行政边界裁剪出研究区域。导出为GeoTIFF保存到中间数据文件夹。3.2 GF2数据在QGIS里的实操走查GF2数据通常是压缩包里面包含多光谱影像、全色影像、RPC文件、元数据XML。拿到后解压然后在QGIS里通过“数据源管理器”加载注意选择正确的子数据集不要加载成缩略图。安装SCP插件后进入SCP → Preprocessing → Landsat/ Sentinel/其他卫星的预处理面板。这里虽然默认是Landsat和Sentinel但SCP支持自定义传感器你可以手动填入GF2的定标参数。如果你的GF2数据已经完成辐射定标这一步可以跳过。大气校正我会选择DOS1原因很简单GF2的元数据文件里没有足够的大气参数供FLAASH使用DOS1只需要影像本身就能完成而且对地表反射率变化明显的场景效果尚可接受。正射校正和融合这两个步骤我更多时候是直接用OTB工具来处理。OTB在QGIS的处理框架里已经集成不需要单独安装。融合参数选择Gram-Schmidt方法它在保留光谱信息方面优于简单的Brovey方法。3.3 批处理不要每个样本都手动跑一遍做实验设计矩阵里假如有10个城市、30期影像那就是300个文件。如果每个文件都手动跑一遍预处理流程你大概会在第三天开始怀疑人生。QGIS的处理框架Processing Toolbox里可以把栅格计算器、裁剪、重投影连成一个模型然后一键批量执行。QGIS的Graphical Modeler就是干这个的。你只需要把流程搭好设置输入输出参数然后批量选择文件执行。我强烈建议你花半小时把模型搭好哪怕你只处理一个文件。因为模型搭好之后换一套数据就能直接复用成本是固定的收益却是边际递增的。模型里我一般会放这几个工具重投影、按掩膜裁剪、栅格计算器去噪、栅格转换数据类型转换。输入设为“文件列表”输出设为按文件名加后缀自动生成。3.4 验证预处理结果好不好不看图看数据很多新人判断预处理效果靠“肉眼看得顺不顺眼”。这个直觉可以用于初筛但不能作为最终标准。我通常会做三类验证第一类是像元统计验证。用QGIS的Zonal Statistics工具统计每个研究区内有效像元的数量、均值、标准差。如果某个区域的有效像元数量异常低那很可能掩膜过度需要回头检查。第二类是空间自相关验证。对于夜间灯光数据有效像元分布应该具有空间连续性如果出现大量孤立像元说明噪声没有被清理干净或者你把真实信号当成噪声剔除了。第三类是时间一致性验证。同一研究区不同年度的数据均值变化应平滑。如果某一年突然断崖式跳变大概率那一年数据预处理出了问题而不是城市真的瞬间熄灯。4. 常见问题与排查技巧实录4.1 灯光数据大面积黑洞怎么办这个问题我在处理NPP夜间灯光时遇到过好几次。表现是某个区域在预处理后灯光像元全部变成空值图像像被挖掉一块。排查步骤先看掩膜文件确认这个区域是否被云掩膜或火点掩膜大面积覆盖。如果是说明那一天的观测确实受到云影响需要更换时间窗口的数据。如果不是再看坐标系是否对齐。掩膜和数据之间只要坐标系不一致裁剪出来的区域就会错位看起来就像黑洞。如果前两项都没问题检查栅格计算器中使用的波段号是否写对了。我在实际项目里遇到这种问题70%是坐标系错位造成的20%是云覆盖10%是波段写错。4.2 GF2影像融合后颜色发灰怎么回事GF2影像融合后颜色发灰最常见的原因是全色波段和多光谱波段之间的配准不够精确导致融合算法没能正确地将高分辨率空间信息注入到光谱波段。解决方法是在融合之前先对多光谱影像和全色影像做一次图像配准。QGIS里可以用Georeferencer工具以全色影像为基准手动选几个控制点把多光谱影像微调对齐。另一个原因是辐射定标不充分。定标参数没填对反射率计算出来就偏低融合后整体会偏灰。检查一下元数据里的定标参数CF和偏移量Offset是否填入了SCP插件对应的位置。4.3 预处理结果在QGIS里正常导出后在ArcGIS里错位这类问题通常发生在WGS84和Web Mercator之间切换的时候。QGIS默认显示可以是任何坐标系但导出时如果不指定输出坐标系工具会默认按图层原始坐标系导出。你在ArcGIS里打开时ArcGIS通常会把所有图层显示成数据框的坐标系如果数据框是WGS84而你的导出结果是UTM那么显示上就会出现偏移。我的建议是导出数据时在导出对话框里有明确指定坐标系选项直接指定为最终分析的坐标系。不要让软件默认决定。4.4 时间序列分析时某一期数据突然异常我有一回做2015到2021年的NPP灯光数据分析2020年那期数据均值比前后两年都低。排查后不是因为城市场景变化而是那年数据源换成了新的处理版本辐射定标数值有系统差异。排查方法查看元数据里的Product Version字段。如果版本换了跨版本的数据不能直接放在一起做时间序列比较。只能做相对标准化处理或者单独处理那一期的数据将其校准到与相邻年份一致的水平。5. 工具选型解析与心得5.1 QGIS还是ArcGIS做NPP夜间灯光数据和GF2数据预处理我首选QGIS。原因有三个第一QGIS是免费开源的不需要担心授权问题。第二QGIS在Linux、Windows、macOS上都能跑同样的模型可以到处复用。第三QGIS的Processing框架和OTB集成性很好做批处理比ArcGIS顺手很多。但QGIS并不是万能的。如果你需要做非常复杂的空间统计或依赖ArcGIS的生态工具那ArcGIS会更合适。我在实际项目里是用QGIS做数据预处理然后导出结果到R或Python里做统计分析。5.2 常用插件清单我用到的插件不多但每个都很能打Semi-Automatic Classification PluginSCPQuickMapServicesZonal StatisticsOrfeo ToolBoxProcessing里内嵌Data PlotlySCP覆盖影像分类和预处理QuickMapServices解决底图加载Zonal Statistics做统计OTB做高级影像处理Data Plotly用来快速画图检查数据分布。5.3 参数设置经验表场景参数选择理由NPP去云云掩膜阈值0保留无云像元重投影到Albers标准纬线25°和47°适合中国区域面积统计GF2融合Gram-Schmidt方法光谱保真度好大气校正DOS1方法参数需求少适合GF26. 最后想说的几句大实话数据预处理这东西做得好了你感觉不到它的存在因为它只是让数据变得更接近真相。做得不好它也不会直接报错只会让你的分析结果悄悄偏离带来一种“看似合理、实则靠不住”的错觉。我踩过最大的坑就是觉得预处理是技术活做得好坏全看操作熟练度。后来发现真正决定预处理质量的是实验设计阶段是否把误差来源想清楚。你连哪些信号有用、哪些噪声该去都没想明白再熟练的操作也只是在给错误答案提速。如果你现在正准备入手一个涉及遥感数据的项目先别急着打开软件。花半天时间把实验设计矩阵列出来把每种数据源可能的噪声源列出来再规划预处理流程。这半天省下来的可能是后面三个月的返工时间。另外所有预处理中间结果建议都保留一份。有一次硬盘坏了我丢了一个月的中间数据那感觉比论文被拒还难受。无论你的数据本身多宝贵一个良好的备份习惯才是你在数据世界里最后的安全绳。希望这份经验能让你少走一段我走过的弯路。
返回列表