Как сбалансировать цвет ложных композитов заостренных изображений Landsat в GRASS?

9

Всякий раз , когда я пытаюсь панорамирование заточить композиты некоторых изображений Landsat в GRASS с использованием i.pansharpen, i.fusion.broveyили IHS метода заточки, выход будет иметь некоторые или все из следующих характеристик:

  • композитный цвет имеет другой оттенок по сравнению с необостренным композитом
  • уровень яркости испорчен
  • весь композит стал полностью белым / полностью черным (при использовании изображений, предварительно обработанных для коррекции отражательной способности верхней части атмосферы или поверхностной отражательной способности в i.landsat.toar)

Я также попробовал все следующее; но цвета / яркость остались прежними или стали еще хуже:

  • Применяется i.landsat.rgbдо и после процесса заточки
  • Играли с -fили -pфлагом вi.landsat.rgb
  • Пытался r.colorsотредактировать таблицу цветов на серый / grey255 / grey.eq
  • Пробовал i.pansharpenс использованием всех методов Brovey / IHS / PCA
  • Играли с -lфлагом, i.pansharpenчтобы сбалансировать синий канал

В руководстве GRASS GIS объясняется, как выполнять панорамирование и цветовую балансировку, но я не могу понять, как объединить оба процесса в параллельном рабочем процессе. Я подозревал, что это из-за моего плохого понимания таблиц цветов, цветовой гистограммы и т. Д. В GRASS ..

Итак, кто-то может мне объяснить - как вы решаете проблемы с балансировкой цвета при работе с изображениями Landsat после обработки изображений в GRASS? Можете ли вы поделиться со мной вашим любимым рабочим процессом / методами?

Большое спасибо за любые отзывы!


источник

Ответы:

6

обзор

Один из рабочих подходов в GRASS-GIS версии 7 для получения приемлемого цвето-сбалансированного составного изображения после панхроматического

  1. проверить, находятся ли входные данные в 8-битном диапазоне внутри [0, 255]
  2. если данные находятся внутри [0, 255], то переходите к панхроматике ( i.pansharpen)
  3. если данные не находятся внутри [0, 255], измените их масштаб до этого диапазона ( r.rescale)
  4. пан-резкость любым из представленных методов (Brovey, IHS, PCA)
  5. Цветовой баланс автоматически с помощью i.landsat.rgbмодуля или ручной настройки таблиц цветов интересующих полос

Подробности и пример инструкции

Обострение / Fusion

GRASS 7 содержит специальный модуль пан-резкости, i.pansharpenкоторый включает три метода повышения резкости: преобразование Брови , классический метод IHS и метод, основанный на PCA .

i.pansharpenотлично работает с 8-битными растровыми картами в качестве входных данных. Если данные, подлежащие обработке, находятся вне этого диапазона, то есть [0, 255]они могут быть перемасштабированы для соответствия этому диапазону с помощью r.rescaleмодуля GRASS .

Учитывая набор 11-битных спектральных диапазонов (например, Blue, Green, Red, NIR и Pan) в диапазоне между [0, 2047], запрос к синему диапазону, например, вернул бы

r.info Blue_DNs -r
min=0
max=2047

Масштабирование синей полосы в диапазоне между [0, 255]

r.rescale in=Blue_DNs out=Blue_DNs_255 from=0,2047 to=0,255

Тот же шаг применяется как к остальным мультиспектральным полосам, так и к панхроматической полосе, представляющей интерес.

Как обычно при работе с GRASS, требуется установить интересующую область, т. Е. Соответствовать экстенту полосы или других полос. Само разрешение в этом конкретном случае обеспечивается модулем, и получающиеся в результате панхроматические растровые карты будут иметь такое же высокое (эр) разрешение, что и панхроматическая полоса.g.regionrast=Blue_DNs_255

Пример команды для действия Pan-Sharpening на основе IHS может выглядеть следующим образом

