3. 农业图像色彩空间转换
在农业图像处理中,相机直接采集到的通常是 RGB 图像,但 RGB 三个通道都与亮度高度耦合:同一片叶片在晴天和阴天会呈现完全不同的 R、G、B 数值,这给阈值分割带来很大麻烦。色彩空间转换的本质,是把同一份颜色信息换一种坐标表达,让"我们关心的属性"(色调、饱和度、亮度、绿红对立、黄蓝对立)落到某个通道上,从而用更稳定的阈值把作物从土壤、地膜、阴影中分离出来。
三种常用色彩空间的农业含义
RGB 是设备相关的加色空间,适合显示与保存,但不利于分割。农业场景中常见的"超绿"思想(2G−R−B)就是在 RGB 基础上做通道运算,简单有效,但对光照变化仍较敏感。
HSV 把颜色分解为色调 H(0~180,OpenCV 中 8 位图范围减半)、饱和度 S(0~255)和明度 V(0~255)。H 通道对阴影和光照强度不敏感,是绿色作物分割的首选。典型绿色叶片 H 大致落在 35~85 区间,土壤(棕黄)H 多在 10~25,枯叶偏黄在 20~35,需要结合 S、V 排除低饱和的灰白地膜和过暗阴影。
Lab 是设备无关的感知均匀空间,L 为亮度(0~100 映射到 0~255),a 为绿—红轴(负值偏绿),b 为蓝—黄轴(正值偏黄)。健康绿色作物的 a 通道明显为负,土壤与枯茬的 a 接近 0 或为正,b 偏高。Lab 的优势在于 a、b 与亮度解耦更彻底,跨设备、跨时段稳定性好,常用于植被指数类分割与颜色差异分析。
转换函数与关键参数
OpenCV 中统一使用 cv2.cvtColor 完成转换,注意读入默认是 BGR 顺序,不要误写成 RGB。转换后各通道的数值范围需要牢记:HSV 的 H 在 8 位图中是 0~180(因为 360° 被压缩一半),S、V 为 0~255;Lab 的 L 为 0~255,a、b 在 8 位图中以 128 为零点偏移,实际范围约 0~255,负值被平移到 128 以下。
import cv2
import numpy as np
img = cv2.imread("field.jpg") # BGR
hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV)
lab = cv2.cvtColor(img, cv2.COLOR_BGR2Lab)
# HSV 绿色作物掩膜(示例参数,需按实际光照标定)
lower = np.array([35, 40, 40])
upper = np.array([85, 255, 255])
mask_hsv = cv2.inRange(hsv, lower, upper)
# Lab 绿色作物掩膜:a 通道偏负
L, a, b = cv2.split(lab)
mask_lab = cv2.inRange(a, 0, 120) # a<128 偏绿,示例区间
# 形态学去噪
kernel = np.ones((5, 5), np.uint8)
mask = cv2.morphologyEx(mask_hsv, cv2.MORPH_OPEN, kernel)
mask = cv2.morphologyEx(mask, cv2.MORPH_CLOSE, kernel)
result = cv2.bitwise_and(img, img, mask=mask)
参数标定的实用做法是:在目标图像上取若干作物像素和土壤像素,分别打印其 HSV 与 Lab 值,观察两类样本在哪个通道上分离度最大,再据此设定阈值。例如某张午后麦田示例图中,作物 H 集中在 45~70,土壤 H 集中在 12~22,那么 H 阈值取 35~85 就能覆盖大部分叶片并排除土壤;若阴影处 V 很低,可把 V 下限设为 40 左右,避免把暗部误判为作物。
作物与土壤分割案例
假设处理一张 1280×720 的玉米苗期田间图像,目标是提取幼苗绿色区域并统计覆盖率。流程为:读入 → 转 HSV → 用 H/S/V 三通道 inRange 得到初始掩膜 → 开运算去除土壤颗粒噪点 → 闭运算填补叶片空洞 → 用掩膜与原图做按位与得到分割结果 → 统计掩膜中 255 像素占比作为绿色覆盖率。若同一场景改用 Lab,则主要依据 a 通道负值区间分割,再叠加 b 通道上限排除偏黄的枯茬。
结果判读与常见问题
分割结果是否可用,不能只看"绿色是否被选中",还要检查三类典型错误:一是土壤被误选,通常表现为掩膜中出现大片连通区域,说明 S 下限过低或 H 上限过宽;二是叶片漏选,表现为叶片内部出现空洞,多因 V 下限过高或 H 区间偏窄;三是地膜、反光水面被误选,表现为高亮区域被保留,需要提高 S 下限或增加 V 上限约束。判读时可把掩膜叠加到原图上,用半透明红色显示被选区域,肉眼即可快速定位误选与漏选位置,再回到阈值区间微调。
需要强调的是,上述阈值区间均为教学示例,真实参数必须结合具体作物、生育期、相机白平衡和天气条件现场标定。建议把标定好的 HSV/Lab 阈值连同采集条件记录成配置表,便于同一地块不同批次图像复用,减少重复调参。