Zastrzeżenie : Wysłałem to pytanie na StackOverFlow, ale dowiedziałem się, że lepiej tu pasuje.
Jestem trochę nowy w przetwarzaniu obrazu, więc chciałbym cię zapytać o znalezienie optymalnego rozwiązania mojego problemu, a nie pomoc w kodzie. Nie mogłem wymyślić dobrego pomysłu, dlatego chciałem zapytać o radę.
Pracuję nad projektem wykorzystującym OpenCV do liczenia pojazdów z pliku wideo lub kamery na żywo. Inni ludzie pracujący nad takim projektem zwykle śledzą poruszające się obiekty, a następnie je liczą, ale zamiast tego chciałem pracować z innym punktem widzenia; prosząc użytkownika o ustawienie ROI (regionu zainteresowania) w oknie wideo i pracę tylko dla tego regionu (z niektórych powodów, jak na przykład nie zajmowanie się całą klatką i pewien wzrost wydajności), jak pokazano poniżej. (Użytkownik może ustawić więcej niż jeden ROI, a użytkownik jest proszony o ustawienie wysokości ROI około dwa razy w stosunku do normalnego samochodu na podstawie proporcji.)
Dotychczas poczyniłem pewne podstawowe postępy, takie jak aktualizowanie tła, filtry morfologiczne, progowanie i uzyskiwanie ruchomego obiektu jako obrazu binarnego, jak poniżej.
Po ich wykonaniu próbowałem policzyć białe piksele ostatniej progowej klatki pierwszego planu i oszacować, czy był to samochód, czy nie, sprawdzając całkowitą liczbę białych pikseli (ustawiłem dolną granicę na podstawie obliczeń statycznych, znając wysokość ROI) . Aby to zilustrować, narysowałem przykładową grafikę:
Jak widać, łatwo było obliczyć białe piksele i sprawdzić, czy rysuje krzywą do czasu i określić, czy samochód, czy coś w rodzaju hałasu.
Problem
Byłem całkiem udany, dopóki dwa samochody nie przejechały jednocześnie mojego ROI. Mój algorytm nieprawidłowo policzył je jako jeden samochód. Próbowałem różnych podejść do tego problemu i podobnych do takich jak długie pojazdy, ale nie znalazłem zadowalającego rozwiązania.
Pytanie
Czy można poradzić sobie z tym zadaniem poprzez takie podejście zliczania wartości pikseli? Jeśli nie, co sugerujesz?