Післякласифікаційна обробка результатів автоматизованого дешифрування в ENVI

post-processing-envi

Коли ми виконуємо класифікацію, ми намагаємося отримати якомога кращий результат. Попри це, часто результат класифікації отримуємо хоч і добрий, але все ж не ідеальний. І жодні налаштування процедури класифікації не можуть підвищити точність розпізнавання класів. У цьому разі удосконалити результат можна за допомогою процедур післякласифікаційної обробки. До неї відносять процедури об’єднання класів, згладжування меж ареалів, об’єднання близьких дрібних ареалів, відсіювання дрібних ареалів. Ці процедури застосовують в різних комбінаціях та послідовностях, що залежить від специфіки завдання дешифрування.

У широкому розумінні до післякласифікаційної обробки також відносять оцінку точності класифікації: створення матриці помилок та ROC-кривих. В цьому пості мова про них йти не буде.

Розберемо післякласифікаційну обробку на наступному прикладі. Фрагмент знімка з супутника Landsat-5TM (рис 1, праворуч) був класифікований за допомогою класифікації без навчання за алгоритмом k-середніх (k-means). Цей фрагмент охоплює територію навколо Муромського водосховища, що розташоване в Харківському районі Харківської області на річці Муром.

 

 k-means-classification

Рис. 1. Фрагмент космічного знімка Landsat-5TM, що зображений у комбінації каналів 7:5:3 (ліворуч) та карта класифікації (праворуч)

 

Карта класифікації наведена на рисунку 1 ліворуч. Було виокремлено 12 класів. Треба перетворити карту класифікації так, щоб на ній було лише два класи – водна поверхня та інші поверхні. Крім цього треба, щоб в класу водної поверхні містилося лише водосховище. Маленькі ставки треба прибрати. Саме в такому вигляді результат дешифрування був показаний в пості про автоматизоване порівняння різночасових карт класифікації. Зараз ми розберемо, як були підготовлені дані для того посту.

 

Ідентифікування класів

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

Щоб ідентифікувати класи треба в таблиці змісту перетягнути карту класифікації вгору, щоб вона була вище ніж космічний знімок (рис. 2). Потім можна розгорнути перелік класів. Далі треба зняти галочки для всіх класів та по одному ставити їх знов. Окремі класи будуть зображуватися поверх знімку, так що по знімку можна буде бачити які об’єкти під ними та навколо них.

На рисунку 2 ліворуч встановлене відображення для класів, що відповідають водній поверхні. Це клас номер 1 (червоний колір) та клас номер 2 (зелений колір).Червоний клас відповідає глибоким ділянкам водойм, а зелений – маловоддям. Як ми бачимо, в зеленому класі багато помилок. У склад класу помилково потрапили деякі перезволожені ділянки в долині річки Муром. Також серед помилок деякі пікселі, які насправді відносяться до лісів і лісосмуг. Далі ми усунемо ці помилки за допомогою відсіювання.

img2

Рис. 2. Накладання класів на космічний знімок

 

Об’єднання класів

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

1) Щоб запустити процедуру об’єднання класів, оберіть в Тулбоксі команду Classification→Post Classification→Combine Classes. Після цього отримаєте вікно, в якому треба обрати карту класифікації.

2) Після обрання карти класифікації з’явиться вікно налаштувань об’єднання класів (Combine Classes Parameters) (рис. 3, ліворуч). У верхній частині цього вікна є два переліки – класи, які ми приєднуємо (Select Input Class), та класи, до яких ми приєднуємо (Select Output Class). Щоб обрати пару класів для об’єднання, вкажіть один клас в лівому переліку, а інший клас – в правому переліку. Після цього натисніть кнопку Add Combination. Зіставлена пара класів буде переміщена в перелік пар об’єднання (Combine Classes Parameters), що розміщений у нижній частині вікна Combine Classes Parameters. Коли ви зіставили всі пари класів, натисніть кнопку OK.. В нашому прикладі ми об’єднуємо перший та третій класи, які відповідають водній поверхні. А всі інші класи приєднуємо до некласифікованих пікселів.

3) Після того, як буде виконано зіставлення пар класів для об’єднання, з’явиться вікно Combine Classes Output. В ньому перемикачем Output Result to вказують спосіб збереження результатів. Це може бути збереження в тимчасову пам’ять (перемикач в позиції Memory) або в постійний файл (перемикач в позиції File).

 combine-classes-envi

Рис. 3. Обрання класів для об’єднання (ліворуч) та налаштування видалення пустих класів (праворуч)

 

4) Також у вікні Combine Classes Output можна вказати, чи видаляти пусті класи, чи ні. Для цього за допомогою кнопки зі стрілками треба завдати параметру Remove Empty Classes? одне з двох значень (Yes або No). Варіант No це коли у властивостях карти класифікації після об’єднання будуть значитися всі класи, що були спочатку. В нашому прикладі це буде 12 класів та некласифіковані пікселі. Це не дуже зручно. Краще обрати варіант Yes, щоб у властивостях нової карти класифікації залишилися лише ті класи, що фактично існують. В нашому прикладі це буде один клас (водні поверхні) та некласифіковані пікселі. Такій результат об’єднання класів показаний на рисунку 4. Зверніть увагу, скільки класів є на карті класифікації та скільки їх позначено в таблиці змісту.

img4

