Oto pytanie do ekspertów w dziedzinie przetwarzania obrazu.
Pracuję nad trudnym problemem z widzeniem komputerowym. Zadanie polega na zliczeniu aparatów szparkowych (oznaczonych poniżej) na obrazach mikroskopowych DIC. Obrazy te są odporne na większość powierzchownych technik przetwarzania obrazu, takich jak operacje morfologiczne i wykrywanie krawędzi. Różni się także od innych zadań zliczania komórek.
Używam OpenCV. Mój plan polega na przejrzeniu potencjalnie użytecznych funkcji do dyskryminacji aparatów szparkowych.
- Klasyfikatory tekstur
- DCT (dyskretna transformacja kosinusowa / analiza w dziedzinie częstotliwości)
- LBP (lokalne wzorce binarne)
- HOG (Histogram zorientowanych gradientów)
- Wytrzymałe detektory funkcji (jestem sceptyczny)
- Harris rogi
- SIFT, SURF, STAR itp.
- Klasyfikator kaskadowy Haar / funkcje Viola-Jones
I ewentualnie zaprojektuj nowatorski deskryptor funkcji. Na razie pomijam wybór klasyfikatora.
Czego mi brakowało? Jak byś to rozwiązał? Rozwiązania podobnych problemów z wykrywaniem obiektów byłyby bardzo pomocne.
Przykładowe obrazy tutaj .
Po filtrze pasmowoprzepustowym:
Wykrywanie ostrych krawędzi nie jest obiecujące. Niektóre obszary obrazu są nieostre:
źródło
Odpowiedzi:
Przepraszam, nie znam OpenCV, a to bardziej etap wstępnego przetwarzania niż pełna odpowiedź:
Po pierwsze, nie chcesz wykrywacza krawędzi. Detektor krawędzi konwertuje przejścia (takie jak ten z ciemności na światło):
w grzbiety (jasne linie na ciemności) w następujący sposób:
Innymi słowy, wykonuje różnicowanie.
Ale na twoich obrazach jest światło padające z jednego kierunku, co pokazuje nam relief powierzchni 3D. Widzimy to jako linie i krawędzie, ponieważ jesteśmy przyzwyczajeni do oglądania rzeczy w 3D, ale tak naprawdę nie są, dlatego detektory krawędzi nie działają, a dopasowywanie szablonów nie będzie łatwo działać z obróconymi obrazami (idealne dopasowanie przy obrocie o 0 stopni faktycznie anuluje się całkowicie przy 180 stopniach, ponieważ światło i ciemność zbiegną się ze sobą).
Jeśli wysokość jednej z tych mętnych linii wygląda z boku tak:
wtedy funkcja jasności po podświetleniu z jednej strony będzie wyglądać następująco:
Oto, co widzisz na swoich obrazach. Powierzchnia czołowa staje się jaśniejsza, a powierzchnia tylna staje się ciemniejsza. Więc nie chcesz różnicować. Musisz zintegrować obraz wzdłuż kierunku oświetlenia, aby uzyskać oryginalną mapę wysokości powierzchni (w przybliżeniu). Wtedy łatwiej będzie dopasowywać różne elementy, niezależnie od tego, czy transformacja Hougha, dopasowanie szablonu lub cokolwiek innego.
Nie jestem pewien, jak zautomatyzować wyszukiwanie kierunku oświetlenia. Jeśli to samo dla wszystkich twoich zdjęć, świetnie. W przeciwnym razie musisz znaleźć największą linię kontrastu i założyć, że światło jest do niej prostopadłe lub coś w tym rodzaju. Na przykład obróciłem obraz ręcznie w kierunku, który uważałem za właściwy, przy świetle padającym z lewej strony:
Musisz jednak również usunąć wszystkie zmiany niskiej częstotliwości na obrazie, aby podświetlić tylko szybko zmieniające się funkcje podobne do linii. Aby uniknąć artefaktów dzwonienia, użyłem rozmycia Gaussa 2D, a następnie odjąłem go od oryginału:
Integracja (suma skumulowana) może łatwo ulec ucieczce, co powoduje powstawanie poziomych smug. Usunąłem je za pomocą kolejnego górnoprzepustowego gaussowskiego, ale tym razem tylko w kierunku poziomym:
Teraz aparaty szparkowe są dookoła białymi elipsami, zamiast białych w niektórych miejscach i czarnych w innych.
Oryginalny:
Zintegrowany:
Hough przekształcać może być stosowana do wykrywania elipsy grzbiet jak ten, wykonany z „pikseli krawędzi”, choć jest to bardzo drogie w obliczeniach i pamięci, i nie są one doskonałe elipsy tak musiałby to być trochę „niechlujstwa” detektora. Nigdy tego nie robiłem, ale istnieje wiele wyników Google dotyczących „ wykrywania elipsy ”. Powiedziałbym, że jeśli wykryjesz jedną elipsę w drugiej, w obrębie określonej przestrzeni poszukiwań, należy ją zaliczyć do stomii.
Zobacz także:
źródło
Pierwszą rzeczą, którą spróbowałbym, to dopasowanie szablonu, z szablonami obróconymi o wszystkie kąty z pewnym krokiem. Tutaj niezbędny jest obrotowy szablon. Również wybór szablonu może być nietrywialny - może być kilka z innym oświetleniem i może być rozmazany, aby umożliwić różnicę kształtów.
http://en.wikipedia.org/wiki/Template_matching#Template-based_matching_and_convolution
Dalej - HOG wygląda tutaj obiecująco. Innym rozwiązaniem może być użycie silnego detektora narożnego, takiego jak Moravec lub Shi-Tomasi (z nie maksymalnym tłumieniem) i poszukiwanie grup 2-narożnych lub 3-4 narożnych na tej samej linii co kandydaci. Po znalezieniu kandydatów możesz zastosować aktywny kontur do weryfikacji (nie jestem pewien, czy to naprawdę pomogłoby, ale taka jest możliwość)
http://en.wikipedia.org/wiki/Corner_detector
http://en.wikipedia.org/wiki/Active_contour
Jeszcze inną możliwością jest użycie transformaty Hougha dla elips, prawdopodobnie z nie 2, ale 3-4 wolnymi parametrami.
źródło
Częściowa odpowiedź. Znajdowanie kandydatów w Mathematica:
źródło
Zacznę od użycia czułego detektora krawędzi (np. Wielkości gradientu z niskim progiem), a następnie skorzystam z transformacji Hougha, aby znaleźć elipsy. Canny może nadal działać. Jestem pewien, że istnieją parametry, które można dostosować, aby były bardziej czułe i wychwytywać rozmyte krawędzie.
źródło