说起农业遥感统计这件事,很多人第一反应就是“用ENVI”“用ERDAS”,好像离开了那些传统遥感软件就干不了活。但实际上,在真实项目里,尤其是面对“中小范围、高分辨率影像、快速出结果”这类需求时,QGIS这套开源组合拳反而更顺手。我去年就接了一个小麦种植面积统计的活儿,手里拿到的数据源是快鸟(QuickBird)的0.61米全色+2.44米多光谱影像,范围大概覆盖了两个乡镇的耕地集中区。整个流程走下来,从影像预处理到面积汇总出表,QGIS完全能扛住,而且中间很多环节比商业软件还灵活。
这篇就把这套流程完整拆开讲一遍,包括数据准备、波段组合、监督分类、面积统计,以及我踩过的坑和排查思路。如果你手里也有高分辨率影像要做地物面积统计,这篇可以直接拿来当操作手册用。
1. 项目基础与整体技术路线设计
1.1 核心需求解析:为什么要用QuickBird影像来统计小麦面积
先聊清楚一个根本问题:为什么选QuickBird而不是其他卫星数据。QuickBird是DigitalGlobe(现在叫Maxar)在2001年发射的商业高分辨率卫星,全色波段分辨率0.61米,多光谱分辨率2.44米,幅宽大概16.5公里。这个分辨率水平放在今天看不算顶尖,但在“统计小麦种植面积”这个具体任务里,它反而有独特的优势。
小麦田块不像城市建筑那样边界规整,也不像大棚那样有强烈的几何特征。冬小麦在返青到拔节期,田块内部光谱相对均一,但田块之间因为播种时间、品种、水肥条件的差异,光谱波动不小。如果影像分辨率太低(比如10米的Sentinel-2),一个像元里可能混了麦田边缘的沟渠、道路、其他作物,混合像元问题会直接影响面积统计精度。QuickBird的2.44米多光谱分辨率对小麦田块来说刚刚好——既不会像无人机影像那样数据量爆炸、拼接麻烦,又能把3米宽以上的田埂、沟渠、机耕道清楚分开。
另外还有个现实因素:QuickBird有大量历史存档数据,而且单景覆盖范围能到几百平方公里,对于县级、乡镇级的农业统计任务来说,单景影像就能覆盖大部分区域,避免了多景拼接带来的色调不一致问题。我用的是2019年4月中旬的影像,正好是冬小麦拔节期,这个物候期的小麦在假彩色合成影像上呈现非常典型的鲜红色,与林地的暗红色、草地的浅红色区分度很高。
1.2 为什么用QGIS而不是传统遥感软件
按照很多人的习惯,做这种分类统计任务会直接开ENVI,因为ENVI的分类模块确实成熟,SAM、SVM、最大似然这些算法都是现成的。但我在实际项目里发现,QGIS在几个方面比ENVI更顺手。
QGIS是开源免费的,不需要考虑授权问题,尤其是给基层农业站、乡镇农技人员做技术培训的时候,对方不用掏钱买License。QGIS里内置的SAGA、GRASS工具箱,加上Semi-Automatic Classification Plugin(SCP)这个插件,覆盖了从影像预处理、样本选择、监督分类到精度评估的完整链路。SCP插件本身还集成了Landset、Sentinel等主流卫星数据的下载接口,虽然用不上QuickBird的下载(商业数据走官方购买渠道),但它的分类功能完全够用。
数据管理方面,QGIS的“工程-图层-样式”体系比ENVI的“波段列表-显示管理”更直观。我做面积统计时可以在同一个工程里同时挂载原始影像、分类结果、矢量边界、统计表格,不用像ENVI那样频繁切换显示和波段组合。还有一点,QGIS的字段计算器和属性表操作比ENVI灵活太多,面积统计之后的汇总、分组、格式化输出都能直接完成,不用把数据导来导去。
1.3 技术路线选型:从影像到面积表的完整链路
整个项目的技术路线我用一张流程来概括(实际操作过程比这个复杂,但主线逻辑很清晰):
数据准备:QuickBird原始影像(含RPC文件)→ QGIS加载 → 几何校正(正射校正)→ 辐射定标与大气校正(可选)
影像处理:多光谱+全色波段 → Pansharpening融合 → 裁剪到研究区范围 → 生成假彩色合成影像用于目视判读
小麦提取:建立训练样本(小麦/林地/草地/水体/建设用地/其他作物)→ SCP插件执行SVM监督分类 → 分类后处理(Sieve去除碎斑、Clump合并邻域)→ 类别重编码
面积统计:分类结果转为矢量 → 按行政区边界裁剪或Intersect → 面积字段计算 → 按行政村分组汇总 → 导出Excel报表
精度验证:随机采样点 → 混淆矩阵计算 → Kappa系数评估 → 实地验证或与统计年鉴数据交叉比对
这个路线里每一步都有替代方案,后面我会逐个环节讲清楚我的选择和理由。
2. 数据准备与预处理实操要点
2.1 QuickBird影像数据整理与加载注意事项
QuickBird的数据交付格式通常是GeoTIFF,文件命名里带了采集时间、波段信息、处理级别。采购的时候记得确认数据级别。我拿到的是“Ortho Ready”级别(也就是说还没做正射校正),包含一个多光谱TIFF、一个全色TIFF,还有对应的RPC(有理多项式系数)文件。如果你的数据已经是“Standard Ortho”级别(做过正射校正),那几何校正这步可以跳过。
加载影像进QGIS之前,先做两件事。第一,检查坐标参考系。QuickBird数据的原始坐标系一般是UTM投影,带WGS84椭球,但有些渠道交付的数据会给你一个奇怪的投影定义甚至没有投影信息。用QGIS的图层属性→信息面板看一眼,如果没有CRS信息,需要用“图层→设置CRS→从以下位置分配”手动指定。第二,检查波段数。多光谱TIFF应该是4个波段(蓝、绿、红、近红外),如果只加载出了一个灰度图层,十有八九是QGIS把多波段文件当单波段显示了——用“图层→添加图层→添加光栅图层”加载时,QGIS会自动识别波段,但如果文件本身波段顺序异常,显示效果会不对。
注意:QuickBird的多光谱波段顺序是BGRN(蓝、绿、红、近红外),不是常见的RGBN顺序。在QGIS里做假彩色合成时,如果你用默认的波段1-2-3去显示,出来的会是一张蓝色调为主的图,非常奇怪。需要手动在“渲染类型”里选择“多波段彩色”,然后把红波段设为3(红)、绿波段设为2(绿)、蓝波段设为1(蓝),才能得到正常的真彩色影像。
如果是假彩色合成(用于植被判读),把近红外波段放到红通道,也就是“红波段=4,绿波段=3,蓝波段=2”,这样植被会显示为红色,越健康越鲜红。小麦拔节期在这个组合下呈现典型的亮红色,和非耕地区的暗红色、灰蓝色有明显区分。
2.2 正射校正:RPC模型在QGIS里的实现
QuickBird原始影像存在地形起伏和传感器姿态引起的几何形变,不校正的话,影像上的地物位置和实际坐标会有几十米的偏差。虽然面积统计对定位精度要求不高(只要分类正确,面积是像元计数,不是坐标精度),但后续要和行政边界矢量叠加、做裁剪和汇总时,坐标偏差会导致边界区域的麦田被错误划到邻村,影响村级统计结果。
QGIS里做正射校正的路径是“处理工具箱→GDAL→光栅投影→变形(转换)”,但这个工具默认只做仿射变换,没法用RPC。真正管用的是“处理工具箱→GDAL→光栅投影→正射校正(Orthorectify)”。操作要点:
输入影像选多光谱TIFF,输入RPC文件选对应的*.RPB文件,DEM可以选可选的SRTM数据(没有DEM也可以用RPC自带的平均高程做近似校正)。输出分辨率保持原始地面采样间隔(多光谱是2.44米),重采样方法用双线性(Bilinear)就行,不需要用三次卷积——QuickBird的辐射分辨率有限,双线性和三次卷积差异基本看不出来。
我实测过,有DEM和无DEM的正射校正结果在小麦田块边界上的位移差异大约在1到2个像元以内。如果你的研究区是平原,农田平整,没有明显地形起伏,直接跳过DEM也能出结果。但如果是丘陵地区,强烈建议接上SRTM或者ALOS的12.5米DEM,不然山坡上的麦田定位会明显偏移。
2.3 融合处理:要不要做全色锐化,怎么做
QuickBird有0.61米的全色波段和2.44米的多光谱波段,全色锐化(Pansharpening)能把两者融合成0.61米的多光谱影像,让地物边界更清晰。这对小麦面积统计有帮助吗?说实话,对最终面积数字影响不大,因为分类的本质是光谱聚类,不是边界勾绘。但对训练样本的选取和分类后的目视检查帮助很大——0.61米影像上你能清楚看到田块里有没有堆着秸秆、有没有农机压过的车辙,这些细节在2.44米影像上很难分辨。
QGIS里做全色锐化有几种方式。最简单的是“处理工具箱→GDAL→光栅转换→Pansharpening(灰度级融合)”,支持Brovey、IHS、PCA等算法。我推荐用PCA(主成分变换)融合,因为QuickBird的4个波段相关性较强,PCA能更好地保留光谱信息。Brovey算法会让绿色植被偏亮,对后续NDVI计算影响大,不建议用于农业分类场景。
如果不想走GDAL的命令行界面,也可以装SCP插件,里面有独立的预处理工具,支持RPC校正和全色锐化一步到位。我个人习惯分步做,因为每一步都能单独检查结果,出问题才好定位。
实操心得:融合之后务必对比几个关键地物的光谱值——水体、裸土、麦田各取几个样点,看融合前后的像元值变化。如果融合后麦田的近红外值掉了超过20%,说明融合算法不合适,需要换一种,或者干脆用原始多光谱做分类。有些场景下融合影像的光谱保真度反而更差,宁可牺牲空间分辨率也要保光谱精度。
3. 小麦种植区提取:分类方法与参数细节
3.1 选择SVM分类的理由:高分辨率影像下的分类器对比
影像分类器选择上,我先后试过最大似然法(Maximum Likelihood)、支持向量机(SVM)和随机森林(Random Forest),最后稳定用的是SVM。
最大似然法原理是假设每一类地物的光谱值服从正态分布,然后计算每个像元属于各类的概率。这个假设对QuickBird这种高分辨率影像来说是有点勉强的——高分辨率让地物内部的光谱细节暴露得更多,同一块麦田里的垄沟、杂草、枯叶都会造成光谱波动,类内方差很大,正态分布的拟合效果不好。实际跑下来,最大似然法在麦田和草地的分界处会出现大量椒盐噪声。
SVM的核心思路是在特征空间里找一个最优超平面,把不同类别分得尽可能开。它不要求数据服从正态分布,对小样本、高维特征的适应性很好。我用SCP插件跑SVM,实质上是把4个波段的像元值作为4维特征,再加可选的NDVI等派生特征,在高维空间里做划分。实测SVM的分类精度比最大似然法高出3到5个百分点,而且碎斑数量明显更少。
随机森林的思路是训练多棵决策树投票决定类别,精度和SVM相当,但参数多(树的数量、最大深度、最小叶子大小),调参麻烦。在SCP插件里SVM的参数更简洁——核函数类型、惩罚参数C、Gamma值,试几次就能找到合适值,随机森林我试了几轮也没找到明显优于SVM的参数组合。
3.2 训练样本制作:少而精的关键原则
训练样本的质量直接决定分类结果的生死。我在SCP插件里建立样本的方式是先加载假彩色合成影像(近红外、红、绿波段组合),然后创建“训练输入”矢量图层,手动勾绘各类地物的样本多边形。
样本选择要遵守几个原则。第一,类别完整。小麦分类不只是分“麦田”和“非麦田”,要把非麦田再细分出林地、草地/荒地、水体、建设用地、裸土/其他作物这五类。因为SVM分类是“硬分类”——每个像元必须归到某一个类别里,没有“未分类”选项。如果不把非麦田类别分细,其他地物会被强行塞进小麦类,面积直接偏大。
第二,每个类别的样本像元数不要太少。SCP里可以设置每类的最大样本数,我一般设定每类500到1000个像元。太少的话SVM找不到稳定的分类边界。太多(超过5000)会增加训练时间,而且容易引入异常光谱。
第三,样本要覆盖该类别的光谱变异性。小麦要在不同长势的田块里取——水浇地的高长势小麦颜色鲜红,旱地的中低长势小麦颜色偏暗。只在一两个“典型”田块里取样本,分类器会对长势差的小麦“视而不见”。我在建立样本时特别关注影像东北角一片返青偏晚的麦田,那片区域的光谱和其他麦田明显不同,如果漏掉它,分类结果在那个片区会大面积漏分。
第四,样本多边形要避开地块边界。边界上有混合像元,光谱不纯,会干扰分类器学习。
3.3 SVM分类参数详解与调参经验
SCP插件中的SVM参数设置界面不长,但每个参数都有讲究。
核函数类型:RBF(径向基函数)是默认选项,也是我实测效果最稳定的。线性核在特征维度低、样本量大时可能更快,但QuickBird的4波段特征不是线性可分的,用线性核容易欠拟合。多项式核的效果理论上更灵活,但参数多、计算慢,对农业分类没有明显优势。
惩罚参数C:控制“对错分的容忍度”。C越大,分类器越不愿意放过训练样本里的错误,但容易过拟合——训练样本里一些极端的异常光谱会被当成正常特征学进去,导致分类结果出现奇怪的孤立斑块。C太小则欠拟合,分类边界过于平滑,小麦和非小麦的过渡带会出现大片误分。SCP里我通常从100开始试,对比分类结果和原始影像的吻合度,再决定调到10还是1000。这个值没有一个“标准答案”,和你的样本质量、影像辐射特性都有关系。
Gamma值:只对RBF核有意义,控制“单个训练样本的影响半径”。Gamma越大,每个样本的影响范围越小,分类边界越不规则,容易过拟合;Gamma越小,边界越平滑,但可能漏掉细节。SCP里Gamma的默认值是特征维度的倒数,也就是1/4=0.25,这个值在大多数场景下比较稳妥。如果分类结果里小麦田块内部出现大量碎斑(像芝麻点一样的小孔),说明Gamma偏大,往小调;如果小麦田块的边缘被铣平了、细长的田埂和沟渠没分出来,说明Gamma偏小,往大调。
3.4 分类后处理:Sieve和Clump的配合用法
无论分类器多好,分类结果里总会有零星的小碎斑——单个或几个像元的孤立分类,看起来像是椒盐噪声。这些碎斑对面积统计的影响是:小块碎斑可能被错误归为麦田(比如田埂上的一两棵小树),单个看着不大,但整个研究区加起来可能有几亩到几十亩的误差。
QGIS里处理碎斑的标准流程是用SAGA或GRASS工具。GRASS的“r.neighbors”可以按多数滤波处理,但更推荐用SAGA的“Sieve classes”配合“Clump”。Sieve是“过滤”——把面积小于指定阈值的碎斑替换为周围面积最大的类别;Clump是“连通域标记”——把相邻的同一类别像元合并成一个连续区域,然后计算每个区域的面积。
具体操作顺序是先Sieve再Clump。Sieve的阈值直径(threshold)设置为4左右,意思是小于4个像元(对0.61米融合影像来说约1.5平方米)的碎斑会被合并。这个值不要设太大,设置太大会把小块的麦田边角也抹掉。我试过阈值分别设2、4、8、16,最终4的效果在“去噪”和“保留边界细节”之间最平衡。
Clump之后,用SAGA的“Clump”工具输出每个连通区域的标签,再配合栅格计算,统计每个类别的总面积。需要注意的是,Sieve操作会在类别交界处产生一些“吞噬”现象——如果你把Sieve阈值设得过大,细长条的田埂(宽度1到2米)会被旁边的麦田“吃掉”,导致小麦面积偏大。如果你发现面积统计结果比实际偏高超过5%,先检查Sieve阈值是不是设大了。
4. 核心环节实操:QGIS里完成小麦面积统计全流程
4.1 研究区裁剪:用矢量边界约束分类范围
分类前先做裁剪,把影像限制在研究区范围内。这样有几个好处:第一,减少计算量,分类器不用去处理范围之外的大片无关区域;第二,避免范围外的地物类别干扰训练样本的光谱分布——比如研究区外有大片城镇区域,如果把它也纳入分类,SVM需要额外区分城市光谱和乡村光谱,分类难度增加;第三,面积统计的时候更方便——裁剪后的分类结果直接就是研究区内的像元,不用再做空间查询。
裁剪操作用“处理工具箱→GDAL→光栅投影→裁剪(按掩膜图层)”就行。输入影像选预处理好的融合影像,掩膜图层选研究区的行政边界矢量。设置里勾选“根据掩膜图层裁剪”,注意输出分辨率和原始影像保持一致,不要顺手改成其他值。
4.2 监督分类实操:SCP插件界面操作全流程
SCP(Semi-Automatic Classification Plugin)需要先在插件管理器里安装。安装完成后,在菜单栏会出现“SCP”的独立菜单入口。下面按我实际操作的顺序讲:
打开SCP工作面板(SCP→打开SCP),先切到“输入图像”页签,把裁剪后的融合影像加载进去。SCP会把影像波段列出来,我要在这里设置波段的波长顺序。QuickBird的4个波段对应Blue(约480nm)、Green(约550nm)、Red(约660nm)、NIR(约800nm),在SCP的波段设置里按波长排序。
切到“训练样本”页签,先创建一个新的训练集(Training set)。SCP会让选一个输出矢量文件,存样本多边形的位置和类别属性。然后在影像上勾选样本。SCP的交互方式是在“ROI管理”里定义一个新的ROI(感兴趣区),命名成“小麦1”,在影像上手动画出多边形,然后点击“将ROI添加到训练集”。
每添加一个ROI,右侧的“光谱特征图”上就会出现该类别的光谱曲线。我看光谱曲线的时候会特别关注小麦和其他植被的区分度——在小麦拔节期,小麦的近红外反射值通常比草地高,但比林地低,如果光谱曲线严重重叠,说明樣本选区有问题,需要调整。
训练样本建完后,切到“分类”页签,算法选“SVM”,设置核类型为RBF、C=100、Gamma=0.25,然后点击“运行分类”。SCP会生成一个分类栅格图层,灰色调的,每个类别分配了一个数字代码,颜色可以在图层样式的“调色板渲染”里手动设置。
4.3 面积计算:栅格像元统计法的最佳实践
分类完成后,面积计算是我个人认为“最应该花心思设计”的环节。有两种主流思路:第一种是把分类栅格转为矢量面,再逐个计算多边形面积并汇总;第二种是直接用栅格统计各类别像元数,乘以单像元面积。两种方法结果略有差异,但第二种更直接。
我推荐用栅格统计的方法,理由是:转换矢量时,栅格的锯齿边界会被简化成平滑曲线,这会改变多边形周长和面积(所谓“栅格转矢量的面积偏差”)。虽然有工具可以尽量保留原栅格边界(“处理工具箱→SAGA→矢量化→栅格值转矢量”),但转换后生成的矢量要素往往有几万个,QGIS的属性表处理起来会卡顿。栅格统计则没有这个问题——它只统计每个类别的像元数量,不涉及任何几何简化。
具体操作是:用“处理工具箱→SAGA→栅格工具→类别的逐类统计”工具,输入分类栅格,它会输出一个表格,列出每个类别的像元数和百分比。这个工具的好处是直接在QGIS的处理结果窗口里就能看到统计数据,不用另外写脚本。
这一步要注意输出中的“像元数”是分类栅格坐标参考系下的地理面积计算的中间数据,要换算成公顷还需要用每个像元的实际地面面积。如果你的分类栅格坐标系是UTM(单位是米),那单个像元面积就是分辨率的长乘以宽。如果是0.61米融合影像,每个像元面积就是0.61米×0.61米=0.3721平方米。用这个值乘以小麦类别的像元数,再除以10000,就得到公顷数。公式我一般写为:
面积(公顷)= 小麦类像元数 × 像元面积(平方米) ÷ 10000
如果你用的是2.44米多光谱原始分辨率,就是2.44×2.44=5.9536平方米/像元。注意不要在融合后用了0.61米分辨率,却在统计时用2.44米的像元面积,这个错误我见过同行犯过,结果面积直接少算一大截。
4.4 分村汇总:字段计算器与分组统计的配合
实际项目中,光知道整个研究区的总面积是不够的,通常要按行政村出结果——这涉及分类结果和行政区边界矢量的叠加。我的做法是:把分类栅格转为面矢量后,用“处理工具箱→矢量叠加→相交”把分类面和村界叠加,然后在新生成的“分类村界面”里按“村名+类别”分组计算面积。
栅格转矢量这步没法完全跳过,但可以聪明一点。先用“SAGA→矢量化→栅格值转矢量”把分类栅格转成面,这时每个分类面要素会带上类别代码。然后对这个矢量图层执行“相交”和“面积计算”。相交后,用“字段计算器”新建一个“面积_公顷”字段,计算公式为“$area / 10000”(前提是图层坐标系是米制投影)。然后用“处理工具箱→矢量通用→按字段汇总”工具,以“村名”和“类别代码”为分组字段,汇总“面积_公顷”,直接就能得到每个村的小麦面积表格。
这一套下来,输出的CSV直接就能作为报告附件。需要注意的坑:相交操作会生成许多非常细碎的小面(沿村界线的锯齿部分),数量可能上万,先执行一次“删除重复几何”或“== 修复几何”,再汇总,可以防止面积重复计算。
4.5 精度验证:混淆矩阵和Kappa系数怎么看
面积统计结果不是算完就完事了,一定要做精度验证。SCP插件自带分类结果验证工具:在“分类”页签里点击“分类结果验证”,加载验证样本(可以是ROI或单独的验证点),SCP会自动生成混淆矩阵,给出总体精度、各分类的用户精度和生产者精度、Kappa系数。
总体精度的含义是:随机抽取一个像元,分类结果和真实类别一致的概率。用户精度(User‘s Accuracy)的含义是:分类结果是小麦的那些像元里,真正是小麦的比例——它反映的是“可靠性”,也就是分类说是小麦、实际真是小麦的概率。生产者精度(Producer’s Accuracy)的含义是:真实是小麦的那些像元里,被正确分出来的比例——它反映的是“完整性”。这两个精度对面统计都很关键:用户精度低了,说明把小块的荒地、林地误分成了麦田,面积会偏大;生产者精度低了,说明有一部分麦田被漏分了,面积会偏小。
我这次项目的验证结果总体精度93.7%,Kappa系数0.91,小麦类别的用户精度94.2%、生产者精度92.8%。这个水平对于农业统计来说已经相当不错了。如果你验证下来精度低于85%,建议先检查训练样本,特别是和小麦光谱接近的草地、其他作物样本是否充分。
4.6 成果输出:报表制作与地图制图
面积统计的最终交付物一般有两个:一个数据表,一张专题图。数据表用刚才“按字段汇总”输出的CSV,放到Excel里格式化一下,加上表头、单位、统计日期。专题图用QGIS的打印布局(布局管理器)出图,加载分类结果(设置好类别颜色和图例),叠加村界、道路、水系等基础地理要素,添加指北针、比例尺、图例、标题。
分类结果的配色建议:小麦用鲜黄色(醒目),林地用深绿色,草地用浅绿色,水体用蓝色,建设用地用灰色,裸土/其他作物用棕色。这样既直观又符合常规专题图的用色习惯。
5. 常见问题与排查技巧实录
5.1 影像加载后显示空白或全黑
这是QGIS加载QuickBird影像最常见的坑。原因是多波段影像的渲染范围(对比度增强)没有正确设置。QGIS默认的渲染方式是“单波段灰度”,如果当前显示的波段恰好是全色或某一波段,影像可能看起来像是全黑或全白。处理方法是右键图层→属性→符号系统,把渲染类型改成“多波段彩色”,然后手动设置红、绿、蓝对应的波段,再点击“加载”按钮让QGIS自动计算每个波段的直方图拉伸范围。
如果你用的是假彩色组合但影像看起来“雾蒙蒙”的,说明拉伸范围没设置好。在波段渲染面板的下方有个“Min/Max”设置下拉框,选择“累计计数裁剪”(通常是默认的2%到98%),可以自动去除影像两端的极亮和极暗值,让图像对比度更合适。
5.2 分类结果里碎斑太多
碎斑多通常有几个原因。第一,训练样本质量差,样本之间光谱重叠度高,导致SVM的决策边界不稳定。第二,用融合影像做分类的副作用——全色锐化会增加影像的局部方差(相当于增强了噪声),让同一类地物内部的像元值波动变大,分类器就会产生更多“犹豫”的孤立像元。第三,SVM的Gamma值偏大,分类边界太细碎。
我的排查顺序是:先看训练样本的分离性。SCP里有个工具叫“光谱角分类预检”,它会把训练样本的平均光谱画在一起,如果小麦和草地的光谱曲线几乎重合,说明选样本时区分的不是同一类地物,要返工选样本。如果样本没问题,就调Gamma值。Gamma从0.25降到0.1或0.05,碎斑会明显减少。如果还是不满意,再加上Sieve做后处理。
5.3 面积汇总结果和实际种植面积差异大
如果分类精度验证显示Kappa系数高于0.9,但算出来的面积和你实地了解的情况差很多,问题大概率出在面积计算环节而不是分类环节。先检查坐标系:分类栅格是不是经纬度坐标系(WGS84)?如果是,那栅格“像元面积”根本不能用“分辨率的长乘以宽”来计算,因为一个经纬度0.61秒对应的地面距离在不同纬度上不一样。解决办法是把分类结果用“处理工具箱→GDAL→光栅投影→变形(转换)”重投影到UTM坐标系,再做像元统计。
另一种情况是分类栅格和统计结果之间存在“NoData值”干扰。如果裁剪影像时在边缘留了NoData区域,转换成矢量后这些NoData区域可能会被赋予一个类别代码(通常是0或255),统计时如果不排除这个类别,面积会虚高。用栅格计算器(Raster Calculator)把这些非0值像元置为NoData,再统计,就能避开。
5.4 SCP插件运行分类报错“内存不足”
QuickBird融合影像范围大时,SCP的分类计算可能消耗大量内存,尤其是你加载了整个乡镇范围的影像。我的解决办法是分块处理:用“处理工具箱→SAGA→栅格工具→切割栅格”把影像切分成4到6块,对每块分别做分类,最后再用“处理工具箱→GDAL→光栅投影→合并”把分类结果合并成一张。注意合并时要保证所有分块的类别编码规则一致(都是1到6),合并后如果出现类别代码冲突(同一块地的分类结果在两块拼接处不同),再补一次Sieve平滑一下。
5.5 分类结果的“椒盐噪声”对面积统计的影响程度
很多人看分类结果里有些零碎的细斑,总想清理得特别干净。实际上,在小麦面积统计里,碎斑对总面积的影响可能没有你想象的那么大——因为碎斑是“双向”的:有些碎斑是把非麦田分成了麦田(高估),有些是把麦田分成了其他类别(低估),两者在统计时会部分抵消。我试过用Sieve阈值16(激进去噪)和阈值2(温和去噪)分别统计,面积差异只有1.2%左右。所以做后处理时不用太极端,用阈值4到6就够了,关键是别把小块的边角麦田(真正的目标)抹掉。
6. 从面积统计到数据应用:几个延伸方向
6.1 与NDVI时序数据结合,提高判读可靠度
单期QuickBird影像做分类有一个天然短板:你只能看到“那一瞬间”的地表状态。小麦在返青期、拔节期、灌浆期的光谱特征完全不同,单期影像如果成像时间偏早或偏晚,可能混淆麦田和油菜地、冬闲田。我建议,如果预算允许,可以配合下载同期或相邻月份的Sentinel-2影像,算一个NDVI时间序列,把“物候曲线”作为参考。小麦的NDVI曲线有明显的单峰形态——返青期上升、拔节期达峰、灌浆后回落,而常绿林地的NDVI相对平稳。即便不做严格的时序分类,用NDVI曲线来验证QuickBird分类结果里面的“疑似地块”,也很有说服力。
6.2 面积统计结果与农业保险、产量估算衔接
地块级的小麦面积数据,最直接的用户其实是农业保险公司和粮食收购企业。查勘定损需要知道受灾地块到底种了多少亩小麦;粮食产量估算要“面积×单产”。如果能把QGIS分类出来的地块矢量进一步做“地块编号”,让每个田块有独立的ID,后面就可以挂接各类业务数据(受灾等级、保险赔付金额、实测单产等),形成真正的“农业一张图”。这个方向很多人想做,但卡在第一步——没有准确的地块边界。QuickBird分类结果能提供比较可靠的小麦种植边界,是很好的起点。
6.3 方法延伸:换成国产高分辨率影像怎么操作
国内现在可用的高分辨率遥感数据源越来越多,除了商业采购,还有公益性的资源三号(分辨率2.1米多光谱)。如果哪天你拿到的不是QuickBird,而是国产卫星影像,这套QGIS流程完全不用改——因为你用的是SCP的SVM分类器,它不关心数据来源是国外还是国内卫星。只要你的影像做好了辐射定标和几何校正,波段设置对得上,后面的训练样本、分类、后处理、面积统计流程完全是通用的。
唯一需要留意的区别是波段的波长范围。国产卫星(比如高分一号)的多光谱波段设置和QuickBird略有差异(蓝、绿、红、近红外四个波段的大致中心波长类似但带宽不同),在SCP里设置波段顺序的时候要按实际波长填写,不要直接照搬QuickBird的参数。
6.4 常见实操中的三个小技巧
第一,QuickBird影像文件通常非常大(全色+多光谱动辄几个GB),每次QGIS打开加载都慢。建议在处理之前先做一次“金字塔构建”(处理工具箱→GDAL→栅格配置→构建概述),能显著提升缩放和漫游的速度。如果不构建金字塔,后面每次放大缩小都会卡顿,你会怀疑是电脑性能问题,实际上只是少了这步。
第二,做训练样本时,建议顺手在SCP里勾选“在光谱特征图中显示样本直方图”。这样你在采样的同时就能看到每类地物的光谱分布范围。小麦的光谱分布如果出现了双峰——说明你很可能把小麦和草地的样本混在一起了,赶紧回头检查样本多边形是不是勾过了田埂边缘。
第三,面积统计完成后,不要直接只用分类结果出图。把原始影像的假彩色合成放在专题图背景里(透明度调低),叠加分类结果的半透明图层,用这种方式做“叠影图”给非专业人员看,说服力远大于一张干巴巴的分类图。对方能直观看到:红色的区域就是影像上长势好的小麦,分类图里黄色区域和红色区域是高度重合的。
最后再分享一个我个人的体会:QGIS这套流程看起来环节多,实际跑熟之后,从拿到QuickBird影像到输出分村面积报表,一个工作日就能完成。关键是分清楚每一步的“目的”和“必要性”——不是每个环节都一定要做(比如平地可以不做DEM校正),但每一步都要清楚自己在干什么、这个操作的影响范围是什么。这样的项目做完,不仅是一张面积表,更是一套可以复用的技术流程,下次换区域、换年份、换卫星数据,直接套用就行。