Растрова кластеризація за допомогою QGIS


10

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

Наприклад: Площа, що складається з 70% (або більше) комірок класу "1", вважатиметься кластером класу "1", навіть незважаючи на те, що область змішана з 30% клітинок, що надаються іншим класам. Отже, аналіз кластеризації повинен базуватися на відстані між клітинами одного класу.

Іншим варіантом може бути базування кластеризації на мінімальній кількості комірок у певному класі разом із визначенням максимальної області пошуку.

Наприклад: У межах визначеної області має бути 100 комірок "класу 1", щоб він вважався кластером.  

Більшість інструментів, пов'язаних з кластеризацією, здається, працюють лише для векторів. Я дивився на кластерний аналіз SAGA-інструменту, але він не дуже відповідав моєму призначенню. Будь-які ідеї для вирішення цього чи інших інструментів, які можуть бути корисними?


Ви можете перетворити растр у векторний і скористатися інструментами векторної кластеризації.
csk

Це варіант, але я думаю, що зробити аналіз набагато простіше, якщо це можливо. Перетворення у вектор, ймовірно, породжує багатокутники, де багато деталей втрачається в об'єднанні растрових клітин, або занадто багато точок теж обробляються (Великий набір даних).
Спіран

3
Я знаю, що це не рішення QGIS, але чи можете ви використовувати python або R, щоб створити функцію сусідства, щоб ви створили новий растр, де він переглядає кожну клітинку, і якщо> 70% комірок в околицях належать до класу то ця клітина перекласифікується в цей клас?
Ліам G

Це могло б точно працювати, дякую! Я новачок у Python, але його варто спробувати.
Спіран

Відповіді:


5

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

якщо ваші патчі, які ви хочете видалити, відносно великі, тоді вам слід використовувати "сито" (растр> аналіз> сито в QGIS 3.2, засноване на gdal_sieve.py).

Сценарій gdal_sieve.py видаляє растрові багатокутники, менші за передбачений поріг (у пікселях) і замінює їх на значення пікселя найбільшого сусіднього багатокутника. Результат може бути записаний у існуючий растровий діапазон або скопійований у новий файл.

Якщо у вас є щось на кшталт ефекту "сіль і перець" (багато ізольованих пікселів різних класів, але всього кілька пікселів на невеликі патчі, то вам слід скористатися фільтром більшості (наприклад, перейти до інструментів додаткової програми GRASS> raster> r. сусідів> виберіть опцію "режим". Зверніть увагу, що цей фільтр (трохи) вплине на ваші межі.

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

Ви знайдете ті самі файли (фільтр більшості, класи просіювання) та інші (морфологія) в інструментах SAGA (SAGA> растровий фільтр), якщо вам зручніше


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