Landsat8数据处理实战:从TIF文件解析到真彩色合成(附Python代码)
第一次拿到Landsat8的压缩包,解压后看到满屏的TIF文件,那种感觉就像面对一个未经翻译的密码本。文件名冗长,数据格式陌生,每个文件都像是一个独立的谜题。但正是这些看似杂乱的文件,承载着地球表面最真实的反射信息。对于遥感数据处理的新手而言,从这一堆TIF文件到生成一张直观、可用的真彩色影像,这个过程不仅是技术操作,更是一次理解卫星数据逻辑的思维训练。本文将带你深入Landsat8 Level-2科学产品的内部,用Python作为钥匙,一步步解开从数据文件命名规则到波段合成与可视化的完整链条,让你不仅能“做出”一张图,更能“读懂”数据背后的故事。
1. 数据获取与文件结构深度解析
Landsat8数据可以从多个官方或授权的数据平台获取,例如地理空间数据云、USGS EarthExplorer等。下载的数据产品通常是一个压缩包(如.tar.gz或.tar格式),解压后会得到一个包含多个TIF文件的文件夹。这些文件并非随意命名,其名称遵循一套严谨的命名规范,理解这套规范是高效处理数据的第一步。
一个典型的Landsat8 Collection 2 Level-2文件名示例如下:LC08_L2SP_118039_20150803_20200909_02_T1_SR_B4.TIF。这个长字符串可以被拆解为多个具有明确意义的字段:
LC08: 标识卫星为Landsat 8。L2SP: 表示产品级别为Level-2 Science Product,即经过大气校正的地表反射率产品。118039: 代表世界参考系统(WRS)的路径(Path)和行(Row)编号,用于定位影像的全球位置。20150803: 影像的采集日期(年月日)。20200909: 产品的处理生成日期。02_T1:02表示处理等级为Collection 2,T1表示数据质量层级为Tier 1(最高质量,几何精度高)。SR_B4: 这是文件内容的核心标识。SR代表地表反射率,B4代表第4波段(红光波段)。其他常见后缀包括:QA_PIXEL: 像素级质量评估波段。QA_RADSAT: 辐射饱和度质量评估波段。ST_B10: 地表温度波段(Band 10)。
理解这些后缀至关重要,它直接告诉你这个TIF文件里装的是什么“货”。在Python中,我们可以利用glob或os模块,结合这些命名规则,智能地筛选和定位我们需要的文件,避免手动查找的繁琐和错误。
import os
import re
def find_landsat_files(data_dir, product='SR', band=None):
"""
根据产品类型和波段号查找Landsat8文件。
参数:
data_dir (str): 数据文件夹路径。
product (str): 产品类型,如 'SR'(地表反射率)、'QA_PIXEL'。
band (str or int, optional): 波段号,如 '4' 或 4。对于非波段文件,可忽略。
返回:
list: 匹配的文件路径列表。
"""
pattern = f"LC08_L2SP_*_{product}_*.TIF"
if band is not None:
# 确保波段号格式一致,如 B4
band_str = f"B{band}" if isinstance(band, int) else band
pattern = f"LC08_L2SP_*_{product}_{band_str}.TIF"
all_files = []
for root, dirs, files in os.walk(data_dir):
for file in files:
if re.match(pattern.replace('*', '.*'), file):
all_files.append(os.path.join(root, file))
return sorted(all_files) # 排序便于后续处理
# 示例:查找所有地表反射率波段文件
data_folder = "./LC08_L2SP_118039_20150803_20200909_02_T1"
sr_bands = find_landsat_files(data_folder, product='SR')
print(f"找到 {len(sr_bands)} 个SR波段文件:")
for f in sr_bands:
print(f" - {os.path.basename(f)}")
# 示例:查找红光波段(B4)文件
red_band_file = find_landsat_files(data_folder, product='SR', band=4)
if red_band_file:
print(f"\n红光波段文件: {os.path.basename(red_band_file[0])}")
提示:在实际项目中,建议将文件查找逻辑封装成函数,并根据数据集的Collection版本(如Collection 2)调整命名模式,以提高代码的健壮性和可复用性。
2. 核心数据读取与质量波段解码
成功定位文件后,下一步是读取数据。我们将使用rasterio和numpy这两个Python库。rasterio是处理栅格数据的利器,它能轻松读取地理信息、投影和像元值。
2.1 读取地表反射率波段
Landsat8 Level-2的SR产品并非直接存储反射率浮点数,而是为了存储和传输效率,将浮点反射率值通过一个线性变换(reflectance = scale * DN + of

3万+

被折叠的 条评论
为什么被折叠?



