Tính toán bằng hình ảnh

Giờ đây, khi bạn đã biết cách tải và hiển thị hình ảnh, đã đến lúc áp dụng một phép tính cho hình ảnh đó. Ví dụ: bạn có thể tính độ dốc của địa hình bằng cách truyền hình ảnh độ cao SRTM đến phương thức slope của gói ee.Terrain.

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

// Load the SRTM image.
var srtm = ee.Image('CGIAR/SRTM90_V4');

// Apply an algorithm to an image.
var slope = ee.Terrain.slope(srtm);

// Display the result.
Map.setCenter(-112.8598, 36.2841, 9); // Center on the Grand Canyon.
Map.addLayer(slope, {min: 0, max :60}, 'slope');

Lưu ý rằng trong mã ee.Terrain.slope(srtm), hình ảnh srtm được cung cấp dưới dạng đối số cho thuật toán độ dốc. Kết quả sẽ có dạng như Hình 3.

Tutorial_api_03_slope.png
Hình 3. Hình ảnh dốc.

Phép toán hình ảnh

Ngoài ra, còn có các phương thức trong lớp ee.Image có thể được gọi trên một đối tượng hình ảnh. Ví dụ: giả sử bạn muốn thực hiện một số phép toán bằng cách sử dụng các dải hình ảnh (đôi khi được gọi là phép toán dải hoặc đại số bản đồ). Ví dụ: bạn có thể quan tâm đến các phép toán lượng giác trên một hình ảnh tỷ lệ khung hình. Để thực hiện việc đó, trước tiên, hãy chuyển đổi một hình ảnh tỷ lệ khung hình thành radian, sau đó gọi sin() trên hình ảnh đó. Sử dụng lại hình ảnh srtm của chúng tôi,

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

// Get the aspect (in degrees).
var aspect = ee.Terrain.aspect(srtm);

// Convert to radians, compute the sin of the aspect.
var sinImage = aspect.divide(180).multiply(Math.PI).sin();

// Display the result.
Map.addLayer(sinImage, {min: -1, max: 1}, 'sin');

Kết quả sẽ có dạng như Hình 4. Bạn nên xem xét kỹ hơn mã aspect.divide(180).multiply(Math.PI).sin(). Bằng cách liên kết nhiều phương thức như thế này, mã sẽ cho biết "chia khía cạnh cho 180, nhân kết quả của phép chia đó với π và cuối cùng lấy sin". Bạn có thể thực hiện các phép toán phức tạp trên hình ảnh bằng cách kết hợp các phương thức theo cách này. Hãy xem Image tài liệu để biết danh sách đầy đủ các phép toán, add(), subtract(), multiply(), v.v.

Tutorial_api_04_sin.png
Hình 4. Sin của khía cạnh địa hình.

Số liệu thống kê về hình ảnh

Một lớp thao tác hữu ích khác trên hình ảnh liên quan đến việc tính toán số liệu thống kê về pixel trong các vùng hình ảnh hoặc lớp phủ raster-vector. Để tính toán số liệu thống kê trong Earth Engine, hãy sử dụng một trình giảm tốc như được biểu thị bằng các lớp trong gói ee.Reducer. Ví dụ: giả sử bạn quan tâm đến độ cao trung bình ở một số khu vực. Bạn có thể xác định một khu vực bằng cách vẽ một đa giác bằng công cụ vẽ hình học. Để vẽ một khu vực theo cách tương tác, hãy lấy công cụ vẽ đa giác (), sau đó số hoá một đa giác trên khu vực bạn quan tâm và nhấp vào Thoát khi bạn hoàn tất. Xin lưu ý rằng đối tượng ee.Geometry kết quả sẽ tự động được đặt tên là geometry và được thêm dưới dạng một mục nhập ở đầu tập lệnh của bạn. Đổi tên biến đó thành "polygon" bằng cách nhấp vào tên biến trong phần nhập và nhập tên mới.

Tiếp theo, hãy lấy giá trị trung bình của pixel trong đa giác bằng mã sau:

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

