2016-08-21 11 views
6

Próbuję zaimplementować wykrywacz kortów tenisowych za pomocą wideo nagranego z telefonu. Nakręciłem go z odległego kąta kortu tenisowego.OpenCV wykrywa linie kortów tenisowych za siecią

Oryginalny obraz wygląda tak.

Original Image

Używanie OpenCV canny i transformacji Hough Lines, jestem w stanie wykryć linie we własnej połowie, ale nie te, za głowę. Jak mogę poprawić ten proces i uzyskać niewykryte linie sądowe?

Przetwarzany obraz wygląda jak poniżej.

Processed Image


Zaktualizowano 2016-08-25

Dzięki chłopaki. Rozumiem, że ma sens wyprowadzanie linii sądowych poprzez dopasowanie wykrytych linii do linii modelu. Nie będę próbował wyszukiwania kombinatorycznego, aby znaleźć najlepsze linie do dopasowania modeli. Dlatego też próbowałem oddzielić linie poziome/pionowe, aby zmniejszyć złożoność obliczeniową. Próbowałem RANSAC w celu znalezienia znikających punktów (VP), które łączą dwie różne grupy linii, ale nie powiodły się prawdopodobnie z powodu błędu wykrywania (?).

Wykres rozproszenia parametrów linii we współrzędnych biegunowych jest jak poniżej. Chodzi zasadniczo o klasyfikację punktów na dwie grupy: górne punkty tworzące poziomą linię; dolne lewe punkty, które również tworzą linię z głębokim nachyleniem. Czy istnieje jakiś sposób, aby to zrobić? Dzięki

Polar Coord

Odpowiedz

3

Nie trzeba wykryć linie za głowę. Wiesz, że teren jest płaski, wiesz, że wymiary każdej strony boiska są takie same - więc musisz tylko wykryć pobliskie linie i możesz obliczyć, gdzie znajdują się brakujące linie.

W rzeczywistości naprawdę wystarczy wykryć pojedynczy róg, jeśli znasz charakterystykę aparatu i obiektywu.

+0

Hi @Martin, dziękuję. Podążyłem za twoją sugestią, ale utknąłem tam. jak dopasować wykryte linie do modeli? Chciałem spróbować wyszukiwania kombinatorycznego, ale myślę, że będzie za wolno. czy masz jakieś sugestie dotyczące zmiany, którą zaktualizowałem? –

+0

@YeqingZhang spójrz na sekcję kalibracji kamery/3d w opencv. Kort tenisowy jest podobny do szachownicy używanej do kalibracji - znasz rzeczywiste 3d współrzędne linii współrzędnych sądu i ich projekcję na obrazie. –

2

Oprócz uwag Martina, możesz spróbować użyć pewnego rodzaju rozmycia na obrazie przed uruchomieniem wykrywania krawędzi/linii. Przy odrobinie strojenia powinieneś być w stanie usunąć sygnał z sieci i utrzymać linie boiska.

Innym podejściem byłoby zmniejszenie grubych linii do pojedynczego piksela poprzez zeskanowanie obrazu od lewej do prawej (na przykład) w celu wykrycia przejścia z czerwonego/zielonego na biały iz powrotem do czerwonego/zielonego ponownie. Kiedy to nastąpi, możesz oszacować, że środek tych dwóch przejść jest punktem środkowym linii sądowej. To da ci dane, które możesz podać bezpośrednio do transformacji Hough. To oczywiście wymaga klasyfikacji poszczególnych pikseli jako sądu lub linii, co wydaje się, że obecnie nie robisz. Ten proces można również wykonać od góry do dołu, aby uzyskać drugi zestaw szacunków punktu środkowego.

+0

Dzięki @Drew Noakes. Próbowałem rozmycia gaussowskiego, ale wciąż nie miałem szczęścia. sygnał jest zbyt słaby ... Próbowałem też przerzedzać linie przez erozję i rozcieńczanie, ale myślę, że niektóre nieczytelne linie z filtrów kanciastych krawędzi będą tam zniknąć. –

1

rozmycia, spróbuj filtr dwustronnych

Przykład wejścia obrazu:

input image

cv2.bilateralFilter(img_gray,30,25,75) 

obraz wyjściowy:

blurred image without losing court information