Растровая кластеризация с использованием QGIS

10

Я ищу способ преобразования классифицированного растра в полигоны на основе пространственных кластеров в каждом классе. Чтобы кластеры считались действительными, мне нужно, чтобы они состояли из минимального процента ячеек одного из классов.

Например: область, состоящая из 70% (или более) ячеек класса «1», будет считаться кластером класса «1», даже если эта область смешана с 30% ячеек, принадлежащих другим классам. Поэтому кластерный анализ должен основываться на расстоянии между ячейками одного и того же класса.

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

Например: в пределах указанной области должно быть 100 ячеек "класса 1", чтобы она считалась кластером.  

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

Spiran
источник
Вы можете преобразовать растр в вектор и использовать инструменты векторной кластеризации.
csk
Это вариант, но я думаю, что гораздо проще провести анализ в растровом формате, если это возможно. Преобразование в вектор, вероятно, приведет к созданию многоугольников, в которых теряется много деталей при объединении растровых ячеек или слишком много точек, которые можно обрабатывать (Большой набор данных).
Спиран
3
Я знаю, что это не решение QGIS, но не могли бы вы использовать python или R для создания функции окрестности, чтобы создать новый растр, в котором он просматривает каждую ячейку, и если> 70% ячеек в окрестности принадлежит классу тогда эта ячейка переклассифицируется в этот класс?
Лиам G
Это может сработать наверняка, спасибо! Я новичок в Python, но стоит попробовать.
Спиран

Ответы:

5

Если вы предпочитаете решать эту проблему в «растровой логике», то есть несколько фильтров, которые вы могли бы рассмотреть. Лучший выбор будет зависеть от пространственного распределения ваших пикселей каждого класса внутри ваших «фоновых» значений, но вот два возможных решения:

если ваши патчи, которые вы хотите удалить, относительно велики, то вы должны использовать «sieve» (растр> анализ> sieve в QGIS 3.2, который основан на gdal_sieve.py).

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

Если у вас есть что-то вроде эффекта «соль и перец» (много изолированных пикселей разных классов, но всего несколько пикселей на небольшие пути), вам следует использовать мажоритарный фильтр (например, перейдя к дополнительным инструментам из GRASS> raster> r. Соседи> выберите опцию «mode»). Обратите внимание, что этот фильтр (немного) повлияет на ваши границы.

r.neighbors - делает каждое значение категории ячеек функцией значений категорий, назначенных ячейкам вокруг него, и сохраняет новые значения ячеек в слое выходной растровой карты

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

radouxju
источник
Это было на самом деле в значительной степени, как я решил это. В основном, используя инструмент анализа окрестностей травы вместе с некоторыми вычислениями на стороне. Забыл опубликовать решение, хотя, большое спасибо за ваш вклад radouxju.
Спиран