У меня есть изображение размером 1 ГБ (.tif), с шириной и высотой 94000x71680. Я хотел бы разделить это изображение на плитки размером 20000X20000, чтобы их можно было обработать.
Как я могу это сделать?
У меня есть изображение размером 1 ГБ (.tif), с шириной и высотой 94000x71680. Я хотел бы разделить это изображение на плитки размером 20000X20000, чтобы их можно было обработать.
Как я могу это сделать?
Ответы:
Я предлагаю два решения: первое с использованием QGIS, второе с использованием Python (GDAL).
В QGIS вы можете создать мозаику VRT.
Пожалуйста, следуйте этой процедуре (см. Изображение ниже):
Save As...
;Create VRT
опцию;OK
кнопкуНапример, использование параметров в диалоговом окне выше в этом примере растра (параметры, которые я установил, выбираются случайным образом):
сгенерирует 100 плиток по пути, указанному на шаге 4:
Загружая их в QGIS, они выглядят так:
Как правильно сказал @ bugmenot123 в комментариях, результат выглядит странно только потому, что стиль каждого изображения соответствует распределению значений для каждого изображения (но данные в порядке).
Другой способ получить тот же результат - использование GDAL ( gdal_translate ).
Со ссылкой на тот же пример, описанный выше, вы можете использовать этот скрипт:
import os, gdal
in_path = 'C:/Users/Marco/Desktop/'
input_filename = 'dtm_5.tif'
out_path = 'C:/Users/Marco/Desktop/output_folder/'
output_filename = 'tile_'
tile_size_x = 50
tile_size_y = 70
ds = gdal.Open(in_path + input_filename)
band = ds.GetRasterBand(1)
xsize = band.XSize
ysize = band.YSize
for i in range(0, xsize, tile_size_x):
for j in range(0, ysize, tile_size_y):
com_string = "gdal_translate -of GTIFF -srcwin " + str(i)+ ", " + str(j) + ", " + str(tile_size_x) + ", " + str(tile_size_y) + " " + str(in_path) + str(input_filename) + " " + str(out_path) + str(output_filename) + str(i) + "_" + str(j) + ".tif"
os.system(com_string)
Вам, очевидно, нужно адаптировать значения к вашему конкретному случаю.
Не разделять
Вы gdalbuildvrt , вы можете создавать виртуальные плитки, которые будут использовать только несколько байтов на вашем диске. Затем вы можете использовать большинство программ, которые будут принимать ваши виртуальные входные данные в качестве входных данных для выполнения вашей обработки.
В качестве альтернативы, я бы предпочел инструмент, который может работать с изображением 1 Гб, чем разделять и объединять изображения. Например, OTB обладает большинством возможностей для стандартной (а иногда и продвинутой) обработки изображений с большими изображениями. Вы можете обернуть OTB для Python или запустить его из QGIS или из командной строки.
Использование Split растрового инструмента, вы можете разделить растр на плитки на основе несколько методов разделения , включая размер каждую плитку или ряд плиток .
Также см. Раздел «Расщепление растра» в ArcGIS.
Другое решение, использующее GDAL, - это инструмент gdal_retile.py :
mkdir image_tiles
gdal_retile.py -v -r bilinear -levels 1 -ps 20000 20000 -co "TILED=YES" -co "COMPRESS=JPEG" -targetDir image_tiles big_input_image.tif
Для получения дополнительной информации см .: http://www.gdal.org/gdal_retile.html