Ответы:
Для этого вида обработки были созданы морфологические операции Expand и Shrink . Используйте ArcGIS (или GRASS или Mathematica ), потому что R
«растровая» библиотека слишком медленная.
Часто это помогает немного поэкспериментировать с параметрами: вы должны решить, насколько необходимо увеличить или уменьшить изображение для очистки изображения; и обычно вы хотите сделать как можно меньше, потому что каждая операция имеет тенденцию сглаживать некоторые резкие детали. Вот последовательность, которая хорошо работает, чтобы устранить большую часть видимого «шума», сохраняя при этом большую часть деталей в «объектах». «Расширить» и «сжать» оба относятся к белым клеткам, так что расширение заставляет их расти наружу, а сокращение заставляет черные клетки проникать в белые области.
В столбце «Разница» используется цвет, чтобы выделить различия между начальным и конечным изображением на каждом шаге: синий для черного, который превратился в белый, и оранжевый для белого, который стал черным.
Если необходимо удалить оставшиеся фрагменты большего размера, лучше всего это сделать с помощью RegionGroup, чтобы идентифицировать их, после чего их можно уничтожить путем реклассификации. Это был вариант в самом начале, но немного первоначальная очистка с помощью Expand
и Shrink
уменьшает работу и обеспечивает желаемое сглаживание.
Кстати, я решил сделать восемь изображений на этой иллюстрации с помощью команд Mathematica, потому что они настолько просты, легки и быстры в выполнении:
i = Import["http://i.stack.imgur.com/umDg7.png"];
l = Dilation[k = Erosion[j = Dilation[i, 2], 3], 1]; (* This does all the work *)
delta = ColorCombine /@ {{i, j}, {j, k}, {k, l}, {i, l}}; (* Compares images *)
Рабочий процесс в ArcGIS такой же, но синтаксис будет длиннее. Если вы действительно хотите использовать R
, загрузите «растровую» библиотеку и воспользуйтесь ей, focalFilter
чтобы создать функции для расширения и сжатия. Затем подождите около минуты каждый для выполнения операций ....
Используя расширение Spatial Analyst, вы можете использовать некоторые из инструментов обобщения . Некоторые из них выполняют похожие задачи, поэтому вам, возможно, придется поиграться с несколькими, чтобы получить результаты, которые вы хотите получить. Но я бы взглянул на инструмент Majority Filter и инструмент Boundary Clean .
Вот страница о понятиях этих двух инструментов.
Я не уверен, как выполнить эти задачи в R, но вот пост о том, как выполнить фильтр большинства с использованием GRASS GIS.
Это в основном вариант ответа @ whuber и использует Евклидово расстояние, чтобы расширить и уменьшить границы растра, чтобы сгладить острые углы растра, что усиливается процессом расширения-сжатия, который использует количество ячеек для роста / вторжения. Хотя евклидово расстояние имитирует расширение, невозможно ввести отрицательное значение для посягательства / сжатия. Хитрость заключается в том, чтобы разработать итерационный процесс, чтобы взять отрицательный растр Евклидова расстояния и увеличить его. Ниже приведены шаги для данного образца изображения и снимки для пояснения.
Переклассифицировать растр, чтобы сохранить только 1 с (белые ячейки)
Применить евклидово расстояние для расстояния в две ячейки (в данном случае 60 метров) к реклассифицированному растру
Возьмите отрицание расширенного растра с помощью Reclassify (ячейки со значением получат NODATA, а NODATA - 1) или операторы Con и IsNull Raster Calculator.
Примените евклидово расстояние еще раз к этому отрицательному растру с тем же расстоянием (60 м)
Возьмите отрицание этого, следуя тому же процессу, указанному выше
Используйте Калькулятор растра или Переклассифицировать, чтобы присвоить ячейкам NODATA значение 0 в этом растре, чтобы вернуться к исходным значениям образца растра.
Развернуть Сжатие против Евклидова расстояния
Примечание: зеленый цвет показывает обработанные ячейки (белые ячейки в вопросах)
Преимущество евклидова расстояния заключается в том, что оно проходит надлежащее расстояние от каждой клетки через экстенты гипотенузы, которые сглаживают в остальном острые края. Параметр количества ячеек инструментов расширения и сжатия, с другой стороны, обрабатывает одинаковое количество ячеек для всех направлений, что дает ограничивающие прямоугольники, подобные ребрам, поэтому чрезмерно обобщает ребра / углы.
Основная проблема, тем не менее, это не удаляет шум так успешно, как расширение / сжатие, и это немного дольше, чем ответ.