
在QGIS中,可以通过RGB影像计算植被覆盖率(也称为植被覆盖度),常用的方法之一是利用图像的红和绿波段构建可见光植被指数(如 ExG、Excess Green Index),然后通过阈值分割提取植被区域,并统计其占比。
步骤一:计算 Excess Green Index (ExG)
ExG 是一种适用于无人机或地面拍摄的真彩色(RGB)影像的植被增强指数,公式如下:
ExG = 2 * G - R - B
其中:RGB分别代表红色、绿色和蓝色的波段像素值。
在 QGIS 中打开 栅格计算器
菜单栏 → 栅格 → 栅格计算器
输入表达式:
2 * "imageName@2" - "imageName@1" - "imageName@3"
注意:此处需要根据你图层的波段顺序设置。RGB影像的波段顺序通常为 Red(1)、Green(2)、Blue(3)。
设置输出文件路径或保存为动态栅格。
步骤二:对 ExG 进行阈值分割(提取植被区域)
通常,ExG > 0 的像素被认为是潜在植被。你可以设定一个更优的阈值(例如 >30),以减少噪声。
推荐方法:
使用以下表达式在 栅格计算器 中生成二值化植被掩膜:
("exg_result@1" > 30) = 1
步骤三:计算植被覆盖率
植被覆盖率 = (植被像元数 / 总像元数)× 100%
在QGIS中,有很多种计算像元的方法。本文采用代码的方式,更为简单和直观的计算植被覆盖率。
vegetation_mask为二值化后的图层。
# 获取图层
layer = QgsProject.instance().mapLayersByName('vegetation_mask')[0]
provider = layer.dataProvider()
# 设置直方图参数:2个bin(0 和 1),范围 [0, 1]
histogram = provider.histogram(
bandNo=1,
binCount=2,
minimum=0.0,
maximum=1.0,
# 可选:指定区域(默认全图)
extent=layer.extent(),
sampleSize=0 # 不采样,使用全部像元
)
# 检查直方图是否生成成功
if histogram.valid and hasattr(histogram, 'histogramVector'):
counts = histogram.histogramVector
total_pixels = sum(counts)
if len(counts) >= 2:
veg_count = counts[1] # 第二个 bin 对应值 1(植被)
non_veg_count = counts[0]
coverage = veg_count / total_pixels * 100
print(f"总像元数: {total_pixels}")
print(f"植被像元数: {veg_count}")
print(f"非植被像元数: {non_veg_count}")
print(f"植被覆盖率: {coverage:.2f}%")
else:
print("直方图 bin 数量不足。")
else:
print("直方图生成失败或无数据。")
植被覆盖率更多算法
Excess Green minus Excess Red (ExGR)
结合 ExG 和 ExR 的改进型,能更好地区分植被与非植被。
ExGR = (2*G - R - B) - (1.4*R - G) = 3*G - 2.4*R - B
优势:进一步削弱建筑物、裸土等干扰。
QGIS 栅格计算器表达式:
3 * "imageName@2" - 2.4 * "imageName@1" - "imageName@3"
Green Leaf Index (GLI) —— 绿叶指数
广泛用于农业监测,对绿色叶片敏感。
GLI = (2*G - R - B) / (2*G + R + B + epsilon)
注:epsilon = 0.0001 防止除零错误
特点:归一化处理,输出范围 [-1, 1],利于跨图像比较。
植被判断:GLI > 0.0 或更高(如 0.2)
QGIS 表达式:
(2 * "imageName@2" - "imageName@1" - "imageName@3") / (2 * "imageName@2" + "imageName@1" + "imageName@3" + 0.0001)
Visible Atmospherically Resistant Index (VARI)
模拟 NDVI 思想,适用于可见光影像。
VARI = (G - R) / (G + R - B + epsilon)
注:epsilon = 0.0001 防止除零错误
用途:估算叶绿素含量、植被密度。
表现:在光照不均情况下较稳定。
QGIS 表达式:
("imageName@2" - "imageName@1") / ("imageName@2" + "imageName@1" - "imageName@3" + 0.0001)
Combined Index: CIVE (Color Index of Vegetation Extraction)
专为道路/城市环境中植被提取设计。
CIVE = 0.441*R - 0.811*G + 0.385*B + 18.78749
优点:对复杂背景(如水泥地、屋顶)有较好区分能力。
QGIS 表达式:
0.441 * "imageName@1" - 0.811 * "imageName@2" + 0.385 * "imageName@3" + 18.78749
更多栅格分析问题,欢迎留言或联系我们。转载须注明出处。