У мене є зображення розміром 1 Гб (.tif), шириною і висотою 94000х71680. Я хотів би скласти це зображення на плитки 20000X20000, щоб я міг їх обробити.
Як я можу це зробити?
У мене є зображення розміром 1 Гб (.tif), шириною і висотою 94000х71680. Я хотів би скласти це зображення на плитки 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 або з командних рядків.
Використовуючи інструмент " Розділити растр", ви можете розділити растр на плитки на основі декількох методів поділу, включаючи розмір кожної плитки або кількість плиток .
Також див. Розщеплення растрових даних в 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