i.pansharpen pan=Pan_DNs_255 ms1=Blue_DNs_255 ms2=Green_DNs_255 ms3=Red_DNs_255 output=sharptest255 sharpen=ihs

Цветовой баланс

После завершения процесса модуль выводит

...
The following pan-sharpened output maps have been generated:
sharptest255_red
sharptest255_green
sharptest255_blue

To visualize output, run: g.region -p rast=sharptest255.red
d.rgb r=sharptest255_red g=sharptest255_green b=sharptest255_blue

Обычно этого должно быть достаточно, чтобы повторно сбалансировать цвета после повышения резкости, используя, например, модуль i.landsat.rgb или ручную настройку каждой из трех полос, которые составляют изображение RGB.

Скриншоты

... быть добавленным

Никос Александрис
источник
Я знал, что должен быть лучший способ! Теперь я могу свободно использовать модуль i.sharpen. Спасибо за указание на модуль r.rescale. Потрясающая работа Никос!
Хазик, я не уверен, что и сколько «мелких» деталей теряется при преобразовании 11-битных наборов данных в 8-битные. Например, изображения QuickBird - это 11-битный сенсор. Они доступны в 8-битном и 16-битном форматах. Пользователь должен решить, что делать. Конечно, было бы хорошо для i.pansharpenобработки всех видов форматов. Пожалуйста, взгляните на связанный «билет»: Билет № 2048: i.pansharpen, ограниченный 8-битными изображениями . С другой стороны, я просто не могу понять вещи и, следовательно, не могу правильно использовать i.pansharpen ...?
Никос Александрис
7

Я искал высоко и низко, и я думаю, что я обнаружил корень моих проблем. Я думаю, что у меня есть решение для них сейчас - но это немного грязно. Я уверен, что есть лучшие способы их решения. Делитесь, если знаете более простой способ!

Корни проблем:

  1. Вывод i.landsat.toar находится в плавающей запятой . Я понял, что когда я использую растры с плавающей точкой в ​​любом методе панорамирования, цвета будут испорчены. Эти алгоритмы почему-то предпочитали растры в исходной целочисленной форме.
  2. Модули панорамирования, такие как i.pansharpen и i.fusion.brovey модули, испортят цвета . Я не совсем понял алгоритмы, которые они использовали в этих модулях, но каким-то образом это повлияет на таблицы цветов, что приведет к разрушению результирующих изображений с резкой панорамой.

РЕШЕНИЕ:

  1. Преобразуйте вывод из i.landsat.toar float в int, используя r.recode .
  2. Используйте растры в качестве входных данных в методе панорамирования IHS ( i.rgb.hisи i.his.rgb). Я держусь подальше от использования i.pansharpenи i.fusion.brovey.

РАБОЧИЙ ПОТОК:

  1. Используйте r.info с -r флагом, чтобы получить минимальные и максимальные значения DN для каждого растрового диапазона, с которым были обработаны i.landsat.toar. Например:

    > r.info -r BAND1
    min=0.01
    max=0.370064120902708
    

    Как мы видим, значения находятся в диапазоне 0-1, что довольно сильно отличается от исходных (которые находятся в диапазоне 0-255). Это объясняет, почему выходные данные из панорамирования оказались пустыми, потому что используемый диапазон значений очень низок (ниже 1).

  2. Преобразуйте эту растровую полосу, используя r.recode . Используйте минимальное и максимальное значения, полученные на шаге 1, чтобы преобразовать в новый диапазон 0-255. Пример кода:

    r.recode input=BAND1 output=NEWBAND1 rules=- << EOF
    0.01:0.370064120902708:0:255
    EOF
    

    Мы можем проверить новые преобразованные значения с помощью r.info:

    > r.info -r NEWBAND1
    min=1
    max=254
    

    Значения в 0-255: теперь это можно использовать для процесса панхроматики.

  3. Примените таблицу оттенков серого к преобразованной полосе с помощью r.colors .

    r.colors NEWBAND1 color=grey
    

    До сих пор я получал наилучшие результаты, используя таблицу серого цвета - заостренные композиты, точно соответствующие оригинальным композитам. Другие альтернативы - выровнять таблицу серого цвета с color=grey.eqпомощью или использовать -eфлаг с color=grey. Или мы можем использовать i.landsat.rgbмодуль вместо r.colors..

  4. Повторите шаг 1-3 с другими растровыми полосами, которые мы намереваемся использовать в качестве композитов, включая пан растр (полоса 8). Использование сценариев будет высоко ценится здесь.

  5. Затем используйте обработанные растры в качестве входных данных в методе панхроматической обработки IHS . Например, при изготовлении композита из полосы 7,4,2:

    i.rgb.his r=NEWBAND7 g=NEWBAND4 b=NEWBAND2 hue=HUE int=INT sat=SAT
    

    Это выведет 3 слоя: слой оттенка, слой HUEинтенсивности INT, а также слой насыщенности SAT. Затем мы заменим слой интенсивности INTпан-растровой полосой NEWBAND8в i.his.rgb:

    i.his.rgb hue=HUE sat=SAT int=NEWBAND8 r=COMP742_red g=COMP742_green b=COMP742_blue
    

    Результирующие красные каналы COMP742_red , COMP742_green , COMP742_blue можно затем объединить с помощью d.rgbили r.composite..

