Xuất hình ảnh

Bạn có thể xuất hình ảnh từ Earth Engine ở định dạng GeoTIFF hoặc TFRecord. Hãy xem phần Tham số cấu hình để biết thêm các tuỳ chọn đầu ra.

Thiết lập mẫu

Bắt đầu bằng cách xác định dữ liệu hình ảnh sẽ được xuất:

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

// Load a landsat image and select three bands.
var landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515')
  .select(['B4', 'B3', 'B2']);

// Create a geometry representing an export region.
var geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236]);

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Load a landsat image and select three bands.
landsat = ee.Image('LANDSAT/LC08/C02/T1_TOA/LC08_123032_20140515').select(
    ['B4', 'B3', 'B2']
)

# Create a geometry representing an export region.
geometry = ee.Geometry.Rectangle([116.2621, 39.8412, 116.4849, 40.01236])

Tiếp theo, hãy xác định các tham số projection (thực chiếu) sẽ được dùng trong các lệnh xuất sau. Chúng ta sử dụng tham số crs để chỉ định hệ toạ độ và tham số crsTransform để chỉ định chính xác lưới pixel. Tham số crsTransform là danh sách các tham số từ một ma trận biến đổi affine theo thứ tự hàng chính [xScale, xShearing, xTranslation, yShearing, yScale, yTranslation]. Xuất xứ của hình ảnh được xác định bằng các giá trị xTranslationyTranslation, còn kích thước pixel của hình ảnh được xác định bằng các giá trị xScaleyScale. Xem ví dụ về ma trận affine.

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

// Retrieve the projection information from a band of the original image.
// Call getInfo() on the projection to request a client-side object containing
// the crs and transform information needed for the client-side Export function.
var projection = landsat.select('B2').projection().getInfo();

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Retrieve the projection information from a band of the original image.
# Call getInfo() on the projection to request a client-side object containing
# the crs and transform information needed for the client-side Export function.
projection = landsat.select('B2').projection().getInfo()

Thiết lập scale

Để rút gọn, bạn có thể chỉ định tham số scale và Earth Engine sẽ tính toán tham số crsTransform cho bạn. Tuy nhiên, việc chỉ đặt tỷ lệ của hình ảnh sẽ không chỉ định gốc của phép chiếu và có thể dẫn đến hình ảnh bị dịch chuyển so với hình ảnh khác có cùng kích thước pixel!

Lý do có thể xảy ra sự thay đổi là tham số scale được dùng để điền sẵn các giá trị xScaleyScale của crsTransform, nhưng các giá trị xTranslationyTranslation được tính toán sao cho nếu chia các giá trị này cho các giá trị xScaleyScale tương ứng thì phần dư sẽ bằng 0. Các tham số này chỉ định một lưới pixel, trong đó gốc của phép chiếu nằm ở góc của một pixel. Quy ước này khác với các tham số dịch mà một số nhà cung cấp dữ liệu sử dụng, trong đó sử dụng lưới được bù từ gốc của phép chiếu. Ví dụ: hình ảnh Landsat do USGS cung cấp sử dụng các thông số dịch bị chênh lệch 1/2 pixel so với gốc của phép chiếu (chênh lệch 15 m đối với các dải 30 m), trong khi hình ảnh Sentinel-2 do ESA cung cấp sử dụng các thông số dịch được căn chỉnh với gốc của phép chiếu. Nếu crsTransform được chỉ định trong một tệp xuất không khớp với crsTransform của hình ảnh gốc, thì các pixel đầu ra sẽ được lấy mẫu lại (sử dụng pixel kề gần nhất theo mặc định), điều này sẽ làm cho hình ảnh thu được bị dịch chuyển so với hình ảnh gốc.

Tóm lại, nếu bạn cần so khớp các pixel của hình ảnh đã xuất với một hình ảnh cụ thể, hãy nhớ sử dụng các tham số crscrsTransform để kiểm soát toàn bộ lưới.

vào Drive

Để xuất hình ảnh sang tài khoản Drive, hãy sử dụng Export.image.toDrive(). Ví dụ: để xuất một phần hình ảnh Landsat, hãy xác định một khu vực cần xuất, sau đó gọi Export.image.toDrive():

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

// Export the image, specifying the CRS, transform, and region.
Export.image.toDrive({
  image: landsat,
  description: 'imageToDriveExample_transform',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry
});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Export the image, specifying the CRS, transform, and region.
task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageToDriveExample_transform',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
)
task.start()

Khi chạy mã này, một tác vụ xuất sẽ được tạo trong thẻ Tasks (Tác vụ) của Trình soạn thảo mã. Nhấp vào nút Run (Chạy) bên cạnh tác vụ để bắt đầu tác vụ đó. (Tìm hiểu thêm về Trình quản lý tác vụ trong phần Trình chỉnh sửa mã). Hình ảnh sẽ được tạo trong tài khoản Drive của bạn bằng fileFormat đã chỉ định.

vào Cloud Storage

