改进的'清水'大气校正算法在Landsat-5传感器中的应用

需积分: 9 1 下载量 86 浏览量 更新于2024-07-25 收藏 811KB PDF 举报
"A simple “clear water” atmospheric correction algorithm for Landsat-5 sensors" 这篇研究文章介绍了一种针对Landsat-5传感器的简单大气校正算法,称为改进型“清澈水体”大气校正算法(Improved Clear Water Algorithm for Broad-band sensors, 简称ICAB算法)。大气校正是遥感图像处理中的关键步骤,旨在消除大气条件对地表反射率的影响,以准确获取地表特征信息。 在ICAB算法中,研究者利用查找表方法估计了在三个可见光波段和一个近红外(NIR)波段的瑞利散射贡献。瑞利散射是大气中存在的气体分子对光线的散射现象,尤其是在短波段影响显著。此外,他们运用“清澈水”方法来估算NIR波段与气溶胶散射相关的遥感反射率。气溶胶是大气中的悬浮颗粒物,对遥感图像的准确性有显著影响。 接下来,研究者采用了安格尔斯特龙指数模型(Angstrom Exponential Model)将NIR波段的气溶胶散射贡献外推到可见光波段。这个模型常用于描述气溶胶粒子大小分布对散射光强的影响。他们还建立了一个创新的实证光谱关系,即485nm波长与560nm波长之间的关系,以估计安格尔斯特龙指数模型的指数系数。 通过在中国太湖进行的案例研究,结果显示ICAB算法计算出的光谱特性在形状和幅度上与典型的水体光谱相当接近。不过,该算法在三个可见光波段和NIR波段的不确定性分别为7.45%,10.57%,13.51%和17.14%。这些不确定性值表明,尽管ICAB算法在大气校正方面取得了良好效果,但仍有改进的空间。 ICAB算法为Landsat-5传感器的数据处理提供了一种有效的方法,有助于提高地表反射率的精度,特别是在水体监测和环境分析等领域。该算法的成功应用依赖于对大气条件、瑞利散射和气溶胶散射的精确建模,以及对安格尔斯特龙指数的有效估算。尽管存在一定的误差,但ICAB算法仍为大气校正提供了实用且相对简单的解决方案。

import numpy as np from osgeo import gdal from xml.dom import minidom import sys import os os.environ['PROJ_LIB'] = r"D:\test\proj.db" gdal.UseExceptions() # 引入异常处理 gdal.AllRegister() # 注册所有的驱动 def atmospheric_correction(image_path, output_path, solar_elevation, aerosol_optical_depth): # 读取遥感影像 dataset = gdal.Open(image_path, gdal.GA_ReadOnly) if dataset is None: print('Could not open %s' % image_path) return band = dataset.GetRasterBand(1) image = band.ReadAsArray().astype(np.float32) # 进行大气校正 corrected_image = (image - aerosol_optical_depth) / np.sin(np.radians(solar_elevation)) # 创建输出校正结果的影像 driver = gdal.GetDriverByName('GTiff') if driver is None: print('Could not find GTiff driver') return output_dataset = driver.Create(output_path, dataset.RasterXSize, dataset.RasterYSize, 1, gdal.GDT_Float32) if output_dataset is None: print('Could not create output dataset %s' % output_path) return output_dataset.SetProjection(dataset.GetProjection()) output_dataset.SetGeoTransform(dataset.GetGeoTransform()) # 写入校正结果 output_band = output_dataset.GetRasterBand(1) output_band.WriteArray(corrected_image) # 关闭数据集 output_band = None output_dataset = None band = None dataset = None print('Atmospheric correction completed.') if __name__ == '__main__': if len(sys.argv) == 1: workspace = r"D:\test\FLAASH_ALL_ALL_V1.0.xml" else: workspace = sys.argv[1] # 解析xml文件接口 Product = minidom.parse(workspace).documentElement # 解析xml文件(句柄或文件路径) a1 = Product.getElementsByTagName('ParaValue') # 获取输入路径的节点名 ParaValue = [] for i in a1: ParaValue.append(i.childNodes[0].data) # 获取存储路径的节点名 image_path = ParaValue[0] output_path = ParaValue[1] # image_path = r"D:\Project1\data\input\11.tif" # output_path = r"D:\test\result\2.tif" solar_elevation = 30 # 太阳高度角(单位:度) aerosol_optical_depth = 0.2 # 气溶胶光学厚度 atmospheric_correction(image_path, output_path, solar_elevation, aerosol_optical_depth) 根据这段代码写一个技术路线流程

2023-06-02 上传