Witam CV / Pattern Recognition Community,
Mam poważny problem z segmentacją obrazu. Scenariusz to atmosfera w piecu, która powoduje, że moja głowa oszaleje. I muszę wykryć kontury obiektów z różnych materiałów (szkło, ceramika, Al, Ir, ...) w krótkim czasie (<10 sekund), a nie tylko w jednym specjalnym przypadku. Potrzebuję również konturu w sekwencyjnym rzędzie pikseli dla kodu. Dlatego potrzebny jest również kod łańcucha lub tak zwane śledzenie krawędzi / konturu, więc otwarte otwory nie są dobre. W tle pojawiają się nieliniowe odgłosy, w przybliżeniu pyłu, cząstek lub czegoś innego, które pojawiają się od czasu do czasu.
Mile widziane sugestie Matlab lub OpenCV.
Aby było to bardziej jasne, zamieściłem inny obraz mojego celu i półprzezroczysty obiekt, który również należy wykryć. Także dalsze przykłady, o których należy pamiętać.
Jak widać na zdjęciu nr 1, cząstki znajdują się w prawej części obrazu i w pobliżu zewnętrznego obrysu gwiazdy, która jest obiektem. Również ogólny kontrast nie jest zbyt dobry. Sam obiekt stoi na ziemi, co nie jest istotne dla wykrywania konturu. Zdjęcie nr 2 pokazuje półprzezroczysty obiekt, co jest również możliwe.
Chcę znaleźć kontur / obwód tego obiektu, jak na następnym ekranie (czerwona linia). Dwa prostokąty (żółty) oznaczają początkowy (lewy) i końcowy (prawy). Niebieska linia jest niezauważalna.
Na początku myślałem, że mogę rozwiązać problem tej brudnej atmosfery za pomocą samych filtrów. Ale po honorowym okresie inwestowania właśnie zdałem sobie sprawę, że muszę znacznie wyeliminować lub zmniejszyć hałas, aby zwiększyć kontrast pierwszego planu i tła. Próbowałem wielu metod, takich jak wyrównanie histogramu, wyrównanie adaptacyjne Otsu, filtry liniowe (np. Gauss), filtry nieliniowe (mediana, dyfuzja), aktywne kontury, k-średnie, Fuzzy-c-średnie, a także Canny dla czystej Wykrywanie krawędzi w połączeniu z operatorami morfologicznymi.
- Canny: Cząsteczki i atmosfera powodują dziury, ale potrzebuję pełnego obrysu obiektu. Jednak przy zamykaniu, rozszerzaniu operatorów morfologicznych nie jest to wystarczające. Canny ma wciąż najlepsze wyniki ze wszystkich metod, które badałem ze względu na histerezę.
- Aktywne kontury: działają również na krawędziach / gradientach, zachowują się całkowicie szalone po zainicjowaniu wewnątrz obiektu, co może być spowodowane przez mapę krawędzi tworzącą „otwarty” obiekt. O ile wiem, kontur musi być zamknięty. Wypróbowałem to z różnymi pochodnymi (GVF / VFC / Classic Snake).
- k-Środki: Wyniki obejmują atmosferę pieca z powodu zamglonego tła. To samo dotyczy rozmytych-c-średnich. Wybrałem dwa klastry ze względu na oddzielenie obiektu od tła. Więcej klastrów prowadzi do słabszych wyników.
- Histogram / Otsu: Z powodu bardzo bliskiej intensywności szarości (imho!) Łączy obiekt z tłem. Wypróbowałem to za pomocą metod lokalnych i globalnych.
- Filtry: Szczególnie GLPF lub inny LPF rozmazują krawędzie, co nie jest tak dobre i nawet nie zmniejsza mglistej atmosfery.
- Filtry nieliniowe zachowują krawędzie. Większość z nich zajmuje zbyt dużo czasu na obliczenie dużych zdjęć. Na razie wziąłem szybki filtr dwustronny. Wyniki patrz poniżej.
Dlatego żadna metoda nie jest wystarczająca dla etapów przetwarzania końcowego, ponieważ uzyskane wyniki segmentu obiektowego są słabo konkurowane z istniejącym algorytmem. Ten istniejący algorytm jest bardzo lokalny i dlatego działa w tym szczególnym scenariuszu.
Pytam więc, czy coś zupełnie przeoczyłem ... Nie mam pojęcia, jak przetwarzać i jak uzyskać dobre wyniki konturów, bez przerw i dziur. Czy to możliwe bez wprowadzania wielu zmian w CCD i środowisko fizyczne? Z góry dziękuję!
Ostatnie podejście do tej pory (po długiej nocy eksperymentów z MO):
- Filtr dwustronny (zachowujący krawędzie, ale wygładzający jednorodne obszary)
- Canny (Sigma = 2, Próg = [0,04 0,08])
- Operacji morfologicznych (MO)
bwareopen
,closing
,remove
ibridge
bwlabel
do wybierania tylko obwodu konturu, który usuwa niepożądane dźwięki. brak zaktualizowanych zrzutów ekranu, ale działa dla gwiazdy. szkło ma wewnętrzny kontur, który jest połączony z konturem zewnętrznym, co można również zobaczyć na zrzucie ekranu poniżej.
Obawiam się więc, że potrzebuję specjalnego algorytmu do przejścia konturu zewnętrznego. Będzie to wyszukiwanie okolic w prawo / w lewo. Ten krok w prawo / w lewo może się przełączać, jeśli jest punkt narożny. jeśli jest przerwa, zwiększ promień i spójrz ponownie. jeśli istnieją dwa lub więcej możliwych punktów, wybierz ten, który uzyskał ten sam kierunek co poprzedni. Czy uważasz, że ten algorytm śledzenia konturów ma sens?