Mam taki obraz 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.
źródło
Mam taki obraz 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.
Operacje morfologiczne Rozwiń i Zmniejsz zostały utworzone dla tego rodzaju przetwarzania. Użyj ArcGIS (lub GRASS lub Mathematica ), ponieważ R
biblioteka „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.
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 Expand
i Shrink
zmniejsza 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ą focalFilter
do tworzenia funkcji do rozszerzania i zmniejszania. Następnie poczekaj około minuty na wykonanie operacji ...
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.
źródło
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.
Zmień klasyfikację rastra, aby zachować tylko 1s (białe komórki)
Zastosuj odległość euklidesową dla odległości dwukomórkowej (w tym przypadku 60 metrów) do przeklasyfikowanego rastra
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
Zastosuj ponownie odległość euklidesową do tego ujemnego rastra z tą samą odległością (60 m)
Weź to negatywnie, wykonując ten sam proces podany powyżej
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
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ź.
źródło