ОБРАЗЕЦ ДО и ПОСЛЕ:

Перед заточкой:

Перед

После заточки:

После

Может быть, трудно отличить резкость при просмотре от таких маленьких изображений. Но что важно, так это то, что цвет заостренного изображения совпал с оригиналом. Миссия выполнена!

ДРУГИЕ ЗАМЕЧАНИЯ:

  • Не r.recode термальные группы (группа 6) . i.landsat.toarВыведите эти тепловые полосы в значениях температуры Кельвина (ничего общего со значениями DN). Держите r.recodeрутину на нормальных мультиспектральных и панорамирующих полосах (полосы 1-5,7,8).
  • Если мы даже никогда не используем i.landsat.toar , но получающиеся композитные материалы выглядят действительно неправильно , это обычно из-за несоответствия таблиц цветов до и после процесса панхроматики. Я применил r.colors RASTER color=greyк исходным растровым полосам до повышения резкости, и к результирующим каналам после повышения резкости, чтобы обеспечить близкое соответствие цветов.
  • Обычный случай составной проблемы неправильного цвета : исходные растровые полосы находятся в color=grey255, выход i.landsat.rgb- в color=grey.eq. Не удивительно, что они оба выглядят по-разному!
  • Обработка изображений LandSat для использования действительно может быть трудоемким процессом . Лучше чем-нибудь заняться, ожидая, пока все это обработает, или, по крайней мере, выпить немного смехотворного количества кофе и хорошей музыки, пока вы там;)

Надеюсь, это кому-то пошло на пользу: у меня ушло несколько дней, чтобы понять, что не так

Сообщество
источник
1
Спасибо за ваши исследования и усилия, у меня также была эта проблема в новом GRASS 7 от SVN. Теперь цвета с обостренным изображением в порядке. =)
Владимир
О да, я забыл упомянуть, какую версию GRASS я использую - спасибо @VladimirNaumov за напоминание! Я использую GRASS 7svn; должен был понять, что эта проблема может возникать не во всех версиях GRASS (я не пробовал другие версии) ..
Возвращаясь к этому: вы можете конвертировать растровые карты с плавающей точкой в ​​целочисленные растровые карты, используя r.mapcalcвместе с его интегрированной int()функцией. Я думаю, что r.recodeне предназначен для использования в контексте вашего приложения.
Никос Александрис
1
Я думаю, что общая «проблема» в i.pansharpenтом, что она ожидает 8-битные растровые карты в качестве входных данных, т.е. входные значения должны находиться в диапазоне от 0 до 255.
Никос Александрис
Также обратите внимание, что i.pansharpenэто только в grass7_trunk. Это версия для разработки ... :-)
Никос Александрис