Bộ sưu tập hình ảnh

Tập hợp hình ảnh là một nhóm hình ảnh trong Earth Engine. Ví dụ: tập hợp tất cả hình ảnh Landsat 8 là một ee.ImageCollection. Giống như hình ảnh SRTM mà bạn đã làm việc, các tập hợp hình ảnh cũng có một mã nhận dạng. Tương tự như hình ảnh đơn lẻ, bạn có thể khám phá mã nhận dạng của một bộ sưu tập hình ảnh bằng cách tìm kiếm danh mục dữ liệu Earth Engine trong Trình chỉnh sửa mã và xem trang chi tiết của tập dữ liệu. Ví dụ: tìm kiếm "landsat 8 toa" rồi nhấp vào kết quả đầu tiên. Kết quả này phải tương ứng với tập dữ liệu USGS Landsat 8 Collection 1 Tier 1 TOA Reflectance (Phản xạ TOA cấp 1 Bộ sưu tập 1 Landsat 8 của USGS). Nhập tập dữ liệu đó bằng nút Nhập rồi đổi tên thành l8, hoặc sao chép mã nhận dạng vào hàm khởi tạo bộ sưu tập hình ảnh:

Trình soạn thảo mã (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');

Lọc bộ sưu tập hình ảnh

Điều đáng chú ý là bộ sưu tập này đại diện cho mọi cảnh Landsat 8 được thu thập trên khắp Trái Đất. Thường thì bạn nên trích xuất một hình ảnh hoặc một nhóm nhỏ hình ảnh để kiểm thử các thuật toán. Cách giới hạn bộ sưu tập theo thời gian hoặc không gian là lọc bộ sưu tập đó. Ví dụ: để lọc tập hợp thành những hình ảnh bao phủ một vị trí cụ thể, trước tiên, hãy xác định khu vực bạn quan tâm bằng một điểm (hoặc đường kẻ hoặc đa giác) bằng cách sử dụng các công cụ vẽ hình học. Di chuyển đến khu vực bạn quan tâm, di chuột lên Nhập hình học (nếu bạn đã xác định một hoặc nhiều hình học) rồi nhấp vào +lớp mới (nếu bạn chưa nhập dữ liệu nào, hãy chuyển sang bước tiếp theo). Lấy công cụ vẽ điểm () và tạo một điểm ở khu vực bạn quan tâm. Đặt tên cho lệnh nhập point. Giờ đây, hãy lọc bộ sưu tập l8 để chỉ lấy những hình ảnh giao với điểm, sau đó thêm bộ lọc thứ hai để giới hạn bộ sưu tập chỉ bao gồm những hình ảnh được thu thập vào năm 2015:

Trình soạn thảo mã (JavaScript)

var spatialFiltered = l8.filterBounds(point);
print('spatialFiltered', spatialFiltered);

var temporalFiltered = spatialFiltered.filterDate('2015-01-01', '2015-12-31');
print('temporalFiltered', temporalFiltered);

Ở đây, filterBounds()filterDate() là các phương thức lối tắt cho phương thức filter() chung hơn trên các bộ sưu tập hình ảnh, lấy ee.Filter() làm đối số. Khám phá thẻ Tài liệu của Trình chỉnh sửa mã để tìm hiểu thêm về các phương thức này. Đối số cho filterBounds() là điểm mà bạn số hoá và đối số cho filterDate() là 2 ngày, được biểu thị dưới dạng chuỗi.

Xin lưu ý rằng bạn có thể print() các bộ sưu tập đã lọc. Bạn không thể in quá 5.000 thứ cùng một lúc, chẳng hạn như bạn không thể in toàn bộ bộ sưu tập l8. Sau khi thực thi phương thức print(), bạn có thể kiểm tra các tập hợp được in trong bảng điều khiển. Lưu ý rằng khi bạn mở rộng ImageCollection bằng zippy (), sau đó mở rộng danh sách features, bạn sẽ thấy một danh sách hình ảnh, mỗi hình ảnh cũng có thể được mở rộng và kiểm tra. Đây là một cách để khám phá mã nhận dạng của từng hình ảnh. Một cách khác, mang tính lập trình hơn để lấy từng hình ảnh cho mục đích phân tích là sắp xếp bộ sưu tập để lấy hình ảnh gần đây nhất, cũ nhất hoặc tối ưu nhất so với một số thuộc tính siêu dữ liệu. Ví dụ: bằng cách kiểm tra các đối tượng hình ảnh trong các bộ sưu tập hình ảnh được in, bạn có thể đã quan sát thấy một thuộc tính siêu dữ liệu có tên là CLOUD_COVER. Bạn có thể sử dụng thuộc tính đó để lấy hình ảnh ít mây nhất vào năm 2015 trong khu vực bạn quan tâm:

Trình soạn thảo mã (JavaScript)

// This will sort from least to most cloudy.
var sorted = temporalFiltered.sort('CLOUD_COVER');

// Get the first (least cloudy) image.
var scene = sorted.first();

Bây giờ, bạn đã sẵn sàng hiển thị hình ảnh!

Ngoại lệ: Hiển thị hình ảnh RGB

Khi một hình ảnh nhiều dải tần được thêm vào bản đồ, Earth Engine sẽ chọn 3 dải tần đầu tiên của hình ảnh và hiển thị chúng dưới dạng màu đỏ, màu xanh lục và màu xanh dương theo mặc định, kéo dài chúng theo kiểu dữ liệu, như đã mô tả trước đó. Thông thường, cách này sẽ không hiệu quả. Ví dụ: nếu bạn thêm hình ảnh Landsat (scene trong ví dụ trước) vào bản đồ, kết quả sẽ không thoả mãn:

Trình soạn thảo mã (JavaScript)

Map.centerObject(scene, 9);
Map.addLayer(scene, {}, 'default RGB');

Xin lưu ý rằng trước tiên, bản đồ được đặt ở giữa hình ảnh ở tỷ lệ thu phóng 9. Sau đó, hình ảnh sẽ xuất hiện cùng một đối tượng trống ({}) cho tham số visParams (xem tài liệu Map.addLayer() để biết thông tin chi tiết). Do đó, hình ảnh được hiển thị bằng hình ảnh trực quan mặc định: 3 dải tần đầu tiên lần lượt ánh xạ đến R, G, B và được kéo giãn thành [0, 1] vì các dải tần là kiểu dữ liệu float. Điều này có nghĩa là dải khí dung ven biển ("B1") được kết xuất bằng màu đỏ, dải màu xanh dương ("B2") được kết xuất bằng màu xanh lục và dải màu xanh lục ("B3") được kết xuất bằng màu xanh dương. Để kết xuất hình ảnh dưới dạng một thành phần màu thực, bạn cần yêu cầu Earth Engine sử dụng các dải tần "B4", "B3" và "B2" của Landsat 8 cho R, G và B tương ứng. Chỉ định những dải tần cần sử dụng bằng thuộc tính bands của đối tượng visParams. Tìm hiểu thêm về các dải tần của Landsat tại tài liệu tham khảo này.

Bạn cũng cần cung cấp các giá trị minmax phù hợp để hiển thị độ phản xạ từ các mục tiêu thông thường trên bề mặt Trái Đất. Mặc dù có thể dùng danh sách để chỉ định các giá trị khác nhau cho từng dải tần, nhưng ở đây, bạn chỉ cần chỉ định 0.3max và dùng giá trị mặc định là 0 cho tham số min. Kết hợp các tham số trực quan hoá thành một đối tượng và hiển thị:

Trình soạn thảo mã (JavaScript)

var visParams = {bands: ['B4', 'B3', 'B2'], max: 0.3};
Map.addLayer(scene, visParams, 'true-color composite');

Kết quả sẽ có dạng như Hình 5. Xin lưu ý rằng mã này chỉ định đối tượng của các tham số trực quan hoá cho một biến để có thể sử dụng trong tương lai. Như bạn sẽ sớm nhận ra, đối tượng đó sẽ hữu ích khi bạn hình dung các bộ sưu tập hình ảnh!

Tutorial_api_05_true_color.png
Hình 5. Hình ảnh hệ số phản xạ TOA của Landsat 8 dưới dạng một tổ hợp màu thực, được kéo giãn thành [0, 0,3].

Hãy thử chơi với việc trực quan hoá các dải tần khác nhau. Một tổ hợp khác được ưa chuộng là "B5", "B4" và "B3", được gọi là tổ hợp màu giả. Một số hình ảnh tổ hợp giả màu thú vị khác được mô tả tại đây.

Vì Earth Engine được thiết kế để thực hiện các phân tích quy mô lớn, nên bạn không bị giới hạn khi chỉ làm việc với một cảnh. Giờ là lúc hiển thị toàn bộ bộ sưu tập dưới dạng một thành phần RGB!

Hiển thị bộ sưu tập hình ảnh

Việc thêm một bộ sưu tập hình ảnh vào bản đồ cũng tương tự như việc thêm một hình ảnh vào bản đồ. Ví dụ: sử dụng hình ảnh năm 2016 trong tập hợp l8 và đối tượng visParams đã xác định trước đó,

Trình soạn thảo mã (JavaScript)

var l8 = ee.ImageCollection('LANDSAT/LC08/C02/T1_TOA');
var landsat2016 = l8.filterDate('2016-01-01', '2016-12-31');
Map.addLayer(landsat2016, visParams, 'l8 collection');

Xin lưu ý rằng giờ đây, bạn có thể thu nhỏ và xem một bức ảnh ghép liên tục nơi hình ảnh Landsat được thu thập (tức là trên đất liền). Ngoài ra, xin lưu ý rằng khi sử dụng thẻ Inspector (Trình kiểm tra) và nhấp vào hình ảnh, bạn sẽ thấy một danh sách các giá trị pixel (hoặc một biểu đồ) trong phần Pixels (Pixel) và một danh sách các đối tượng hình ảnh trong phần Objects (Đối tượng) của trình kiểm tra.

Nếu phóng to đủ mức, có thể bạn sẽ nhận thấy một số đám mây trong hình ảnh ghép. Khi bạn thêm một ImageCollection vào bản đồ, ImageCollection đó sẽ xuất hiện dưới dạng một thành phần gần đây, tức là chỉ những pixel gần đây nhất mới xuất hiện (giống như khi gọi mosaic() trên bộ sưu tập). Đó là lý do bạn có thể thấy sự gián đoạn giữa các đường dẫn được thu thập tại các thời điểm khác nhau. Đây cũng là lý do khiến nhiều khu vực có thể xuất hiện mây. Trong trang tiếp theo, hãy tìm hiểu cách thay đổi cách kết hợp hình ảnh để loại bỏ những đám mây phiền toái đó!