5.3 案例三:高光谱病虫害识别


5.3 案例三:高光谱病虫害识别

本节摘要:前两个案例处理"一条谱",本案处理"一千六百条谱组成的图像立方体"。作物受病害侵染时红边位置先于肉眼症状发生蓝移,NDVI 只对重度敏感;光谱角制图给每个像素一个类别,混淆矩阵验收。变式把同一套定量思路搬到紫外-可见水质监测,展示方法论的跨场景迁移。

一、背景:在病斑可见之前画图

农场委托:四十亩麦田零星出现早衰迹象,怀疑病害侵染,但目视巡田只见三四处明显病斑。农艺上的痛点恰恰是肉眼可见时已错过最佳防治窗口——植物生理先于形态变化:叶绿素降解让红光吸收减弱,细胞结构受损让红边(红光到近红外的反射率陡升段)向短波方向蓝移,这些光谱征兆比病斑早一到两周。委托要的是一张分布图:哪些区域已侵染、轻重如何,据此精准施药而不是全田漫灌。

高光谱成像同时给空间与光谱:无人机推扫成像,四百乘四百米田块、一百个波段(450 到 950 纳米)、地面分辨率亚米级。模拟一个四十乘四十像素、三类的数据立方体:健康(红边 725 纳米、叶绿素正常)、轻度侵染(红边蓝移 5 纳米、叶绿素略降)、重度(红边大蓝移、叶绿素大降)。

二、操作:指数、红边与逐像元分类

第一步不急着上分类器,先用两个物理指标给数据"把脉"——归一化植被指数 NDVI(近红外与红光反射率的归一化差)与红边位置(一阶导数最大处的波长):

# 案例三:数据立方体与光谱指标 import numpy as np rng = np.random.default_rng(55) bands = np.linspace(450, 950, 100) def leaf_reflect(re_pos, chloro=1.0): r = (0.05 + 0.30*np.exp(-0.5*((bands-550)/35)**2)*chloro # 绿峰 + 0.45*np.exp(-0.5*((bands-re_pos)/22)**2) # 红边与近红外台地 - 0.28*np.exp(-0.5*((bands-675)/18)**2)*chloro) # 叶绿素吸收 return np.clip(r, 0.01, 0.8) H = W = 40 truth = np.zeros((H, W), int) # 0 健康 1 轻度 2 重度 cube = np.zeros((H, W, bands.size)) for i in range(H): for j in range(W): if rng.random() < 0.15: truth[i, j] = 2; spec = leaf_reflect(700, 0.55) elif rng.random() < 0.20: truth[i, j] = 1; spec = leaf_reflect(720, 0.90) else: spec = leaf_reflect(725, 1.0) cube[i, j] = spec + rng.normal(0, 0.012, bands.size) def smooth(v): return np.convolve(v, np.ones(7)/7, mode='same') def ndvi(s): red = s[np.argmin(np.abs(bands-670))] nir = s[np.argmin(np.abs(bands-850))] return (nir-red)/(nir+red) def red_edge(s): d = np.gradient(smooth(s)) return float(bands[np.argmax(d[30:70]) + 30]) px, lb = cube.reshape(-1, bands.size), truth.ravel() nd = np.array([ndvi(p) for p in px]) re_ = np.array([red_edge(p) for p in px]) for cls, name in [(0, '健康'), (1, '轻度'), (2, '重度')]: print(f"{name}: NDVI={nd[lb==cls].mean():+.3f} 红边位置={re_[lb==cls].mean():6.1f} nm")

输出:

健康: NDVI=+0.787 红边位置= 706.5 nm 轻度: NDVI=+0.770 红边位置= 702.3 nm 重度: NDVI=-0.340 红边位置= 682.2 nm

四个数字讲了一个完整的生理故事。轻度侵染:NDVI 从 0.787 微跌到 0.770(差 0.017,在测量噪声里几乎不可辨),红边位置却从 706.5 蓝移到 702.3——早器检测的红边比指数灵敏一个量级重度侵染:NDVI 崩到负 0.34(近红外台地垮塌、红光反射反超),红边进一步退到 682.2。指数与红边各管一段:前者是"灾情通报",后者是"早期预警"。

第二步逐像元分类。光谱角制图(SAM)的度量与 3.2 节的夹角余弦同族——把每条像元谱与三个参考谱(健康、轻度、重度的典型反射率)算夹角,归给夹角最小的一类:

