Landsat 8 波段用法介绍(如何为Landsat)

Landsat 8是美国国家航空航天局(NASA)和美国地质调查局(USGS)共同推出的一颗遥感卫星,于2013年发射升空。它可以监测地球的表面,获取高分辨率的影像数据,进而对地球的变化、环境保护和资源管理等方面提供支持。其中,波段是根据遥感数据的不同特征分出来的,该文将从不同的角度来详细探讨Landsat 8的波段特性。

一、Landsat 8波段简介

Landsat 8的8个波段,是指在不同的光谱波段范围内的数码成像。它们分别是:

B1: Coastal Aerosol
B2: Blue
B3: Green
B4: Red
B5: Near Infrared (NIR)
B6: Shortwave Infrared 1 (SWIR1)
B7: Shortwave Infrared 2 (SWIR2)
B10: Thermal Infrared 1 (TIR1)
B11: Thermal Infrared 2 (TIR2)

其中,B1到B5波段是较为常见的波段,也比较容易理解,B6到B7波段便十分神奇,涉及到了地球地表上的化学成分成分,而B10和B11波段分别代表TIR1和TIR2,用于探测地表温度。

二、 Landsat 8波段的应用

1、植被遥感分析

长波红外波段(NIR)在植被遥感分析中经常被使用,因为它可以测量植被的健康状况和处理植被ECO系统的动态。NIR对植物冠层的草地盖度和植物的食物链中地位有直接作用。此外,其他波段,如B3和B4波段往往被用于检测叶片的含绿量,这有助于区分植被的种类。

2、火山爆发监测

火山爆发需要发射大量的气体和灰尘到大气层,易导致降雨酸化、气候变化、火山灰等危害,所以我们希望可以及早发现火山的异常。而此时,从B10和B11波段中可以感知到地表的温度异常,因此可以利用这两个波段来研究及监测火山顶发生的变化。

3、水体检测

水体检测和植被遥感分析类似,使用B1、B2、B3等波段来检测水体并区分不同类型的水体。其中,B1波段的范围在0.43到0.45微米,属于紫外波段,是区分水体和陆地的主要波段之一。此外,B2波段属于浅蓝色光谱区,也可以用于检测海洋和湖泊中的水。

三、 Landsat 8 波段获取

获取Landsat 8波段数据的方法较多,下面介绍两种:

1、利用USGS官网下载API下载

import requests
import json

def download(url, save_path):
    response = requests.get(url)
    with open(save_path, "wb") as f:
        f.write(response.content)
    print("文件下载完成!")

base_api = "https://earthexplorer.usgs.gov/inventory/json/v/1.4.0/"
login_api = base_api + "login"
search_api = base_api + "search"
download_api = base_api + "download"

username = "{USGS用户名}"
password = "{USGS密码}"

# 获取访问令牌
res = requests.post(login_api, json=dict(username=username, password=password))
token = res.json()['data']

# 构造查询条件
query = dict(
    datasetName="LANDSAT_8_C1",
    spatialFilter=dict(
        filterType="mbr",
        lowerLeft=dict(
            latitude=34,
            longitude=116
        ),
        upperRight=dict(
            latitude=35,
            longitude=118
        )
    ),
    maxResults=1
)

# 查询数据
res = requests.post(search_api, json=dict(json.dumps(query), token=token))
result = res.json()['data'][0]

# 构造下载信息
download = [
    dict(
        entityId=result['entityId'],
        contentType="L1TP",
        outputFormat="GEOTIFF",
        bandId=4
    ),
    dict(
        entityId=result['entityId'],
        contentType="L1TP",
        outputFormat="GEOTIFF",
        bandId=5
    ),
    dict(
        entityId=result['entityId'],
        contentType="L1TP",
        outputFormat="GEOTIFF",
        bandId=8
    ),
]

# 获取下载地址
res = requests.post(download_api, json=dict(download=json.dumps(download), token=token))
url_list = res.json()['data']

# 下载数据
for i, url in enumerate(url_list):
    download(url, f"./Landsat_8_b{i+1}.tif")

2、 利用GDAL库加载波段数据

import gdal

def read_tiff_file(filepath):
    """
    读取 tiff 文件数据

    :param filepath: 文件路径
    :return: 多波段数据
    """
    ds = gdal.Open(filepath)
    band_count = ds.RasterCount
    im_data = []
    for i in range(band_count):
        band = ds.GetRasterBand(i + 1)
        im = band.ReadAsArray()
        im_data.append(im)
    return im_data

tiff_path = "./Landsat_8_b4.tif"
im_data = read_tiff_file(tiff_path)
#print(im_data)

四、 Landsat 8波段的合成和可视化

对于Landsat 8影像数据,我们通常使用RGB三原色图像来表达。下面是基于B4、B3、B2波段生成的一张RGB合成图像:

from PIL import Image

im_r = Image.open("./Landsat_8_b4.tif")
im_g = Image.open("./Landsat_8_b3.tif")
im_b = Image.open("./Landsat_8_b2.tif")

im_rgb = Image.merge("RGB", (im_r, im_g, im_b))
im_rgb.show()

同样,我们也可以将Landsat 8各波段可视化:

import matplotlib.pyplot as plt

tiff_path = "./Landsat_8_b{0}.tif"
for i in range(1, 9):
    im_data = read_tiff_file(tiff_path.format(i))
    plt.imshow(im_data[0], cmap='gray')
    plt.title(f"Landsat 8波段 B{i}")
    plt.show()

五、Landsat 8应用案例

1、洞庭湖水体面积提取

洞庭湖是中国最大的淡水湖之一,在湖岸带的生态和经济价值尤为重要。基于遥感数据的水体遥感提取方法已经成为研究水体分布、监测水体质量、预测水体环境效应的重要技术手段。利用Landsat 8卫星数据可以获取到高精度的洞庭湖遥感影像数据,并进行水体提取、水位变化监测以及相关数据处理,为洞庭湖的管理提供科学依据。

2、长江三角洲潮滩生态监测

长江三角洲有着丰富的潮滩资源,作为保护自然生态系统,监测、评价潮滩生态环境的状况已经成为生态环境科学研究的焦点。红外波段的影像可以反映地表物体的热辐射特征,因此利用Landsat 8 海陆温差的热辐射数据进行长江三角洲地区的潮滩监测,可以为相关科学研究提供数据支持和参考。

Published by

风君子

独自遨游何稽首 揭天掀地慰生平