Przeprowadzasz redukcję szumów rastrowych i wygładzanie krawędzi?


22

Mam taki obraz rastrowyObraz rastrowy

Chcę usunąć izolowany punkt szumu i wygładzić krawędź (powiedzmy, że białe pojedyncze punkty i chcę, aby krawędzie elementu wyglądały gładko). Jak mogę to zrobić w ArcGIS lub w R?

Rozmiar komórki wynosi 30 * 30.

Odpowiedzi:


15

Operacje morfologiczne Rozwiń i Zmniejsz zostały utworzone dla tego rodzaju przetwarzania. Użyj ArcGIS (lub GRASS lub Mathematica ), ponieważ Rbiblioteka „rastrowa” jest zbyt wolna.


Często pomaga trochę poeksperymentować z parametrami: musisz zdecydować, ile trzeba rozszerzyć i zmniejszyć, aby wyczyścić obraz; i zwykle chcesz zrobić jak najmniej, ponieważ każda operacja ma tendencję do wygładzania niektórych ostrych szczegółów. Oto sekwencja, która działa dobrze, aby wyeliminować większość pozornego „szumu”, zachowując większość szczegółów w „bytach”. „Rozszerzanie” i „kurczenie się” odnoszą się do białych komórek, tak więc rozszerzanie powoduje, że rosną one na zewnątrz, a kurczenie się powoduje, że czarne komórki wnikają w białe regiony.

Tabela zdjęć

Kolumna „różnica” używa kolorów do podkreślenia różnic między obrazem początkowym i końcowym na każdym kroku: niebieski dla czerni, która zmieniła się w biały, i pomarańczowy dla bieli, która zmieniła się w czarny.

Jeśli większe pozostałe elementy muszą zostać usunięte, najlepiej to zrobić za pomocą RegionGroup, aby je zidentyfikować, po czym można je zatrzeć poprzez przeklasyfikowanie. Na początku była to opcja, ale niewielkie wstępne czyszczenie z Expandi Shrinkzmniejsza pracę i zapewnia pożądane wygładzenie.


Nawiasem mówiąc, postanowiłem zrobić osiem obrazów na tej ilustracji za pomocą poleceń Mathematica , ponieważ są one tak proste, łatwe i szybkie do wykonania:

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 *)

Przepływ pracy w ArcGIS jest taki sam, ale składnia będzie dłuższa. Jeśli naprawdę chcesz użyć R, załaduj bibliotekę „rastrową” i wykorzystaj ją focalFilterdo tworzenia funkcji do rozszerzania i zmniejszania. Następnie poczekaj około minuty na wykonanie operacji ...


Dzień dobry! Jeśli nie masz nic przeciwko, czy możesz przesłać mi swoje dane kontaktowe? Chciałbym podziękować wam w moich badaniach. Podziękować! @whuber
Widziano

Czy znasz równoważne polecenia w GRASS?
Richard

1
@ Richard Jestem pewien, że istnieje wiele kreatywnych sposobów wykonywania tych operacji w GRASS, ale r.neighbors wygląda dobrze dopasowany do tego zadania.
whuber

12

Korzystając z rozszerzenia Spatial Analyst, możesz skorzystać z niektórych narzędzi Generalizacji . Niektóre z nich wykonują podobne zadania, więc być może będziesz musiał pobawić się kilkoma, aby uzyskać wyniki tak, jak chcesz. Ale rzuciłbym okiem na narzędzie Filtr większości i narzędzie Czyść granicę .

Oto strona z koncepcjami tych dwóch narzędzi.

Nie jestem pewien, jak wykonać te zadania w R, ale tutaj jest post, w jaki sposób wykonać filtr większości za pomocą GRASS GIS.


2

Jest to w zasadzie wariant odpowiedzi @ whubera i wykorzystuje odległość euklidesową do rozszerzania i zmniejszania granic rastra w celu wygładzenia ostrych rogów rastra, który jest wyolbrzymiany w procesie rozszerzania-zmniejszania, który wykorzystuje liczbę komórek do wzrostu / wkroczenia. Chociaż odległość euklidesowa imituje ekspansję, nie można wprowadzić wartości ujemnej w celu wkroczenia / zmniejszenia. Sztuką jest opracowanie iteracyjnego procesu, aby wziąć negatywny raster odległości euklidesowej i go wyhodować. Poniżej znajdują się kroki dla podanych przykładowych zdjęć i migawki w celu wyjaśnienia.

  1. Zmień klasyfikację rastra, aby zachować tylko 1s (białe komórki)

  2. Zastosuj odległość euklidesową dla odległości dwukomórkowej (w tym przypadku 60 metrów) do przeklasyfikowanego rastra

  3. Weź negatyw z rozszerzonego rastra, używając funkcji Przeklasyfikuj (komórki o wartości otrzymają NODATA, a NODATA zostanie zmieniony na 1) lub operatory Con i IsNull Kalkulatora Raster

  4. Zastosuj ponownie odległość euklidesową do tego ujemnego rastra z tą samą odległością (60 m)

  5. Weź to negatywnie, wykonując ten sam proces podany powyżej

  6. Użyj Kalkulatora rastrowego lub Zmień klasyfikację, aby przypisać komórki NODATA do 0 w tym rastrze, aby powrócić do pierwotnych wartości przykładowego rastra

Rozwiń Skurcz vs. Odległość euklidesowa

Rozwiń i zmniejszOdległość euklidesowa

Uwaga: Zielony pokazuje przetworzone komórki (białe komórki w pytaniach)

Zaletą euklidesowej odległości jest to, że zajmuje ona odpowiednią odległość od każdej komórki poprzez zakres przeciwprostokątny, który wygładza w przeciwnym razie ostre krawędzie. Z drugiej strony liczba parametrów komórki narzędzi do rozszerzania i zmniejszania przetwarza tę samą liczbę komórek dla wszystkich kierunków, co daje krawędzie podobne do obwiedni, dlatego nadmiernie uogólnia krawędzie / narożniki.

Głównym problemem jest to, że nie usuwa szumu tak skutecznie jak rozszerzanie / zmniejszanie i jest nieco dłuższy niż odpowiedź.


Dla każdego, kto to robi i używa GRASS / QGIS - możesz użyć r. Wzrostu i wzrostu o dodatnią odległość euklidesową, a następnie ujemną odległość euklidesową
srha
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.