Зробіть зону нодату оглядового ортофото оглядом білим?


9

У мене є набір зображень ортофото, які повністю заповнені даними, але якщо їх розмістити разом, покриття не утворює прямокутника, тому є ділянки з вузлами.

У MapGuide мені потрібно мати змогу відображати ці ділянки вузлів як білі, щоб моїм користувачам не довелося витрачати чорну фарбу під час друку.

У великих масштабах, де я відображаю оригінальні зображення з повною роздільною здатністю безпосередньо, це не проблема. Я просто встановив колір тла моєї карти на білий, а області, де немає ортофото, відображають фон.

Для продуктивності мені потрібно мати можливість об'єднати всі ці вихідні зображення в перекомпоновані складені оглядові зображення для відображення в менших масштабах, де більше ортофото можна переглянути відразу.

Я намагався використовувати GDAL для об'єднання та повторного впорядкування огляду, але за замовчуванням, схоже, створюється перекомпонований складений плитка GeoTIFF з чорним кольором у областях нодату, і MapGuide не дозволяє мені встановлювати чорний колір як прозорий на кольорових растрах.

Чи є у мене спосіб ефективно отримати те, що я хочу?

Я дав відповідь, в результаті чого я скористався GDAL, але хотів би бачити рішення, використовуючи інші утиліти для обробки зображень та програми GIS, як з відкритим кодом, так і з використанням власних.

Відповіді:


15

Найпростішим способом вирішити цю проблему було використання віртуального формату GDAL . Цей формат дозволив мені розглядати весь набір зображень як єдиний об’єкт зображення та перетворювати його в три відносно прості дії.

Створення віртуального набору даних

GDAL (включаючи файли бінарних файлів Windows GISInternals Тамаша Секереса та останні версії OSGeo4W ) включає утиліту під назвою gdalbuildvrt, яка може бути використана для створення початкового віртуального набору даних.

Один з простих способів цього - додати всі свої зображення до текстового файлу, а потім використовувати цей текстовий файл як вхід до gdalbuildvrt. Ось приклад (вам потрібно буде повернути другу команду в один рядок):

dir /b *.tif > my_images.txt
gdalbuildvrt 
  -hidenodata 
  -vrtnodata "255 255 255" 
  -resolution highest 
  -input_file_list my_images.txt 
  my_image.vrt

Це дасть вам файл XML, який ви можете розглядати як єдине зображення для всіх операцій GDAL. Він також внутрішньо представляє нодані як білі, але приховує визначення нодату від інструментів, що читаються з неї.

Створення перегляду впорядкованих даних

Далі ви виконаєте перекомпонування та виведення оглядового зображення. Це можна зробити за допомогою gdal_translate або gdalwarp . Для будь-якого з них пам’ятайте, що отриманий розмір буде width * height * 3(кількість 8 бітових діапазонів) байт. Якщо це буде більше 4 Гб, ви захочете переглянути параметри GeoTIFF для синтаксису, щоб вказати BigTIFF як свій вихід (-co "BIGTIFF = ТАК").

Для gdal_translate вам потрібно буде визначити розміри віртуального зображення за допомогою зручної команди gdalinfo . Візьміть ці розміри і розділіть кожен на деякий послідовний коефіцієнт, щоб визначити вихідну ширину та висоту вашого файлу в пікселях.

Команда буде виглядати приблизно так (в одному рядку):

gdal_translate
  -outsize 53120 14000
  -co "TILED=YES"
  -co "PROFILE=GEOTIFF"
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt
  my_image.tif

Для gdalwarp вам потрібно знати піксельний розмір; в цьому випадку я використовую .5 метр. Ви також захочете подзвонити за методом перекомпонування. Я віддаю перевагу кубічній лінії для оглядів ортофото. Це м'якше, але ви не збираєтесь використовувати їх до повного дозволу, і, на мій досвід, він створює більш стисливий образ, якщо ви використовуєте щось на зразок JPEG або ECW.

gdalwarp 
  -r cubicspline 
  -of GTiff 
  -dstnodata "255 255 255" 
  -tr 0.5 0.5 
  -co "PROFILE=GEOTIFF" 
  -co "BIGTIFF=YES" 
  -co "TILED=YES" 
  -co "BLOCKXSIZE=256"
  -co "BLOCKYSIZE=256"
  my_image.vrt 
  my_image.tif

Ви також можете розглянути можливість використання параметрів стиснення JPEG для цих перекомпонованих оглядів GeoTIFF; він значно скорочує вихідний файл із ( за Франком ) лише граничним покаранням продуктивності.

  -co "COMPRESS=JPEG" 
  -co "JPEG_QUALITY=80" 
  -co "PHOTOMETRIC=YCBCR"

Огляди

Ви також захочете запустити зручну команду gdaladdo над отриманим зображенням, щоб створити внутрішні "піраміди", щоб запити на нижчу роздільну здатність, ніж повні розміри зображення, могли задовольнятися підмножиною даних. Збільшення продуктивності в більшості випадків більше, ніж коштує місця на диску. Ви захочете пограти з рівнями, які ви тут використовуєте; для дуже великих зображень ви можете залишити деякі. Команда gdaladdo виглядає приблизно так:

gdaladdo 
  -r average 
  my_image.tif 
  2 4 8 16 32 64 128 256

Я б запропонував експериментувати з цими рівнями для досягнення оптимальної продуктивності. Ви можете виявити, що інший інтервал перекомпонування краще для вашої програми або, залежно від розміру зображення, ви можете скинути деякі більш високі цифри (або що більше потрібно)

Крім того, якщо ви генеруєте зовнішній огляд (використовуючи параметр -ro), подумайте про додавання рядків конфігурації стиснення JPEG:

  --config COMPRESS_OVERVIEW JPEG 
  --config PHOTOMETRIC_OVERVIEW YCBCR 
  --config INTERLEAVE_OVERVIEW BAND 

(Я вважаю, що вони успадковані від батьківського GeoTIFF для вбудованих оглядів)

Примітки

Зіткнувшись з цією проблемою, я поцікавився на каналі #gdal на freenode.irc.net. Це дивовижний ресурс, і я повністю вдячний Говарду Батлеру, Френку Вармердаму та навіть Руа за допомогу мені у цьому.


Дякую вам за повноту, що знайшли час, і я впевнений, що настав час, щоб охопити весь робочий процес, а не лише конкретний біт, який відповів на питання.
matt wilkie

1
було б цікаво подивитися, чи gdalsetnull.py працює над VRT, тоді "редагувати файл VRT у текстовому редакторі, додаючи <NoDataValue /> сутність" буде непотрібним.
matt wilkie

1
@matt wilkie, це безумовно було трохи переписування та форматування роботи для цього веб-сайту, але я раніше також висвітлював це як частину більшого робочого процесу в своєму блозі: jasonbirch.com/nodes/2009/08/11/290/fwtools- ftw-gdal Це пропозиція, безумовно, варто спробувати!
JasonBirch

загальна вікно cmd примітка: використовуйте caret ^для розриву рядка, який буде приєднаний при виконанні (наприклад, додайте ^до кінця кожного прикладу рядка коду вище, щоб зберегти як розбірливість, так і здатність до запуску). Важливий застереження: ніколи не
закінчуйте

3

Так, але за допомогою проб і помилок я зміг визначити, що -vrtnodata 255 впливає на позначення всього білого як нодату, а не тільки на карті, яка gdal2tiles потім обробляє з альфа-прозорістю відповідно до прапора -a.

Отже, ви закінчуєте деяке вихідне зображення, встановлене на прозорі, у моєму випадку білі частини штрихових доріг. Це термінал isnt, але, безумовно, було б непогано мати можливість вказати gdal2tiles колір "no src image", або в результаті оригінальних порожнеч у саду, або внаслідок деформації. Для мого набору відтінок блідо-синього був би просто річчю.

Після ще більшої кількості спроб та помилок здається, що прихована інформація є ключовим. Я не знаю, чому ці інструменти настільки мінімально задокументовані. Ось що працює для мене, gdal 1,8.

gdalbuildvrt test.vrt -vrtnodata "209 231 245" -hidenodata BX*.tif BY*.tif
gdal2tiles -p raster -s nztm.prj test.vrt out

також побачити GDAL nearblack утиліти gdal.org/programs/nearblack.html , який обробляє тільки пікселі навколо країв зображень і ігнорує середній
матові Уїлкі

0

Я не надто знайомий з GDAL, але я думаю, що є метод або команда, де ви можете встановити піксель певного значення з іншим значенням?

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

ОНОВЛЕННЯ растрового SET пікселя = 255 WHERE pixel = NoData;

Я хотів би знати відповідь!


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