// Compute the mean elevation in the polygon.
var meanDict = srtm.reduceRegion({
  reducer: ee.Reducer.mean(),
  geometry: polygon,
  scale: 90
});

// Get the mean from the dictionary and print it.
var mean = meanDict.get('elevation');
print('Mean elevation', mean);

Có một số điều cần lưu ý ở đây. Trước tiên, hãy lưu ý rằng reduceRegion() là một phương thức có sẵn cho các đối tượng Image (tìm hiểu thêm về cách giảm các khu vực tại đây). Thứ hai, các đối số phương thức được cung cấp trong một đối tượng JavaScript được truyền dưới dạng một đối số duy nhất. (Cụ thể, các khoá của đối tượng là tên của các tham số phương thức. Các giá trị này là đối số cho phương thức). Thứ ba, tham số reducer chỉ định loại số liệu thống kê cần tính toán và tham số geometry chỉ định khu vực cần tính toán số liệu thống kê. Tham số scale là kích thước pixel tính bằng mét để sử dụng. Để tránh sự mơ hồ, bạn nên luôn chỉ định tỷ lệ khi thực hiện các thao tác giảm vì Earth Engine có thể không tự động xác định được tỷ lệ phù hợp từ dữ liệu đầu vào. (Tìm hiểu thêm về tỷ lệ trong Earth Engine).

Cuối cùng, giá trị trả về của reduceRegion() là một từ điển trong đó các khoá là tên dải tần và các giá trị là số liệu thống kê về pixel cho các dải tần. Phương thức get() trên một từ điển sẽ trả về giá trị tương ứng với khoá được cung cấp dưới dạng đối số. Trong trường hợp này, hình ảnh srtm có một dải tần số là "độ cao", vì vậy, mã ví dụ sẽ lấy số liệu thống kê đó từ từ điển và in ra.

Khi chạy mã này, nếu bạn gặp lỗi như sau:

Đừng nản chí! Bạn có thể làm một số việc để giải quyết lỗi này. Phương thức reduceRegion() có một quy trình kiểm tra để đảm bảo bạn cân nhắc xem có thực sự muốn đưa nhiều pixel vào quá trình tính toán của mình hay không. Điều này nhằm ngăn bạn vô tình làm điều gì đó ngớ ngẩn, chẳng hạn như cố gắng tính giá trị trung bình của mọi pixel một mét trên thế giới (đừng làm điều đó). Để giải quyết lỗi này, hãy đặt tham số bestEffort thành true bằng cách thêm bestEffort: true vào từ điển tham số, hoặc đặt tham số maxPixels thành một giá trị cao hơn giá trị mặc định là 10 triệu pixel, hoặc cả hai. Nếu bestEffort là true, Earth Engine sẽ tự động tính toán lại tỷ lệ sao cho không vượt quá maxPixels.

Ngoại lệ: Quy mô trong Earth Engine

Trong ví dụ trước, scale được đặt thành độ phân giải gốc của hình ảnh SRTM. Bạn có thể khám phá độ phân giải gốc của một hình ảnh bằng cách:

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

var scale = srtm.projection().nominalScale();
print('SRTM scale in meters', scale);

Nếu bạn chỉ định một tỷ lệ nhỏ hơn độ phân giải gốc, Earth Engine sẽ vui vẻ lấy mẫu lại hình ảnh đầu vào bằng cách sử dụng phương pháp láng giềng gần nhất, sau đó đưa tất cả các pixel nhỏ hơn đó vào quá trình tính toán. Nếu bạn đặt tỷ lệ lớn hơn, Earth Engine sẽ sử dụng các pixel đầu vào từ phiên bản tổng hợp của đầu vào (tức là lấy các pixel từ cấp cao hơn của kim tự tháp hình ảnh). Tìm hiểu thêm về cách Earth Engine xử lý tỷ lệ trong tài liệu này.

Cho đến nay, bạn đã làm việc với một hình ảnh có một dải tần. Trong trang tiếp theo, bạn sẽ tìm hiểu về hình ảnh nhiều dải tần và bộ sưu tập hình ảnh.