Jeśli chcesz wykryć kształty inne niż tylko okręgi, (i z obrazu zakładam, że robisz), poleciłbym Fazowanie pasujące do na szybki start, zwłaszcza, że masz dobry kontrast.
Podstawową przesłanką, wyjaśnia w prostych słowach, jest następujący:
- można zrobić wykrywanie krawędzi (np
cvCanny
w OpenCV)
- utworzyć obraz na odległość, gdzie wartość każdego piksela oznacza odległość od najbliższej krawędzi.
- Przyjmujesz kształty, które chciałbyś wykryć, definiujesz punkty próbki wzdłuż krawędzi kształtu i próbujesz dopasować te punkty do obrazu odległości. Zasadniczo wystarczy dodać wartości na obrazie odległości, które są "pod" współrzędnymi punktów próbkowania, biorąc pod uwagę określoną pozycję obiektów.
- Znajdź dobry algorytm minimalizacji, skuteczność tego zależy od aplikacji.
To podstawowe podejście jest rozwiązaniem ogólnym, zwykle działa dobrze, ale bez dalszych udoskonaleń jest bardzo powolne.
Zazwyczaj najlepiej jest najpierw rozdzielić interesujące obiekty, aby nie trzeba było zawsze wykonywać pełnego wyszukiwania na całym obrazie. Znajdź dobry threshold
, aby można było oddzielać obiekty. Nadal nie wiesz, który to obiekt, ale musisz tylko dopasować się w pobliżu tego obiektu.
Innym dobrym pomysłem jest, zamiast wykonywać pełne wyszukiwanie w wysokiej rozdzielczości obrazu, najpierw zrobić to w bardzo niskiej rozdzielczości.Wynik nie będzie bardzo dokładny, ale możesz znać ogólne obszary, w których warto wykonać wyszukiwanie w wyższej rozdzielczości, aby nie tracić czasu na obszarach, w których nie ma nic ciekawego.
Istnieje wiele bardziej zaawansowanych technik, ale nadal warto przyjrzeć się podstawowemu dopasowaniu fazowania, ponieważ jest to podstawa dużej liczby technik.