Để xuất hình ảnh sang một bộ chứa Google Cloud Storage, hãy sử dụng Export.image.toCloudStorage(). Để xuất hình ảnh Landsat trong ví dụ trước sang Cloud Storage thay vì Drive, hãy sử dụng:

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

// Export the image to Cloud Storage.
Export.image.toCloudStorage({
  image: landsat,
  description: 'imageToCloudExample',
  bucket: 'your-bucket-name',
  fileNamePrefix: 'exampleExport',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry
});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Export the image to Cloud Storage.
task = ee.batch.Export.image.toCloudStorage(
    image=landsat,
    description='imageToCloudExample',
    bucket='your-bucket-name',
    fileNamePrefix='exampleExport',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
)
task.start()

Tương tự như khi xuất sang Drive, hãy bắt đầu xuất từ thẻ Việc cần làm. Vị trí của bộ chứa Cloud Storage có thể ảnh hưởng đến hiệu suất và chi phí lưu trữ. Hãy xem mục Câu hỏi thường gặp về các yếu tố cần cân nhắc liên quan đến vị trí để biết thêm thông tin.

thành phần

Để xuất hình ảnh sang một thành phần trong thư mục thành phần Earth Engine, hãy sử dụng Export.image.toAsset(). Để quản lý các tài sản Earth Engine hoặc kiểm tra mức sử dụng hạn mức bộ nhớ, hãy sử dụng Trình quản lý tài sản. Ví dụ sau đây minh hoạ việc xuất một phần hình ảnh Landsat bằng cách sử dụng nhiều chính sách tạo kim tự tháp cho cùng một dải tần số. Chính sách tạo kim tự tháp cho biết cách Earth Engine tính toán các phiên bản có độ phân giải thấp hơn của tài sản. Tìm hiểu thêm về cách Earth Engine xử lý nhiều độ phân giải trong tài liệu về tỷ lệ.

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

// Get band 4 from the Landsat image, copy it.
var band4 = landsat.select('B4').rename('b4_mean')
  .addBands(landsat.select('B4').rename('b4_sample'))
  .addBands(landsat.select('B4').rename('b4_max'));

// Export the image to an Earth Engine asset.
Export.image.toAsset({
  image: band4,
  description: 'imageToAssetExample',
  assetId: 'exampleExport',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  pyramidingPolicy: {
    'b4_mean': 'mean',
    'b4_sample': 'sample',
    'b4_max': 'max'
  }
});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Get band 4 from the Landsat image, copy it.
band_4 = (
    landsat.select('B4')
    .rename('b4_mean')
    .addBands(landsat.select('B4').rename('b4_sample'))
    .addBands(landsat.select('B4').rename('b4_max'))
)

# Export the image to an Earth Engine asset.
task = ee.batch.Export.image.toAsset(
    image=band_4,
    description='imageToAssetExample',
    assetId='projects/your-project/assets/exampleExport',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
    pyramidingPolicy={
        'b4_mean': 'mean',
        'b4_sample': 'sample',
        'b4_max': 'max',
    },
)
task.start()

Bạn có thể cung cấp chính sách hình kim tự tháp mặc định cho mọi dải tần không được chỉ định rõ ràng bằng cách sử dụng khoá '.default'. Bạn cũng có thể chỉ truyền vào khoá '.default'. Ví dụ: để đặt tất cả các dải theo mặc định thành chính sách kim tự tháp "mẫu", hãy sử dụng {'.default': 'sample'}.

Tham số cấu hình

Hãy quan sát từ điển tham số cấu hình được truyền đến Export.image bao gồm scale (tính bằng mét) và vùng xuất dưới dạng ee.Geometry. Hình ảnh được xuất sẽ bao phủ vùng được chỉ định bằng các pixel ở tỷ lệ được chỉ định. Nếu không được chỉ định rõ ràng, CRS của đầu ra sẽ được lấy từ băng đầu tiên của hình ảnh cần xuất.

Bạn cũng có thể chỉ định dimensions, crs và/hoặc crsTransform của hình ảnh đã xuất. Hãy xem bảng thuật ngữ để biết thêm thông tin về crscrsTransform. Ví dụ: để căn chỉnh chính xác một khối pixel với một nguồn dữ liệu khác, hãy chỉ định dimensions, crscrsTransform. Để lấy một khối pixel có kích thước được xác định trước (ví dụ: hình thu nhỏ 256x256) bao phủ một vùng, hãy chỉ định dimensionsregion.

Bạn có thể chỉ định định dạng đầu ra hình ảnh (nếu đích đến không phải là toAsset()) bằng tham số fileFormat ('GeoTIFF' theo mặc định).

Tham số formatOptions

Các tuỳ chọn cấu hình khác được đặt bằng tham số formatOptions. Tham số này phải là một từ điển được khoá bằng các tuỳ chọn định dạng khác, dành riêng cho từng fileFormat như mô tả dưới đây.

GeoTIFF

GeoTIFF được tối ưu hoá trên đám mây

