Znalazłem kontury na dwóch obrazach z tym samym obiektem i chcę znaleźć przemieszczenie i obrót tego obiektu. Próbowałem z obróconymi ramkami ograniczającymi tych konturów, a następnie z ich kątami i punktami środkowymi, ale obroty ramek ograniczających nie mówią poprawnie o obrocie konturu, ponieważ są takie same dla kątów a + 0, a + 90, a + 180 itd. stopnie. Czy jest to inny dobry sposób na znalezienie obrotu i przesunięcia konturów? Może jakieś zastosowanie wypukłego kadłuba, wad wypukłych? Czytałem w Learning OpenCv o dopasowywaniu konturów, ale to nie pomogło. Czy ktoś mógłby podać jakiś przykład?
Przykłady:
Chcę wykryć na przykład różowy kwadrat, aw drugim przypadku długopis. Innymi przykładami mogą być kwadraty z pewnymi dziurami, gwiazdami itp. Jak powiedziałem, chcę zrobić coś uniwersalnego. Wszelkie sugestie są mile widziane, ponieważ chcę przetestować jak najwięcej metod.
Odpowiedzi:
Czy musisz się martwić różnicą skali między konturami? Jeśli nie, możesz po prostu znaleźć środek ciężkości każdego konturu i obliczyć przemieszczenie, odejmując jeden od drugiego. Następnie możesz obliczyć główne osie konturów i znaleźć kąt obrotu między nimi.
W przypadku skalowania można obliczyć współczynnik skali, biorąc stosunek odpowiednich osi głównych.
źródło
Jeśli nie musisz się martwić skalą lub zniekształceniami projekcyjnymi, pomocne mogą być tutaj kody łańcuchowe. Jeśli masz kody łańcuchowe o mniej więcej tym samym kształcie i tej samej skali, możesz znaleźć tłumaczenie z jednowymiarową korelacją fazową FFT http://en.wikipedia.org/wiki/Phase_correlation
Jeśli musisz wziąć pod uwagę zniekształcenie rzutowe, możesz również rozważyć możliwość użycia punktów charakterystycznych (takich jak narożniki) zamiast konturów.
źródło
W pytaniu, które mówisz
ale obawiam się, że dość trudno jest znaleźć „uniwersalne” rozwiązanie problemu.
Możesz kupić dostępne na rynku oprogramowanie do lokalizowania wzorców i zintegrować je z aplikacją, zwykle działają one całkiem dobrze w szerokim zakresie aplikacji. Aby dać ci wyobrażenie, jest to podręcznik referencyjny dla takiego produktu http://www.lmi3d.com/sites/default/files/support/4.2.0.70-hexsight_user_guide.pdf
Możesz także opracować rozwiązanie ad hoc dla konkretnego przypadku (na przykład dla długopisu na obrazie).
W przeciwnym razie możesz dokładnie przestudiować problem, zaczynając od bardzo podstawowych podstaw zakorzenionych w geometrii obliczeniowej ( http://www.cs.sunysb.edu/~alameter/files/shape-similarity.shtml ), gdzie nazywane są „kontury” „wielokąt”, czytanie takich rzeczy jak:
M. de Berg, O. Devillers, M. Kreveld, O. Schwarzkopf i M. Teillaud. Obliczanie maksymalnego nakładania się dwóch wypukłych wielokątów w tłumaczeniach. Theoretical Computer Science, 31: 613–628, 1998.
i
H. Ahn, O. Cheong, C. Park, C. Shin i A. Vigneron. Maksymalizacja nakładania się dwóch płaskich zestawów wypukłych pod sztywnymi ruchami. Geometria obliczeniowa: teoria i zastosowania, 37: 3–15, 2007.
i kończąc na „Hierarchicznym rozpoznawaniu w czasie rzeczywistym złożonych obiektów w obrazach ” Markusa Ulricha, który współpracuje z MVTec , innym domem oprogramowania sprzedającym narzędzia do rozpoznawania obiektów.
źródło