Sign In

Xử lý dữ liệu viễn thám Landsat 8 bằng Python

08:09 19/06/2024

Chọn cỡ chữ A a  

Đôi khi dữ liệu Landsat được tải xuống theo từng băng tần riêng lẻ thay vì một tệp duy nhất. Bài viết này đề cập đến cách xử lý dữ liệu Landsat bằng Python với mỗi băng tần trong cảnh vệ tinh Landsat thường được lưu trữ trong một tệp .tif riêng lẻ. Kể từ năm 1972, các vệ tinh Landsat đã liên tục thu được các hình ảnh không gian của bề mặt Trái đất, cung cấp dữ liệu liên tục để giúp các nhà quản lý đất đai và các nhà hoạch định chính sách đưa ra quyết định sáng suốt về tài nguyên thiên nhiên và môi trường của chúng ta.

Lịch sử 40 năm của các vệ tinh Landsat. Nguồn: USGS - USGS Landsat Timeline

Dữ liệu Landsat là dữ liệu quang phổ và được thu thập bằng cách sử dụng các cảm biến gắn trên vệ tinh trong không gian quay quanh trái đất. Các dải phổ và độ phân giải không gian liên quan của 9 dải đầu tiên trong cảm biến Landsat 8 được liệt kê trong bảng bên dưới.

Band

Wavelength range (nanometers)

Spatial Resolution (m)

Spectral Width (nm)

Units

Data Type

Fill Value (no data)

Range

Valid Range

Scale Factor

Band 1 - Coastal aerosol

430 - 450

30

2.0

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 2 - Blue

450 - 510

30

6.0

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 3 - Green

530 - 590

30

6.0

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 4 - Red

640 - 670

30

0.03

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 5 - Near Infrared (NIR)

850 - 880

30

3.0

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 6 - SWIR 1

1570 - 1650

30

8.0

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Band 7 - SWIR 2

2110 - 2290

30

18

Reflectance

16-bit signed integer (int16)

-9999

-2000 to 16000

0 to 10000

0.0001

Có các dải được thu thập bổ sung không được phân phối trong sản phẩm phản xạ bề mặt Landsat 8, chẳng hạn như dải toàn sắc, cung cấp độ phân giải tốt hơn, hình ảnh thang màu xám của bề mặt được sử dụng trong quy trình đánh giá chất lượng của dữ liệu.

Band

Wavelength range (nanometers)

Spatial Resolution (m)

Spectral Width (nm)

Band 8 - Panchromatic

500 - 680

15

18

Band 9 - Cirrus

1360 - 1380

30

2.0

Khi xử lý dữ liệu Landsat, điều quan trọng là phải hiểu cả siêu dữ liệu và quy ước đặt tên tệp. Siêu dữ liệu cho chúng ta biết dữ liệu được xử lý như thế nào, dữ liệu đến từ đâu và chúng được cấu trúc như thế nào. Tên tệp cho bạn biết cảm biến nào đã thu thập dữ liệu, ngày thu thập dữ liệu, v.v. Trước khi xử lý chúng ta nên kiểm tra kỹ xem đang làm việc với cảm biến hay không và khoảng thời gian chúng ta cần xử lý, có thông tin này trong tên tệp giúp bạn dễ dàng theo dõi hơn khi xử lý dữ liệu của mình.

Bước đầu tiên của việc xử lý dữ liệu Landsat bằng Python, chúng ta cần tạo tệp lệnh gọi các hàm cần thiết, xác định thư mục làm việc và tải dữ liệu cần sử dụng theo yêu cầu (ví dụ với dữ liệu LC080340322016072301T1-SC20180214145802):

import os
from glob import glob
import matplotlib.pyplot as plt
import numpy as np
import geopandas as gpd
import xarray as xr
import rioxarray as rxr
import earthpy as et
import earthpy.spatial as es
import earthpy.plot as ep
# Cài đặt thư mục làm việc và tải dữ liệu
data = et.data.get_data("cold-springs-fire")
os.chdir(os.path.join(et.io.HOME, 
                      "earth-analytics", 
                      "data"))
# Tạo thư mục chứa dữ liệu được tải về
landsat_post_fire_path = os.path.join("cold-springs-fire",
                                      "landsat_collect",
                                      "LC080340322016072301T1-SC20180214145802",
                                      "crop")

 
# Tạo danh sách các tập tin dữ liệu tif
post_fire_paths = glob(os.path.join(landsat_post_fire_path,
                                        "*band*.tif"))

 
# Sắp xếp dữ liệu để đảm bảo các dải phổ theo đúng thứ tự
post_fire_paths.sort()
post_fire_paths

 

Tiếp theo, mở một băng tần từ cảnh Landsat đã được tải. Đoạn mã dưới đây sử dụng phương thức .squeeze() để đảm bảo rằng đối tượng xarray đầu ra chỉ có 2 chiều.

 

# Mở một dải phổ không nén
band_1 = rxr.open_rasterio(post_fire_paths[0], masked=True)
band_1.shape 
band_1 = rxr.open_rasterio(post_fire_paths[0], masked=True).squeeze()
band_1.shape

 

