Testowanie funkcji approxPolyPD i FitLine - nels3/Selfie-line-functions GitHub Wiki
Testowanie funkcji approxPolyPD i FitLine
W comparision.cpp jest kod działający z funkcjami "fitline" i "approxPolyPD" a w fitline_best.cpp moja implementacja "fitline", gdzie pracowałam mocno nad samą tą funkcją.
Na obrazkach poniżej przedstawiam porównanie działania tych funkcji na tym samym zdjęciu bez dużych obróbek. Na approxpoly zaznaczone punkty zwracane przez funkcje na żółto, a czerwono zwracana linia.
Funkcja FitLine
Funkcja FitLine dopasowuje do danego konturu linię która będzie minimalizacją danej funkcji (np sumy odległości punktów na konturze od prostej itp). W odpowiedzi dostajemy wektor tej linii (vx i vy) a także jeden punkt na linii (x i y). Z tego możemy łatwo znaleźć gdzie ta linia jest.
Problemy:
- jeśli mamy jeden kontur który zakręca (co u nas jest często) to przybliża nam jedną linią, z której nie wiem tak na prawdę jak mocno zakręca i kiedy. (funkcja minimalizująca zadawana z opisu mozno nie zmienia nam tej linii wyjściowej niestety też).
- nie wiemy gdzie zaczyna się i kończy dana linia. Problem ten jest bardzo widoczny przy liniach przerywanych które zakręcają (u nas też często). Wtedy dostajemy dwie linie które się przecinają daleko od linii w których by taka "narysowana przez połączenie była". To by stwarzało problemy przy implementacji dalej jak dla mnie.
Zalety:
- bardzo szybko dostajemy nachylenie linii -> szybko można znaleźć poziome i pionowe
Tutaj zaznaczyłam punkty które nam zwraca fitline:
Funkcja approxPolyPD
Funcja approxPolyPD bierze kontur i idzie nim wzdłuż linii aż punkt odchyli na konturze odchyli się od linii o daną wartość (zadaną przez nas). Wtedy stawia kolejny punkt. I tak dalej. Dzięki temu możemy łatwiej odnaleźć jak linia skręca. Czyli funkcja zwraca nam punkty przypisane do konturu.
Wyniki:
Problemy:
- dostajemy punkty nie linię, więc obróbka wiąże się najpierw z obliczeniem linii (która może być łamaną w 7 miejscach przykładowo) <- ale to ogolnie dobrze dla nas :)
Zalety:
- widać dobrze że linia skręca i jak szybko.
- widać punkty leżące bezpośrednio na linii, nie ma sprawy z takim łamaniem jak na fitline.
Próba wykorzystania jak najlepszego fitline
Tutaj efekty mojej pracy nad fitline (próbowałam z nią zrobić coś sensownego). Otrzymałam takie rzeczy:
A tutaj widoczne punkty:
Próbowałam też zrobić dzielenie obrazu na części i na nich stosowanie fitline. Efekty były czasem zadowalające ale częściej coś typu: