Як додати інтерпретацію кольорів для растрових смуг за допомогою GDAL?


9

У мене є 3 окремі однодіапазонні файли GeoTIFF. Тлумачення кольорів для смуги - сірий. Я хочу 3-діапазонний RGB-файл. Я використовував gdal_merge.py

gdal_merge.py -separate file1.tif file2.tif file3.tif -o output_file.tif

Але інтерпретація кольорів для 3-х смуг результату output_file.tif є сірим, невизначеним, невизначеним. Крім цього, всі пікселі - 0 .

Якщо я виконую pct2rgb.py, я отримую файл RGB:

pct2rgb.py output_file.tif output_file_rgb.tif

Але, звичайно, пікселі також 0. Отже, у мене є 3 питання:

  • Чи gdal_merge.py є правильним інструментом для комбінування 3 односмугових файлів в одному 3-діапазонному RGB-файлі?
  • Чому я отримую не визначену інтерпретацію кольорів для груп?
  • Чи pct2rgb є правильним інструментом для трансформації 3-смугових файлів із такою інтерпретацією кольорів у файли RGB?

ОНОВЛЕННЯ : Растри не мають таблиці кольорів. Просто інтерпретація кольорів: сірий.

З іншого боку, значення пікселів сягають від 0 до 1023 (це навмисно)

Більше даних: вони мають поворотні растри (не на північ вгору), але всі вони мають однакову геотрансформацію.

ОНОВЛЕННЯ 2 : Я можу викривити зображення, щоб зробити їх північнішими, побудувати VRT і додати ColorInterp для кожної смуги, але я все одно отримую інтерпретацію кольору як сірий, невизначений, невизначений у вихідному результаті.

Проблема в тому, що мені потрібно створити кольорову таблицю, принаймні, у першій смузі. Я знаю спосіб їх створення , але не знаю, скільки записів має мати моя таблиця. Чому на прикладі GDAL Raster FAQ є 13 записів? Усі пікселі мають значення від 0 до 1023, якщо це допомагає.

ОНОВЛЕННЯ 3 : Мабуть, у форматі TIFF немає способу дійсно вказати кольорову інтерпретацію кожної смуги. Те, як GDAL будує інтерпретацію кольорів при читанні файлу TIFF, є комбінацією значення тегів PHOTOMETRIC і EXTRASAMPLES .

Читання про ці теги:

  • PHOTOMETRIC представляє кольоровий простір даних зображень. Значення 2 означає, що компонентами пікселя є RGB, але воно передбачає байтові пікселі, і у мене є UInt16 пікселів (я спробував -co "PHOTOMETRIC=rgb"і отримав помилку). Отже, я не можу вказати тег PHOTOMETRIC для вихідного файлу.

  • EXTRASAMPLES вказує, що кожен піксель має N додаткових компонентів. Я не впевнений, як використовувати цей тег, щоб створити мій об'єднаний файл. Або якщо мені це потрібно.

Отже, в оновленні 2 я пропоную створити ColorTable, але як? У моїх 3 вхідних файлах значення пікселів сягають від 0 до 1023. Чи потрібно їх відповідати кольорам? Чи потрібно створити таблицю ColorTable з 1024 входами? Як?

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


1
Спробуйте: Використовуйте gdal_merge так, як ви це зробили, тоді gdal_translate -co PHOTOMETRIC = RGB, з будь-якої причини gdal_merge не шанує -co. Це, здавалося, працює для мене. Хоча я, можливо, нерозумію вашу ціль.

Дякую за пораду! Я хочу об'єднати 3 односмугові геотифи в один 3-смуговий геотиф. Моя проблема в тому, що вихід gdal_merge насправді порожній (пікселі = 0). Я не можу використовувати цей висновок ні для чого.
Хорхе Аревало

Чи можна десь розмістити дані, щось здається не так.

Я запитав свого начальника, і я не можу публікувати дані :-(. Я насправді міг змішати файли з автономним кодом, який копіює смугу за діапазоном вхідних файлів на виході. Я хотів би зробити це з gdal_merge Моя проблема полягає в тому, що я не можу встановити інтерпретацію кольорів RGB для вихідного файлу з gdal_merge
Jorge Arévalo

Можливо, у мене була подібна проблема. Зробив це, працюючи з rgb2pct.py. Чому ?, я не знаю. Опис команди: Ця утиліта обчислить оптимальну таблицю псевдокольорових кольорів для даного RGB-зображення, використовуючи алгоритм середнього розрізу на гістограмі RGB, що зменшується. Потім я запускаю gdal_translate з розширенням rgb.

Відповіді:


6

gdal_merge.py - це правильний інструмент для "складання" вхідних зображень.

Якщо припустити, що у вашої першої смуги є дійсна таблиця кольорів, яку ви можете використовувати:

gdal_merge.py -separate -pct -o output_file.tif file1.tif file2.tif file3.tif

Примітка: Команда була переформатована -o output_file.tifперед списком входів.

З документів:

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

Я би перевірив ваш вихід, gdalinfo -statsщоб переконатися, що він правильно розміщений.

Оновлено для ОП

Зі списку osgeo , схоже, ви можете спробувати інший формат, щоб перевірити результати:

У форматі TIFF немає можливості реально вказати кольорову інтерпретацію кожної смуги. Те, як GDAL будує кольорову інтерпретацію при читанні файлу TIFF, є комбінацією значення тегів PHOTOMETRIC і EXTRASAMPLES.

-Еван (афіша) знає GDAL всередині та зовні.


Я насправді це зробив, але я отримую "ПОМИЛКА 6: SetColorTable () не підтримується для багатопробних файлів TIFF." І я отримую 0 за всі пікселі. Я не впевнений у значенні цієї помилки.
Хорхе Аревало

Гаразд, оновлене запитання. Мені потрібна таблиця кольорів для першої смуги.
Хорхе Аревало

Ммм ... спасибі за відповідь. Я пробую ці варіанти. Здається, я не можу використовувати PHOTOMETRIC = rgb, оскільки мій тип даних не є int. Але я на цьому ...
Хорхе Аревало

3

Перший спосіб, який я можу придумати, - це побудувати сад, редагувати та перекладати:

gdalbuildvrt -separate output.vrt file1.tif file2.tif file3.tif

додайте кольоровий тег interp, де потрібно:

...
<VRTRasterBand dataType="Byte" band="1">
<ColorInterp>Red</ColorInterp>
<NoDataValue>255</NoDataValue>
<ComplexSource>
  <SourceFilename relativeToVRT="1">test.tif</SourceFilename>
  <SourceBand>1</SourceBand>
  <SourceProperties RasterXSize="42" RasterYSize="22" DataType="Byte" BlockXSize="42" BlockYSize="22" />
  <SrcRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <DstRect xOff="0" yOff="0" xSize="42" ySize="22" />
  <NODATA>-32768</NODATA>
</ComplexSource>

і потім:

gdal_translate output.vrt output.tif

Я намагався, але мої растрові файли обертаються ...
Хорхе Аревало

Значить вони не мають однакових SRS / геотрансформ?

Ні, всі вони мають однакові геотрансформи, але вони не мають растру на північ (параметри обертання не 0). І gdalbuildvrt не підтримує обертові геоперетворення. Я не хочу їх викручувати.
Хорхе Аревало

Мммм, добре. Якщо я переконую їх для створення растерів на північ, я можу створити VRT і додати ColorInterp там, де потрібно, купити, я все одно отримаю сірий, невизначений, невизначений. Мені потрібно створити таблицю кольорів для першої смуги, але я не знаю як. Я оновлю питання.
Хорхе Аревало

1

Діапазон вхідних тонів сірого має значення від 0 до 1024, але RGB допускає значення лише від 0 до 255 для кожного діапазону.

Ви можете використовувати gdal_translate -scale [src_min src_max [dst_min dst_max]]для зміни масштабу вихідного файлу.

Під час другого запуску ви можете скласти три групи з gdal_merge.py і застосувати -co "PHOTOMETRIC=rgb".

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