# Thể hiện dữ liệu để xem xét
f, ax=plt.subplots()
band_1.plot.imshow(ax=ax,
                  cmap="Greys_r")
ax.set_axis_off()
ax.set_title("Plot of Band 1")
plt.show()

 

Tiếp theo chúng ta sử dụng một hàm có tên open_clean_bands để mở một tệp tif và trả về một đối tượng xarray.

def open_clean_bands(band_path):
    """A function that opens a Landsat band as an (rio)xarray object
    Parameters
    ----------
    band_path : list
        A list of paths to the tif files that you wish to combine.
     
    Returns
    -------
    An single xarray object with the Landsat band data.

 
    """
 return rxr.open_rasterio(band_path, masked=True).squeeze()

 

Mã bên dưới lấy từng dải mà bạn đã mở và xếp nó thành một mảng đầu ra mới. LƯU Ý: phương pháp này chỉ hiệu quả nếu bạn muốn xử lý TẤT CẢ các băng tần trong dữ liệu. Với kích thước của dữ liệu Landsat, chúng ta có thể muốn loại bỏ bớt các dải phổ không cần thiết và nếu khu vực được quan tâm nhỏ hơn toàn bộ cảnh ảnh, chúng ta cũng có thể cắt bỏ bớt dữ liệu.

all_bands = []
for i, aband in enumerate(post_fire_paths):
    all_bands.append(open_clean_bands(aband))
    all_bands[i]["band"]=i+1

 

landsat_post_fire_xr = xr.concat(all_bands, dim="band") 
landsat_post_fire_xr
landsat_post_fire_xr.plot.imshow(col="band",
                                 col_wrap=3,
                                 cmap="Greys_r")
plt.show()

Và kết quả được thể hiện như hình bên dưới.

 

Từng băng Landsat 8 riêng lẻ được thu thập. Hình ảnh này là của Vụ cháy Cold Springs ngay sau đám cháy.

Chúng ta cũng có thể vẽ các hình ảnh tổng hợp màu 3 dải cho Landsat bằng cách sử dụng hàm Earthpy ep.plot_rgb(). Tham khảo các dải vệ tinh Landsat trong bảng ở đầu trang này để tìm ra các dải màu đỏ, lục và lam. Hoặc đọc bài kết hợp băng tần Landsat 8 của ESRI.

ep.plot_rgb(landsat_post_fire_xr.values,
            rgb=[3, 2, 1],
            title="RGB Composite Image\n Post Fire Landsat Data")
plt.show()

 

Hình ảnh Landsat 8 với 3 băng tần RGB.

Chúng ta cũng có thể sử dụng đối số được tích hợp trong hàm Earthpyplot_rgb() để điều chỉnh độ sáng của sản phẩm.

Khi phạm vi giá trị độ sáng pixel gần bằng 0, hình ảnh tối hơn sẽ được hiển thị theo mặc định, chúng ta có thể sử dụng các giá trị để mở rộng đến toàn bộ phạm vi giá trị tiềm năng 0-255 nhằm tăng độ tương phản hình ảnh.

Dữ liệu Landsat với 3 dải màu RGB được điều chỉnh độ sáng và độ tương phản.

Chúng ta cũng có thể tạo biểu đồ để xem phân bổ giá trị pixel trong dải rgb được vẽ ở trên bằng đoạn mã lệnh sau.

# Plot all band histograms using earthpy
band_titles = ["Band 1", 
               "Blue", 
               "Green", 
               "Red",
               "NIR", 
               "Band 6", 
               "Band7"]

 
ep.hist(landsat_post_fire_xr.values,
        title=band_titles)

 
plt.show()

 

Landsat 8 histogram for each band.

Biểu đồ Landsat 8 cho mỗi dải.

Ý kiến

Hội thảo Ứng dụng công nghệ viễn thám của Italia trong  giám sát tài nguyên thiên và môi trường

Hội thảo Ứng dụng công nghệ viễn thám của Italia trong giám sát tài nguyên thiên và môi trường

Ngày 06/12/2023, Cục Viễn thám quốc gia tổ chức Hội thảo “Ứng dụng công nghệ viễn thám của Italia trong giám sát tài nguyên thiên nhiên và môi trường” tại Hải phòng thuộc Phi dự án: “Thiết lập và triển khai Hệ thống thông tin địa lý về Tính dễ tổn thương do biến đổi khí hậu, Đánh giá rủi ro và Giám sát môi trường cho Việt Nam dựa trên Công nghệ viễn thám” trong khuôn khổ Biên bản ghi nhớ về “Hợp tác trong lĩnh vực đánh giá rủi ro thiên tai, thích ứng và giảm thiểu thiệt hại do biến đổi khí hậu” giữa Bộ Tài nguyên và Môi trường Việt Nam và Bộ Môi trường, Đất đai và Biển Italia.

Ứng dụng tiến bộ khoa học và công nghệ trong ứng phó với biến đổi khí hậu, quản lý tài nguyên và bảo vệ môi trường

Công nghệ viễn thám kết hợp với công nghệ GIS hiện nay được đánh giá là giải pháp công nghệ hiệu quả nhất trong việc ứng phó với biến đổi khí hậu, quản lý tài nguyên và bảo vệ môi trường.