Здійснення зменшення шуму растрових і згладжування країв?


22

У мене таке растрове зображенняРастрові зображення

Я хочу видалити ізольовану точку шуму і згладити край (скажімо, білі одиничні точки, і я хочу, щоб краї об'єкта виглядали гладкими). Як я можу це зробити в ArcGIS або R?

Розмір комірки - 30 * 30.

Відповіді:


15

Для цього виду були створені морфологічні операції Expand and 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для створення функцій для розширення та скорочення. Потім зачекайте близько хвилини, щоб виконати операції ....


Привіт! Якщо ви не заперечуєте, чи можете ви надіслати мені свою контактну інформацію? Я хотів би визнати вас у своїх дослідженнях. Спасибі! @whuber
побачено

Чи знаєте ви еквівалентні команди в GRASS?
Річард

1
@Richard Я впевнений, що в GRASS є достатньо творчих способів зробити ці операції, але r.neighbors виглядає цілком підходящим до завдання.
whuber

12

Використовуючи розширення просторової аналітики, ви можете використовувати деякі з узагальнення інструменти . Деякі з них виконують подібні завдання, тому вам може знадобитися пограти з кількома, щоб отримати результати таким, яким ви хочете їх. Але я б подивився на інструмент « Фільтр більшості » та інструмент « Межа очищення ».

Ось сторінка про поняття цих двох інструментів.

Я не впевнений, як виконувати ці завдання в R, але ось пост про те, як виконати фільтр більшості за допомогою GRASS GIS.


2

Це в основному варіант відповіді @ whuber і використовує Евклідову відстань для розширення та зменшення меж растру, щоб згладити гострі кути растру, що посилюється процесом розширення та зменшення, який використовує кількість осередків для росту / посягання. Хоча Евклідова відстань імітує Розгорнути, ввести негативне значення для посягання / зменшення неможливо. Трюк полягає в тому, щоб розробити ітераційний процес, щоб зняти негатив растра Евклідової відстані та наростити його. Нижче наведено етапи для наведених зразкових зображень та знімки для уточнення.

  1. Перекласифікуйте растр, щоб зберегти лише 1s (білі клітини)

  2. Застосовуйте евклідову відстань для двоклітинної відстані (у цьому випадку 60 метрів) до рекламного растру, який класифікується

  3. Візьміть мінус розгорнутого растру за допомогою Reclassify (комірки зі значенням отримають NODATA, а NODATA буде перетворено на 1) або операторів Raster Calculator Con та IsNull

  4. Ще раз застосуйте Евклідову відстань до цього негативного растру з однаковою відстані (60 м)

  5. Поставте негатив до цього, дотримуючись того самого процесу, наведеного вище

  6. Використовуйте калькулятор растра або перекласифікуйте, щоб призначити клітинкам NODATA 0 на цьому растрі, щоб повернутися до початкових значень вибіркового растру

Розгорнути Зменшення проти Евклідової відстані

Розгорніть і зменшітьЕвклідова відстань

Примітка. Зелений колір показує оброблені клітини (білі клітини у запитаннях)

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

Основне питання, однак, воно не видаляє шум так успішно, як розширення / зменшення, і це трохи довше, ніж відповідь.


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