2014-09-04 16 views
8

Próbuję obliczyć skalę, obrót i translację między dwiema kolejnymi klatkami filmu wideo. Zasadniczo dopasowałem punkty kluczowe, a następnie użyłem funkcji opencv, aby obliczyć macierz homografii.
homography = findHomography(feature1 , feature2 , CV_RANSAC); //feature1 and feature2 are matched keypointsObliczanie skali, obrotu i tłumaczenia z macierzy homografii

Moje pytanie brzmi: w jaki sposób mogę użyć tej macierzy do obliczenia skali, obrotu i tłumaczenia ?.
Czy ktoś może podać mi kod lub wyjaśnienie, jak to zrobić?

+1

słowo kluczowe jest "homography rozkładu". Afair można wyodrębnić rotację z rozkładu QR, ale powinieneś lepiej google, że ... – Micka

+1

może ten (lub jego łącza) pomoże: http://stackoverflow.com/questions/15420693/how-to-get- rotacja-tłumaczenie-shear-from-a-3x3-homography-matrix-in-c-sharp – Micka

+1

i ten jeden) http://hal.archives-ouvertes.fr/docs/00/17/47/39/PDF /RR-6303.pdf – Micka

Odpowiedz

0

szacowania drzewo-wymiarowej transformacji i rotacji indukowane przez homography, istnieje wiele podejść. One of them dostarcza zamknięte formuły do ​​rozkładu homografii, ale są one bardzo złożone. Ponadto rozwiązania nie są nigdy wyjątkowe.

Na szczęście OpenCV 3 już implementuje tę dekompozycję (decomposeHomographyMat). Biorąc pod uwagę homografię i poprawnie skalowaną matrycę wewnętrzną, funkcja zapewnia zestaw czterech możliwych obrotów i tłumaczeń.

1

Załóżmy, że pierwsze i drugie komórki trzeciego rzędu są 0.

trzeciej kolumnie macierzy zawierającej tłumaczenie w kierunkach X, Y i tłumaczenia na 1, odpowiednio.

Jeśli chodzi o pozostałą lewą górną część 2x2 macierzy homograficznej (która zawiera ścinanie, skalowanie i obrót), można ją rozłożyć na różne sposoby. Wyjaśniono tu łatwy i szybki (ta metoda zakłada odwracalną macierz): https://math.stackexchange.com/questions/78137/decomposition-of-a-nonsquare-affine-matrix

+0

Tłumaczenie w 3D nie może być odzyskane całkowicie. – Vlad

0

Właściwa odpowiedź to użycie Homografii, ponieważ jest ona zdefiniowana dst = H. src i sprawdź, co robi z małymi segmentami wokół określonego punktu. Do tłumaczenia wystarczy wybrać pojedynczy punkt: Tłumaczenie = dst-H .src W celu obrócenia zbadaj dwa punkty p1 i p2. p1 '= H. p1, p2 '= H. p2. Teraz obliczyć kąt między wektorami p1 p2 i p1'p2 '. Do skali można użyć tej samej sztuczki, ale teraz wystarczy porównać długość | p1 p2 | i | p1'p2 '|. Aby skorzystać z taryfy, należy użyć innego segmentu prostopadłego do pierwszego i uśrednić wynik. Zobaczysz, że nie ma stałego współczynnika skali lub tłumaczenia. Będą one zależeć od lokalizacji src.

0

Pytanie wydaje się dotyczyć parametrów 2D. Macierz Homography przechwytuje dystorsję perspektywy. Jeśli aplikacja nie powoduje zniekształceń perspektywy, można przybliżać rzeczywistą transformację za pomocą macierzy transformacji afinicznej (która wykorzystuje tylko skalę, obrót, translację i brak ścinania/odbijania). Poniższy link da wyobrażenie o rozkładaniu transformacji afinicznej na różne parametry.

https://math.stackexchange.com/questions/612006/decomposing-an-affine-transformation

Powiązane problemy