Объединение каналов в GDAL: подробное руководство по объединению растровых каналов

GDAL (Библиотека абстракции геопространственных данных) — это мощная библиотека с открытым исходным кодом для работы с геопространственными данными. Одной из распространенных задач дистанционного зондирования и обработки изображений является слияние или объединение нескольких растровых каналов в одно изображение. В этой статье блога мы рассмотрим различные методы объединения групп с помощью GDAL, а также приведем примеры кода.

Метод 1: Использование утилиты gdal_merge.py
GDAL предоставляет утилиту под названием gdal_merge.py, которая позволяет объединять несколько растровых файлов или каналов в одно изображение. Следующий код демонстрирует, как использовать эту утилиту:

gdal_merge.py -separate -o merged.tif band1.tif band2.tif band3.tif

Метод 2: использование API GDAL Python
GDAL также предоставляет API Python, который позволяет выполнять различные геопространственные операции, включая объединение каналов. Следующий код демонстрирует, как использовать GDAL Python API для объединения каналов:

from osgeo import gdal
# Open the input bands
band1 = gdal.Open('band1.tif')
band2 = gdal.Open('band2.tif')
band3 = gdal.Open('band3.tif')
# Get the band data
data1 = band1.ReadAsArray()
data2 = band2.ReadAsArray()
data3 = band3.ReadAsArray()
# Create the output dataset
driver = gdal.GetDriverByName('GTiff')
output = driver.Create('merged.tif', band1.RasterXSize, band1.RasterYSize, 3, band1.DataType)
# Write the band data
output.GetRasterBand(1).WriteArray(data1)
output.GetRasterBand(2).WriteArray(data2)
output.GetRasterBand(3).WriteArray(data3)
# Set the projection and geotransform
output.SetProjection(band1.GetProjection())
output.SetGeoTransform(band1.GetGeoTransform())
# Close the datasets
band1 = None
band2 = None
band3 = None
output = None

Метод 3: использование NumPy
Если вы предпочитаете работать с NumPy, вы можете использовать его возможности манипулирования массивами для объединения растровых каналов. Следующий код демонстрирует, как объединить полосы с помощью NumPy:

import numpy as np
from osgeo import gdal
# Open the input bands
band1 = gdal.Open('band1.tif')
band2 = gdal.Open('band2.tif')
band3 = gdal.Open('band3.tif')
# Get the band data
data1 = band1.ReadAsArray()
data2 = band2.ReadAsArray()
data3 = band3.ReadAsArray()
# Merge the bands
merged_data = np.stack((data1, data2, data3), axis=-1)
# Create the output dataset
driver = gdal.GetDriverByName('GTiff')
output = driver.Create('merged.tif', band1.RasterXSize, band1.RasterYSize, 3, band1.DataType)
# Write the merged data
output.GetRasterBand(1).WriteArray(merged_data[:, :, 0])
output.GetRasterBand(2).WriteArray(merged_data[:, :, 1])
output.GetRasterBand(3).WriteArray(merged_data[:, :, 2])
# Set the projection and geotransform
output.SetProjection(band1.GetProjection())
output.SetGeoTransform(band1.GetGeoTransform())
# Close the datasets
band1 = None
band2 = None
band3 = None
output = None

Объединение диапазонов в GDAL — фундаментальная операция в дистанционном зондировании и обработке изображений. В этой статье мы рассмотрели три различных метода объединения полос: с помощью утилиты gdal_merge.py, GDAL Python API и NumPy. Каждый метод имеет свои преимущества и может использоваться в зависимости от ваших конкретных требований. Используя эти методы, вы можете эффективно объединять растровые каналы в одно изображение, обеспечивая расширенный геопространственный анализ и визуализацию.