# SAM 逐像元分类与混淆矩阵 refs = np.array([leaf_reflect(725,1.0), leaf_reflect(720,0.9), leaf_reflect(700,0.55)]) refs = refs/np.linalg.norm(refs, axis=1, keepdims=True) pxn = px/np.linalg.norm(px, axis=1, keepdims=True) ang = np.arccos(np.clip(pxn @ refs.T, -1, 1)) # 每像元对三个参考的光谱角 pred = np.argmin(ang, axis=1) # 最小角归类 cm = np.zeros((3, 3), int) for t, p in zip(lb, pred): cm[t, p] += 1 print(f"SAM 总体精度={(pred==lb).mean():.3f}") print("混淆矩阵(行=真值 列=预测;0健康 1轻度 2重度):") print(cm)

输出:

SAM 总体精度=1.000 混淆矩阵(行=真值 列=预测;0健康 1轻度 2重度): [[1088 0 0] [ 0 287 0] [ 0 0 225]]

图1 数据立方体与作业链路

图1 数据立方体与作业链路

三、结果与解读

总体精度 1.000、混淆矩阵对角线外全零——在本模拟立方体上 SAM 完美完成任务。但解读必须踩住刹车:满分的代价是理想化的条件。模拟里参考谱与像元谱来自同一个生成模型、光照均匀、无混合像元;真实无人机数据要过辐射定标与大气校正(把传感器数字值换成地表反射率,否则红边位置系统性偏移)、要面对混合像元(一个像素里健康叶与病叶各占一半,光谱角落在两类之间)、还有叶片摆动与阴影。现场经验值:同类任务的真实精度多在 85% 到 95% 之间,卡精度的主要是标注质量与参考谱的代表性,不是分类器

价值解读回到委托本身:一千六百个像素的逐像元判定拼成分布图后,施药从"全田漫灌"变成"变量施药"——轻度区预防性处理、重度区重点用药、健康区跳过。农药用量降三到五成,这笔账才是高光谱 imaging 进入农业的入场券。

四、变式:同一套流程换到水环境

把镜头从麦田转向河段:水质监测的紫外-可见光谱(200 到 400 纳米)反演污染物浓度,链路与案例一同构——采集、整备、PLS 定量、交叉验证:

# 变式:紫外-可见水质反演 xw = np.linspace(200, 400, 100) s_pol = np.exp(-0.5*((xw-254)/22)**2) + 0.4*np.exp(-0.5*((xw-280)/15)**2) # 污染物谱 s_bg = 0.3*np.exp(-0.5*((xw-220)/40)**2) + 0.2 # 浊度背景 cw = rng.uniform(0, 5, 40) # 浓度 0-5 Xw = np.array([c*s_pol + s_bg*(1+rng.normal(0,0.3)) + rng.normal(0,0.05,100) for c in cw]) # 复用 5.1 的 pls_cv 函数(此处省略定义,输出为真实运行结果)

输出:

水质 PLS(k=2) 浓度 RMSECV=0.012 mg/L (浓度范围 0-5)

交叉验证误差 0.012 毫克每升、浓度范围 0 到 5——相对误差不到百分之零点五,比农业案例好一个量级。原因朴素:紫外区的吸收带锐而强(摩尔吸光系数大),信噪比天然占优;浊度散射虽然讨厌(乘性 30%),但 PLS 的潜变量把它与污染物方向分开了。同一套"整备加降维加定量加交叉验证",换个波段与基质就是另一份委托的答案——方法论的迁移能力,正是本书把它拆成工序来教的原因。

⚠️ 常见坑:把实验室建立的分布图模型直接用于跨季度监测。作物品种、生育期、土壤背景都在换季变化,上个季度精度 95% 的模型下季度可能跌到 70%——每季重采参考谱、重跑验证,是高光谱农业应用的例行成本。

本节要点回顾

  • 红边位置是早期预警、NDVI 是灾情通报:轻度侵染下红边蓝移 4 纳米清晰可见,NDVI 只跌 0.017;
  • SAM 按光谱角逐像元归类,输出是分布图不是单一结论,交付形态变成空间信息;
  • 模拟满分要打现实折扣:定标、大气校正、混合像元是真实场景三道坎,现场精度 85% 到 95%;
  • 变量施药是价值兑现点,农药用量降三到五成;
  • 方法论可跨场景迁移:水质紫外反演同一套管线,误差再降一个量级。

三场演习收官。下一章回到鉴定所的会诊室——实战暴露的漂移、不均匀、参数不知怎么调,一次说清。


作者与出处
原作者: 灏天文库
来源:灏天文库
整理: 灏天文库整理
由灏天文库平台收录,内容或由平台用户上传,仅供学习交流
发布者: 作者: 灏天文库 转发
评论区 (0)
U