Całkowicie utknąłem w kwestii dotyczącej segmentacji szklistych przedmiotów. Muszę uzyskać obiekt tak precyzyjnie, jak to możliwe. Moje podejście było inne. Najpierw próbowałem usunąć tło, aby pozostały tylko ostre kontury. Ale działa to tylko w przypadku obiektów, które mają ostre krawędzie / gradienty. W przeciwnym razie sam obiekt również zostanie usunięty. Zamieściłem dwa różne obrazy.
Próbowałem usunąć tło za pomocą operacji morfologicznych, takich jak rozszerzenie skali szarości i podział na nie. ale to niewiele pomogło. po tym próbowałem k-średnich z k = 3, aby oddzielić zmodyfikowane tło od wartości szarości i czerni szkła. W niektórych przypadkach nie było to udane, ale nie ogólnie / średnio. Starałem się również wykryć sprytne wykrywanie krawędzi za pomocą ogólnego filtru blured, ale prowadziło to do słabszych wyników w postaci otwartych konturów, dużego hałasu itp. Pp.
Canny z automatycznymi wynikami progowymi:
testimg = imread('http://i.imgur.com/huQVt.png');
imshow(testimg)
imedges = edge(testimg,'canny');
imshow(imedges);
To samo dotyczy drugiego obrazu.
Jak widać, wewnątrz i na zewnątrz jest dużo hałasu, a podwójne krawędzie od granicy szyby. Nawet na krawędziach są luki.
Potrzebuję więc twoich rad, aby uzyskać ogólne podejście do rozwiązania tego problemu półprzezroczystych materiałów, a nie tylko tych dwóch obrazów.
1) Inne pomysły na usunięcie tła bez uszkodzenia obiektu?
2) Inne metody segmentacji w celu oddzielenia obiektu od tła?
Jeśli to możliwe, to dzięki Matlab, IPT lub statystycznym podpowiedziom. Wszelkie inne wskazówki są również mile widziane!
Z góry dziękuję za odpowiedź. szczerze
Odpowiedzi:
Dlaczego nie skorzystać z prostego filtru górnoprzepustowego 2D FFT (guassian)?
Zrobiłem to naprawdę szybko, używając MATLAB
Odłamek nr 1 przy użyciu FFT górnoprzepustowego:
To samo zrobiono na # 2.
Odłamek 2 przy użyciu FFT górnoprzepustowego:
Jak widać, tło i obszar szkła są usuwane, a tylko krawędzie są wykreślane. Nie spędzałem na tym czasu, ale możesz ustawić próg filtrowanej mocy wyjściowej HP, aby uzyskać bardziej ostre krawędzie, lub przesunąć HP wyżej.
Czy to więcej wyników, które chcesz uzyskać?
źródło
To nie jest próba odpowiedzi na całe pytanie, ale mam pomysł na temat „czyszczenia obrazu” .
Powiedziałeś, że już próbowałeś operacji morfologicznych , i jest to odmiana tego pomysłu, mam nadzieję, że jest to ulepszenie.
W tym artykule: A. Vichik, R. Keshet, D. Malah: Morfologia podwójna na półksiężycach i aplikacjach drzewnych proponuje sposób ulepszenia klasycznych operatorów morfologicznych w sposób, który może nadać im bardziej pożądane właściwości.
Artykuł sugeruje wybranie hierarchicznej reprezentacji obrazu zgodnie z pożądanymi właściwościami, a następnie proponuje metodę definiowania operatorów, takich jak erozja, dylatacja, otwieranie, odgrywanie roli w tej reprezentacji . Innymi słowy:
Wyjaśniłem te hierarchiczne struktury w kształcie drzewa w drugiej części tej odpowiedzi ( podejścia semantyczne ) , do której można dodać drzewo Extrema-Watershed wspomniane w artykule, który zamieściłem tutaj (i ponownie) .
Jest to uaktualnienie do (cytowanie autorów) „tradycyjnej morfologii matematycznej w skali szarości”, ponieważ operacje zachowują pożądane właściwości przedstawień . Np. Jeśli twoja hierarchiczna reprezentacja jest self-dualna, twoi operatorzy będą naprawdę self-dualni (np. Porównaj z quasi -sobą-dualnym otwieraniem-zamykaniem przez rekonstrukcję, która tak naprawdę nie jest dualistyczna).
Połączony artykuł przedstawia również niektóre wyniki w odfiltrowywaniu hałasu - możesz porównać ich wyniki z artykułu (i tezy wymienionej w artykule) do tego, czego potrzebujesz (przynajmniej wizualnie) i sprawdzić, czy zadziała to przed rozpoczęciem kodować.
Tak więc, wybierając najprostsze drzewo reprezentacji (maks./min.), Uzyskamy dokładnie klasyczne operacje, wybranie drzewa podwójnego, które najlepiej odpowiada Twoim potrzebom, może dać ci wystarczająco solidne podejście.
źródło