# mono-window-algorithm **Repository Path**: ldjexist/mono-window-algorithm ## Basic Information - **Project Name**: mono-window-algorithm - **Description**: A mono-window algorithm for retrieving land surface temperature from Landsat TM5 data - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-01-01 - **Last Updated**: 2025-07-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: Thermal-infrared, Python, Landsat5 ## README # 单窗算法反演地表温度 ## 一、概述 本项目基于单窗算法的Landsat TM5卫星影像地表温度反演,可以自动处理遥感影像数据,计算NDVI、植被覆盖度、地表比辐射率等参数,并最终反演得到地表温度,同时提供结果可视化功能;采用面向对象设计,将复杂的地表温度反演过程封装为一系列清晰的方法,便于用户使用和扩展。 ![the flow chart of the mono-window algorithm for Landsat 5 data ...](https://www.researchgate.net/publication/331701994/figure/fig2/AS:736636220497920@1552639169284/the-flow-chart-of-the-mono-window-algorithm-for-Landsat-5-data.png) ## 二、功能介绍 ### 1. 数据处理功能 - 自动读取Landsat TM5的5个波段数据(红、绿、蓝、近红外、热红外) - 从MTL元数据文件中提取辐射定标系数 - 执行辐射定标,将DN值转换为辐射亮度值 ### 2. 参数计算功能 - 计算归一化植被指数(NDVI) - 基于NDVI计算植被覆盖度(FVC) - 计算地表比辐射率 - 基于单窗算法计算地表温度 ### 3. 结果展示与保存功能 - 可视化展示NDVI、FVC、地表比辐射率和地表温度 - 将地表温度结果保存为GeoTIFF格式,保留原始地理参考信息 ## 三、安装与依赖 ### 1. 依赖库 该模块依赖以下Python库: - osgeo gdal:用于读取和写入地理空间数据 - numpy:用于数组计算 - matplotlib:用于结果可视化 - math:用于数学计算 ### 2. 安装方法 ```bash pip install numpy matplotlib gdal ``` ## 四、使用方法 ### 1. 基本使用流程 ```python from lst_retrieval import LSTRetrieval # 创建处理实例 processor = LSTRetrieval('path/to/landsat_data_folder') # 运行完整处理流程 processor.run_full_process( air_temperature=15, # 大气温度(°C) atmospheric_transmittance=0.7, # 大气透过率 visualize=True, # 是否可视化结果 output_dir='./results', # 结果保存目录 save_result=True # 是否保存结果 ) ``` ### 2. 分步处理 如果需要单独执行某个步骤,可以分别调用相应的方法: ```python processor = LSTRetrieval('path/to/landsat_data_folder') # 读取数据 processor.read_data() # 读取辐射定标系数 processor.read_calibration_coefficients() # 执行辐射定标 processor.radiometric_calibration() # 计算NDVI processor.calculate_ndvi() # 计算植被覆盖度 processor.calculate_fvc() # 计算地表比辐射率 processor.calculate_emissivity() # 计算地表温度 processor.calculate_surface_temperature( air_temperature=20, # 可以自定义大气温度 atmospheric_transmittance=0.8 # 可以自定义大气透过率 ) # 可视化结果 processor.visualize_results(output_dir='./results') # 保存地表温度结果 processor.save_surface_temperature() ``` ## 五、参数说明 ### 1. 初始化参数 - `folder_path`: 包含Landsat TM5数据的文件夹路径,该文件夹应包含所有波段的TIF文件和MTL元数据文件 ### 2. 地表温度计算参数 - `air_temperature`: 大气温度(°C),默认值为15°C - `atmospheric_transmittance`: 大气透过率,默认值为0.7 ### 3. 可视化与保存参数 - `visualize`: 是否可视化结果,布尔值,默认True - `output_dir`: 图像和结果保存目录,字符串,默认None - `save_result`: 是否保存地表温度结果,布尔值,默认True ## 六、结果说明 ### 1. 可视化结果 运行`visualize_results`方法后,将生成一个包含4个子图的图像: - 左上:NDVI分布图(红色表示低植被,绿色表示高植被) - 右上:植被覆盖度(FVC)分布图 - 左下:地表比辐射率分布图 - 右下:地表温度分布图(单位:°C) ### 2. 保存结果 运行`save_surface_temperature`方法后,将在指定目录生成一个GeoTIFF文件,包含地表温度数据,并保留原始影像的地理参考信息。 ## 七、注意事项 1. 输入数据必须包含所有必要的波段(红、绿、蓝、近红外、热红外)和MTL元数据文件 2. 大气透过率是一个重要参数,可根据实际大气条件进行调整 3. 对于不同地区和不同季节的影像,可能需要调整大气温度参数 4. 该模块假设热红外波段为B6,其他波段顺序也遵循Landsat TM5的标准顺序 ## 八、示例代码 以下是一个完整的使用示例: ```python from lst_retrieval import LSTRetrieval # 创建处理实例 processor = LSTRetrieval('LT51230322005206BJC00') # 运行完整流程,使用默认参数 processor.run_full_process( visualize=True, output_dir='./results' ) # 或者分步处理并自定义参数 processor = LSTRetrieval('LT51230322005206BJC00') processor.read_data() processor.read_calibration_coefficients() processor.radiometric_calibration() processor.calculate_ndvi() processor.calculate_fvc() processor.calculate_emissivity() processor.calculate_surface_temperature( air_temperature=22, # 假设大气温度为22°C atmospheric_transmittance=0.75 # 调整大气透过率 ) processor.visualize_results('./custom_results') processor.save_surface_temperature('./custom_results/LST.tif') ``` ## 九、参考文献 * Qin Z , Berliner A K & P .A mono-window algorithm for retrieving land surface temperature from Landsat TM data and its application to the Israel-Egypt border region[J].International Journal of Remote Sensing, 2001.DOI:10.1080/01431160010006971. * 于汉学,李弘颖. 城市建成区平面形态与城市热环境关联性研究[J]. 西安建筑科技大学学报(自然科学版),2023,55(6):882-889. DOI:10.15986/j.1006-7930.2023.06.011.