Przeprowadziłem wiele badań i odkryłem metody, takie jak próg adaptacyjny, zlewnia itp., Które można wykorzystać do wykrywania żył w liściach. Jednak progowanie nie jest dobre, ponieważ wprowadza dużo hałasu
Wszystkie moje obrazy są szare, proszę, czy ktoś mógłby zasugerować, jakie podejście zastosować, biorąc pod uwagę ten problem w pilnej potrzebie pomocy
EDYCJA: Mój oryginalny obraz
Po progowaniu
Jak sugeruje odpowiedź, próbowałem następującego wykrywania krawędzi
- Sprytny
Zbyt duży hałas i niepożądane zakłócenia
- Sobel
- Roberts
EDYCJA: Wypróbowałem jeszcze jedną operację, otrzymuję następujący wynik, jest lepszy niż to, co próbowałem z canny i adaptacyjnym Co czujesz?
Odpowiedzi:
Nie szukasz krawędzi (= granic między rozszerzonymi obszarami o wysokiej i niskiej wartości szarości), szukasz grzbietów (cienkie linie ciemniejsze lub jaśniejsze niż ich sąsiedztwo), więc filtry krawędziowe mogą nie być idealne: Filtr krawędziowy będzie daje dwie flanki (po jednej z każdej strony linii) i niską odpowiedź na środku linii:
DODAJ : Jeśli poproszono Cię o wyjaśnienie różnicy między detektorem krawędzi a detektorem grzbietu. Z góry przepraszam, jeśli ta odpowiedź będzie bardzo długa.
Detektor krawędzi jest (zwykle) pierwszym operatorem pochodnym: jeśli wyobrażasz sobie obraz wejściowy jako krajobraz 3D, detektor krawędzi mierzy nachylenie zbocza w każdym punkcie tego krajobrazu:
Jeśli chcesz wykryć granicę rozszerzonego jasnego lub ciemnego regionu, jest to w porządku. Ale dla żył na obrazie OP da ci to samo: kontury po lewej i prawej stronie każdej żyły:
To wyjaśnia również „wzór podwójnej linii” w wynikach detektora krawędzi Canny:
Jak zatem rozpoznajesz te cienkie linie (np. Grzbiety)? Chodzi o to, że wartości pikseli może być (lokalnie) aproksymować 2nd rzędu wielomianu, czyli wtedy, gdy funkcja jest obraz , wówczas dla małych wartości i :g x y
lub w formie matrycy:
Macierz pochodna drugiego rzędu nazywany jest „ Matryca Hesji ”. Opisuje interesującą nas strukturę drugiego rzędu.⎛⎝⎜∂2g∂x2∂2g∂x∂y∂2g∂x∂y∂2g∂y2⎞⎠⎟
Część tej funkcji drugiego rzędu można przekształcić w sumę dwóch paraboli obróconych o pewien kąt, poprzez rozkład powyższej macierzy Hesji na czasy obrotu diagonalnej macierzy jej wartości własnych ( Rozkład macierzy ). Nie dbamy o rotację (chcemy wykrywać grzbiety w dowolnej orientacji), więc interesują nas tylko iλ1x2+λ2y2 λ1 λ2
Jakie kształty może mieć to przybliżenie funkcji? Właściwie nie tak wiele:
Aby wykryć grzbiety, chcemy znaleźć obszary na obrazie, które wyglądają jak ostatnie z powyższych wykresów, dlatego szukamy obszarów, w których główna wartość własna Hesji jest duża (w porównaniu do mniejszej wartości własnej). Najprostszym sposobem na wykrycie tego jest obliczenie głównej wartości własnej dla każdego piksela - i to właśnie robi poniższy filtr kalenicowy.
Filtr grzbiet będzie prawdopodobnie dać lepsze wyniki. Wypróbowałem wbudowaną
RidgeFilter
funkcję Mathematica (która oblicza główną wartość własną macierzy Hesji dla każdego piksela) na twoim obrazie:Jak widać, na każdą cienką ciemną linię jest tylko jeden pik. Plony binaryzacji i szkieletowania:
Po przycięciu szkieletu i usunięciu małych elementów (szumów) z obrazu, otrzymuję ten ostateczny szkielet:
Pełny kod Mathematica:
DODAJ:
Nie jestem ekspertem Matlaba, nie wiem, czy ma on wbudowany filtr kalenicy, ale mogę pokazać, jak zaimplementować go „ręcznie” (ponownie, używając Matematiki). Jak powiedziałem, filtr kalenicowy jest główną wartością własną macierzy Hesji. Potrafię obliczyć tę wartość własną symbolicznie w Mathematica:
=>12(Hxx+Hyy+H2xx+4H2xy−2HxxHyy+H2yy−−−−−−−−−−−−−−−−−−−−−−−√)
Musisz więc obliczyć drugie pochodne , , (używając sobela lub pochodnej filtru gaussowskiego) i wstawić je do powyższego wyrażenia i masz swój filtr kalenicy. H xy H yyHxx Hxy Hyy
źródło
Kiedy korzystam z wykrywania krawędzi Canny'ego (w Halconie), gdzie alfa wynosi 1, a dolny próg 8 i górny próg 13 (w skali 1-255), otrzymuję następujący wynik:
Dzięki dopracowaniu parametrów wynik uzyskany od Canny'ego można znacznie poprawić. Za pomocą tego obrazu możesz pominąć krótkie krawędzie, aby usunąć szum, i połączyć długie krawędzie, aby uzyskać końcowy efekt.
BTW: inny kolor oznacza inną krawędź.
Mogę uzyskać dość podobny wynik za pomocą tego internetowego wykrywacza krawędzi Canny :
źródło
Zgodnie z powyższą doskonałą odpowiedzią, oto jak to zrobić w Pythonie za pomocą scikit funcitons.
źródło
img
powinno być Mampng
plik i to nie działa.i1
jest to większa z wartości własnych, więc powinieneś jej użyć.Zamiast progowania zastosowałem proste wykrywanie krawędzi.
Używany GIMP z różnicą Gaussa - Radious Zewnętrzny: 3.0 i Wewnętrzny: 1.0.
Oto jak to wygląda.
Możesz dodatkowo zastosować filtr środkowy lub erozję / dylatację, aby usunąć część ziarnistego hałasu.
Oto strona wyjaśniająca implementację gimpa.
Powinieneś odwoływać się do różnych technik, takich jak Laplacian Gaussa lub Difference of Gaussin itp. Zobacz: http://homepages.inf.ed.ac.uk/rbf/HIPR2/log.htm#7
I ta odpowiedź W jaki sposób Laplacian jest używany do Maski wyostrzającej?
źródło
Temat ten zawsze cieszył się dużym zainteresowaniem, a jednak nie istnieje prawdziwy konsensus w tej sprawie. Dlatego postanowiłem dodać kilka słów.
Moje odpowiedzi na wcześniej zadane podobne pytania na temat wymiany stosów ( Q1 i Q2 ) dotyczyły subpikselowego algorytmu ekstrakcji struktury krzywoliniowej autorstwa Stegera. Ta metoda działała dość dobrze w wielu przypadkach i na szczęście, w tym w tym. Dlatego zamieszczam obraz wyjściowy tutaj: i tutaj z innym ustawieniem parametru i bez kolorowania połączonego: Aby uzyskać szczegółowe informacje i odpowiednie odniesienia, zobacz posty wymiany stosów, o których mówiłem.
źródło
W ramach mojego ostatniego roku badań inżynierskich musiałem studiować metody segmentacji naczyń krwionośnych na obrazach dna oka. Znalazłem tę metodę rekonstrukcji drzew (autorstwa Cohena, Laurenta D. i Mille'a, Juliena, szczególnie interesującą w użyciu wraz z metodami szybkiego marszu.
Inne dokumenty, które możesz zajrzeć:
Przydatne linki: - Frontowa propagacja w 2D i 3D
Mam nadzieję, że to trochę pomoże, choć nie jest to najnowocześniejszy.
źródło