Розбиття .tif зображення на кілька плиток? [зачинено]


13

У мене є зображення розміром 1 Гб (.tif), шириною і висотою 94000х71680. Я хотів би скласти це зображення на плитки 20000X20000, щоб я міг їх обробити.

Як я можу це зробити?


Anup , github.com/mapbox/rasterio надасть вам рясні масиви вхідних даних. Ви можете розділити це за допомогою методів numpy o scipy і легко зберегти кожну частину в новому файлі. Чи було б таке рішення кваліфікованим? Якщо це так, вам потрібно сказати, як слід ставитися до "нерівних шматочків" (71680 не є чітко розділеним на 20000).
bugmenot123

Відповіді:


23

Я пропоную два рішення: перше, що використовує QGIS, друге - за допомогою Python (GDAL).


Рішення за допомогою QGIS

У QGIS ви можете створити мозаїку VRT.

Дотримуйтесь цієї процедури (див. Зображення нижче):

  1. Завантажте растр на панель шарів ;
  2. Клацніть на ньому правою кнопкою миші та виберіть Save As...;
  3. Перевірте Create VRTваріант;
  4. Виберіть папку, в якій будуть збережені ваші результати;
  5. Встановіть масштаб (якщо ви хочете працювати над усією растрою, нічого не змінюйте);
  6. Виберіть, чи використовуєте поточну роздільну здатність (пропоную залишити її за замовчуванням);
  7. Встановіть максимальну кількість стовпців та рядків (у вашому випадку це має бути 20000 стовпців та 2000 рядків);
  8. Натисніть OKкнопку.

введіть тут опис зображення

Наприклад, використання параметрів у наведеному вище діалоговому вікні цього растрового зразка (параметри, які я встановлюю, вибираються випадковим чином):

введіть тут опис зображення

буде генерувати 100 плиток на шляху, визначеному на кроці 4:

введіть тут опис зображення

Завантажуючи їх у QGIS, вони виглядають приблизно так:

введіть тут опис зображення

Як правильно сказано в коментарях @ bugmenot123, результат виглядає дивним лише тому, що стиль кожного зображення підходить саме до розподілу значень на зображення (але дані ідеально чудові).


Рішення за допомогою Python (GDAL)

Ще один спосіб отримати той же результат - використання 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)

Вам, очевидно, потрібно адаптувати значення до вашого конкретного випадку.


2
Лише короткий коментар, що приклад того, як QGIS робить їх виглядає дивним лише тому, що стиль підходить до розподілу значень на зображення . Дані прекрасно :)
bugmenot123

Дякую, насамперед за вашу відповідь, дуже корисна, але я хочу досягти такого ж результату, використовуючи python? Чи можете ви мені в цьому допомогти? Тому що це більше посібник, а не програмний.
Ануп Панвар

@ bugmenot123 Спасибі, я редагую відповідь вашим корисним коментарем.
мгрі

@Anup Panwar, якщо я знайду рішення з PyQGIS, я відредагую свою відповідь! =)
мгрі

@HowToInQGIS Дякую, бо якщо ви хочете, щоб шлях у python, що також допоможе :)
Anup Panwar

5

Не розділяйся

Ви gdalbuildvrt , ви можете створювати віртуальні плитки, які будуть використовувати лише кілька байт на вашому диску. Тоді ви можете використовувати більшість програмних засобів, які візьмуть ваш сад як вхід для виконання вашої обробки.

Крім того, я б скоріше шукав інструмент, який може працювати з зображенням 1 Гбіт, ніж розділяти і об'єднувати зображення. Наприклад, OTB має більшість можливостей для стандартної (а іноді і розширеної) обробки зображень з великими зображеннями. Ви можете обернути OTB для Python або запустити його з QGIS або з командних рядків.


2

Використовуючи інструмент " Розділити растр", ви можете розділити растр на плитки на основі декількох методів поділу, включаючи розмір кожної плитки або кількість плиток .

Також див. Розщеплення растрових даних в ArcGIS


2

Ще одне рішення за допомогою 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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.