Witam poszukuję efektywnego algorytmu do odnajdowania kątu obrotu w obrazie. Jedyne co mi do tej pory przychodziło do głowy to binaryzacja i sumowanie wartości pixeli z obrazu lecz to jest mało efektowne rozwiązanie. Nie chce korzystać z opencv czy innych gotowych bibliotek. Dodam że nie ma linia prostych na obrazie i jedynie chyba w ostateczności mógłbym wpisać w jakieś elementy obrazu okręgi ale co robić dalej z tym... Pomoże ktoś ?
Co to jest kąt obrotu w obrazie?
Na temat odpowiadaj w postach.
To co określiłeś jest zbyt względne. Widziałeś ten popularny dom do góry nogami? Pod jakim kątem jest obrócone zdjęcie jego wnętrza i dlaczego akurat pod takim?
"Pod jakim kątem jest obrócone zdjęcie jego wnętrza i dlaczego akurat pod takim?" Robię zdjęcie raz a statyw ma jedną nogę krótsza przez co zdjęcie jest pod jakimś tam kątem zrobione. Żeby nie robić 2 zdjęcia chcę wykryć kąt tak by spoziomować dom.
Czyli masz tylko jeden obraz? I to na dodatek taki na którym nie ma linii prostych? Może być ciężko :/
Tak dokładnie tak :) Teraz myślę że może da się to ustalić przez przepuszczenie bucket fill na obrazie zbinarowanym by ustalić chociaż może środki obiektów i wyszukać jakieś okręgi by ustalić jakieś proste, tak chyba było w opencv.
Pomysł zupełnego laika w przetwarzaniu obrazów:
Dla prostej nachylonej pod pewnym kątem wyliczyć współczynnik korelacji pomiędzy odległością punktów obrazu od tej prostej i kolorem w tych punktach, oczywiście na jakiejś próbce. Zmieniać kąt prostej z jakimś skokiem i obserwować zmiany współczynnika korelacji. Znaleźć kąt, dla którego ten współczynnik jest największy.
Nie ma żadnych prostych w tym obrazie. Może po bucket fill na środkach tych obiektów poprowadzić prostą która przetnie jak najwięcej tych punktów w linii prostej i wtedy może iść tym tropem.
Chodziło mi o dowolne proste zdefiniowane w samym algorytmie, np. przechodzące przez środek obrazu, najpierw poziomą, potem nachyloną o 10 stopni, o 20 stopni itd.
- najpierw robisz obraz czarno biały (możesz na kilka sposobów)
- Robisz transformatę Hough (niekoniecznie na całym obrazie, ale na dużych fragmentach).
- liczysz średnią dla wszystkich katów (lub tylko te co cię interesują)
- albo jeszcze lepiej średnią dla jakiegoś kąta i kąta o 90 stopni większego.
- Szukasz wartości maksymalnej tej średniej dla otoczenia oczekiwanego konta (0/90 stopni).
- gotowe
Jeśli obraz nie ma wielu linii prostych to wykrycie kąta obrotu obrazu będzie bardzo skompilowane.
Najlepiej pokaż przykładowe obrazy.
Kiedyś kombinowałem z tym skryptem w imagemagick - http://www.fmwconcepts.com/imagemagick/multicrop/index.php
Spróbuj ;) Zobacz ilustracje.
Proszę bardzo te 2 obrazki są przykładowe.
Te obrazy opisaną przez mnie metodą przetworzą się bez najmniejszego problemu.
Z tą różnicą, że powinieneś szukać minimum albo robić analizę na negatywie (masz ciemne linie).
MarekR22 napisał(a):
Te obrazy opisaną przez mnie metodą przetworzą się bez najmniejszego problemu.
Z tą różnicą, że powinieneś szukać minimum albo robić analizę na negatywie (masz ciemne linie).
Na tych obrazkach A1, 2 nie działa kompletnie ten algorytm (rysował mi linie po całym obrazie) zacząłem się zastanawiać dlaczego, ponieważ inne obrazy działają z tym że muszą to być np sztucznie robione (odpal painta i narysuj kulki) wtedy dorysowuje proste i mam powiedzmy proste przecięte pod jakimś tam szukanym kątem. Z kolei jak zbinaryzowałem obraz, dałem negatyw oraz filtr medianowy to też miał problemy dopiero jak wpisałem okręgi w większe obiekty to od razu sobie poradził z dopisaniem prostych.
Robię coś źle ?
http://www.mathworks.com/help/vision/examples/find-image-rotation-and-scale-using-automated-feature-matching.html przykład obliczenia kątu obrotu i proporcji przeskalowania obrazu