Як вирівняти кольоровий баланс фальшивих композитів із заточеними зображеннями 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модуль або вручну регулюючи кольорові таблиці цікавих діапазонів

Деталі та приклад інструкцій

Пан-заточка / злиття

GRASS 7 містить спеціалізований модуль загальної заточки, i.pansharpenякий містить три методи різкості: перетворення Броуве , класичний IHS метод та метод, заснований на PCA .

i.pansharpenдобре працює з 8-бітовими растровими картами як вхідними. Якщо дані, що підлягають обробці, виходять за межі цього діапазону, тобто немає [0, 255], їх можна змінити, щоб вони вписалися в цей діапазон, використовуючи r.rescaleмодуль GRASS ' .

Враховуючи набір 11-бітових спектральних смуг (наприклад, синій, зелений, червоний, NIR та панорамуючий), що знаходяться між ними [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 потрібно встановити область інтересу, тобто відповідати мірі смуг (и) або іншим. У цьому конкретному випадку модуль береться за роздільну здатність, і отримані загально заточені растрові карти будуть мати таке ж високе (ер) дозвіл, що і смуга Panchromatic.g.regionrast=Blue_DNs_255

Приклад команди для 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. Дивовижна робота Нікоса!

Haziq, я не впевнений, чи втрачено і скільки "тонких" деталей при перетворенні 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 min та max кожного растрового діапазону, з яким оброблялися i.landsat.toar. Наприклад:

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

    Як ми бачимо, значення знаходяться між 0-1, які сильно відрізняються від оригінальних (між 0-255). Це пояснює, чому результат панорамної заточки виявився порожнім, оскільки використовуваний діапазон вартості дуже низький (нижче 1).

  2. Перетворити цю растрову смугу за допомогою r.recode . Використовуйте значення min і max, отримані на кроці 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. Недарма вони обидва виглядають по-різному!
  • Обробка зображень ландшафту для використання насправді може бути видатком з оподаткування часу . Краще щось робити, чекаючи, коли все це обробить, або хоча б випийте кавову каву та гарну музику, поки ви на ній;)

Сподіваюся, що це комусь принесе користь: потрібні мені дні, щоб знайти те, що не так ..


1
Дякую за ваші дослідження та зусилля, я також мав цю проблему в новій GRASS 7 від svn. Тепер кольори застеженого зображення в порядку. =)
Володимир

О так, я забув згадати, яку версію GRASS я запускаю - дякую @VladimirNaumov за нагадування! Я використовую GRASS 7svn; повинен був усвідомити, що ця проблема може бути чимось, що не трапляється у всіх версіях GRASS (я не пробував інших версій) ..

Назад до цього: ви можете перетворити растрові карти з плаваючою комою в цілі растрові карти, використовуючи r.mapcalcразом із його інтегрованою int()функцією. Я думаю, r.recodeце не призначене для використання в контексті вашої заявки.
Нікос Олександріс

1
Я думаю, що загальна "проблема" щодо того i.pansharpen, що вона очікує 8-бітових растрових карт як вхідних, тобто вхідні значення повинні коливатися від 0 до 255.
Нікос Александріс,

Також зауважте, що i.pansharpenце лише у trave7_trunk. Це версія розробки ... :-)
Нікос Олександріс
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.