Để xuất GeoTIFF được tối ưu hoá trên đám mây, hãy truyền một giá trị cố định JavaScript cho formatOptions, trong đó khoá cloudOptimized được đặt thành true. Tiếp tục ví dụ trước:

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

// Export a cloud-optimized GeoTIFF.
Export.image.toDrive({
  image: landsat,
  description: 'imageToCOGeoTiffExample',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  fileFormat: 'GeoTIFF',
  formatOptions: {
    cloudOptimized: true
  }
});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Export a cloud-optimized GeoTIFF.
task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageToCOGeoTiffExample',
    crs=projection['crs'],
    crsTransform=projection['transform'],
    region=geometry,
    fileFormat='GeoTIFF',
    formatOptions={'cloudOptimized': True},
)
task.start()

Bạn có thể tải lại các tệp GeoTIFF được tối ưu hoá trên đám mây từ Cloud Storage vào Image. Hãy xem tài liệu tổng quan về Image để biết thông tin chi tiết.

Nodata

Chỉ định giá trị nodata GeoTIFF bằng cách sử dụng khoá noData trong tham số formatOptions. Ví dụ:

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

// Set a nodata value and replace masked pixels around the image edge with it.
var noDataVal = -9999;
landsat = landsat.unmask(noDataVal);

Export.image.toDrive({
  image: landsat,
  description: 'imageNoDataExample',
  crs: projection.crs,
  scale: 2000,  // large scale for minimal demo
  region: landsat.geometry(),  // full image bounds
  fileFormat: 'GeoTIFF',
  formatOptions: {
    noData: noDataVal,
  }
});

Thiết lập Python

Hãy xem trang Môi trường Python để biết thông tin về API Python và cách sử dụng geemap để phát triển tương tác.

import ee
import geemap.core as geemap

Colab (Python)

# Set a nodata value and replace masked pixels around the image edge with it.
no_data_val = -9999
landsat = landsat.unmask(no_data_val)

task = ee.batch.Export.image.toDrive(
    image=landsat,
    description='imageNoDataExample',
    crs=projection['crs'],
    scale=2000,  # large scale for minimal demo
    region=landsat.geometry(),  # full image bounds
    fileFormat='GeoTIFF',
    formatOptions={'noData': no_data_val},
)
task.start()

Xin lưu ý rằng giá trị nodata phải nằm trong phạm vi hợp lệ cho PixelType của hình ảnh. Bạn có thể kiểm tra PixelType bằng cách in siêu dữ liệu hình ảnh và xem thuộc tính data_type của dải đầu tiên. Bạn cũng có thể đặt PixelType của hình ảnh bằng cách truyền dữ liệu đến một loại cụ thể bằng các phương thức hình ảnh toShort() hoặc toInt().

TFRecord

Xem trang Định dạng dữ liệu TFRecord.

maxPixels

Tham số maxPixels dùng để ngăn chặn việc vô tình tạo ra các tệp xuất rất lớn. Nếu giá trị mặc định quá thấp đối với hình ảnh đầu ra dự kiến, bạn có thể tăng maxPixels. Ví dụ:

Export.image.toDrive({
  image: landsat,
  description: 'maxPixelsExample',
  crs: projection.crs,
  crsTransform: projection.transform,
  region: geometry,
  maxPixels: 1e9
});

Xuất tệp lớn

Nếu hình ảnh đầu ra có kích thước lớn, thì hình ảnh đó sẽ được xuất dưới dạng nhiều tệp. Nếu bạn đang xuất sang(các) tệp GeoTIFF, hình ảnh sẽ được chia thành các ô. Tên tệp của mỗi thẻ thông tin sẽ có dạng baseFilename-yMin-xMin, trong đó xMinyMin là toạ độ của mỗi thẻ thông tin trong hộp giới hạn tổng thể của hình ảnh đã xuất.

Nếu bạn đang xuất sang TFRecord, các tệp sẽ được thêm vào bằng -00000, -00001,... -0000N cho N+1 tệp. Bạn cần duy trì thứ tự này nếu dự định thực hiện suy luận trên các tệp và tải nội dung dự đoán lên Earth Engine dưới dạng hình ảnh. Hãy xem phần tải hình ảnh lên dưới dạng tệp TFRecord để biết thông tin chi tiết.

Xuất hình ảnh khi hình ảnh xuất hiện trong Trình soạn thảo mã

Để xuất hình ảnh được kết xuất trên màn hình trong Earth Engine, hãy tạo hình ảnh trực quan như minh hoạ trong phần Hình ảnh trực quanKết hợp và tạo ảnh ghép. Vì Trình soạn thảo mã sử dụng CRS 'EPSG:3857', hãy chỉ định CRS là 'EPSG:3857' trong quá trình xuất để lấy hình ảnh có cùng phép chiếu như hình ảnh hiển thị trong bản đồ Trình soạn thảo mã. Hãy xem phần về cách định cấu hình tính năng xuất hình ảnh để biết thông tin chi tiết về cách chỉ định độ phân giải và hệ toạ độ của đầu ra.