Рис. 4. Результат об’єднання класів

 

Відсіювання

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

1) Щоб запустити відсіювання пікселів зображення класифікації, оберіть у Тулбоксі Classification→Post Classification→Sieve Classes. Після цього з’явиться вікно, у якому треба обрати карту класифікації для відсіювання. У нас це результат об’єднання класів, що був отриманий на попередньому кроці.

2) Після того, як дані обрані, виникне вікно Sieve parameters, у якому треба налаштувати параметри відсіювання (рис. 5). Оберіть в ньому класи для відсіювання (можна обрати як усі класи, так і декілька окремих класів). Ми маємо лише один клас, але його все одно треба виділити.

img5

Рис. 5. Налаштування параметрів відсіювання

 

3) Вкажіть максимальний розмір ареалу в пікселях – поріг відсіювання (параметр Group Min Threshold). Усі ареали, що дрібніше цього значення, будуть відсіяні. Пікселі, що відсіялися, будуть приписані до класу «Unclassified». В нашому прикладі встановлений поріг відсіювання 200 пікселів (рис. 5). Він дозволяє відсіяти з класу водної поверхні все крім водосховища.

4) Опція «кількість сусідів» (Number of neighbors) завдає спосіб, яким визначають належність пікселя до групи пікселів. Обирають спосіб за допомогою кнопки зі стрілками. Є два варіанти – 8 сусідів та 4 сусідів. Варіант 8 сусідів значить, що пікселі одного класу відносяться до однієї групи, якщо вони мають спільні боки або кути. Тобто за таким варіантом якщо піксель належить до групи, то він може мати максимум вісім безпосередньо суміжних пікселів-сусідів, бо у пікселя є чотири боки та чотири кути. Варіант чотирьох сусідів значить, що пікселі одного класу відносяться до однієї групи, тільки якщо вони мають спільні боки. Тобто за таким варіантом якщо піксель належить до групи, то він може мати максимум чотири безпосередньо суміжних пікселів-сусідів.

5) Останнє налаштування – спосіб збереження результатів (в тимчасову пам’ять або в файл). Результат відсіювання для нашого приклада наведений на рисунку 6. Саме ці дані було використано для ілюстрування минулого посту.

img6

Рис. 6. Результат відсіювання дрібних ареалів

 

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

 

Агрегування

1) Процедура агрегування об’єднує близькі дрібні ареали та згладжує межі ареалів. Щоб запустити цей інструмент післякласифікаціїної обробки треба обрати в Тулбоксі команду Classification→Post Classification→Clump Classes. Після цього з’явиться вікно, в якому треба обрати карту класифікації.

2) Після обрання карти класифікації ви отримаєте вікно налаштування параметрів агрегування (Clump Parameters) (рис. 7). В ньому передусім треба обрати класи, для яких виконується агрегування. В нашому прикладі лише один клас, але його все одно треба виділити.

img7

Рис. 7. Вікно параметрів агрегування

 

3) Далі налаштовують ступінь агрегування. Її завдає розмір вікна-маски, в якому йде пошук сусідніх пікселів класу під час агрегування. Цей розмір вказують в пікселях за допомогою параметрів Operator Size Rows та Cols:. Чим більше цей розмір, тим вище ступінь агрегування. В нашому прикладі встановлений розмір 5 на 5 пікселів.

4) Останнє налаштування – спосіб збереження результатів (в тимчасову пам’ять або в файл). Результат агрегування для нашого приклада наведений на рисунку 8. Можна порівняти його з рисунком 6. Найбільше різниця впадає в очі для південного берега водосховища біля греблі.

img8

Рис. 8. Результат агрегування

 

Аналіз більшості/меншості

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

1) Щоб запустити аналіз більшості/меншості треба вибрати в Тулбоксі команду Classification→Post Classification→Majority/Minority Analysis. Після цього з’явиться вікно, в якому треба обрати карту класифікації. В нашому прикладі це карта класифікації, яку ми отримали після процедури відсіювання.

2) Після обрання карти класифікації з’являється вікно налаштування параметрів аналізу більшості/меншості. Спочатку оберіть у списку Select Classes: класи, для яких виконується аналіз більшості/меншості.

3) Дали зі допомогою перемикача Analysis method оберіть тип аналізу – аналіз більшості (Majority) або аналіз меншості (Minority).

4) Потім встановіть розмір вікна аналізу (параметр Kernel Size). Якщо ми виконуємо аналіз більшості, то додатково треба завдати вагу центрального пікселя (Center Pixel Weight). Вона показує, скільки раз враховується центральний піксель при визначенні розподілення пікселів по класах (за замовчання один раз).

5) Останнє налаштування – спосіб збереження результатів (в тимчасову пам’ять або в файл).

img9

Рис. 9. Вікно налаштування параметрів аналізу більшості/меншості

 

Результат аналізу більшості та меншості для нашого приклада наведений на рисунку 10. Аналіз більшості був виконаний для класу водойм та класу некласифікованих пікселів з розміром маски у 5 пікселів. Ця процедура призвела до згладжування меж. Аналіз меншості був виконаний тільки для класу водойм також з розміром маски у 5 пікселів. Ця процедура призвела до зменшення розміру об’єкта.

majority-minority-analysis-envi

Рис. 10. Результат аналізу більшості (ліворуч) та результат аналізу меншості (праворуч)