W OpenCV obliczam homografię między, powiedzmy, tymi dwoma obrazami:
i
Nie martw się o dziwną białą formę po prawej stronie, wynika to z posiadanego przeze mnie uchwytu smartfona. Homography, podanych findHomography () funkcji (za pomocą punktów wykrywane z Szybko detektora funkcji i deskryptora HammingLUT dopasowującego ) jest:
A = [ 1.412817430564191, 0.0684947165270289, -517.7751355800591;
-0.002927297251810, 1.210310757993256, 39.56631316477566;
0.000290600259844, -9.348301989015293e-05, 1]
Teraz używam tego samego procesu do obliczenia homografii między tymi samymi obrazami, które zostały obrócone o 180 stopni (do góry nogami), za pomocą imagemagick (w rzeczywistości byłbym równie zainteresowany poznać relację dla obrotu o 90 lub 270 stopni ...). Tutaj są:
i
Dzięki tym obrazom homografia staje się:
B = [ 0.7148688519736168, 0.01978048500375845, 325.8330631554814;
-0.1706219498833541, 0.8666521745094313, 64.72944905752504;
-0.0002078857275647, -5.080048486810413e-05, 1]
Teraz pytanie brzmi: jak odnosisz A i B? Dwie pierwsze wartości diagonalne A są zbliżone do odwrotności tego samego w B, ale nie jest to bardzo precyzyjne (.707805537 zamiast 0,71486885). Moim ostatecznym celem byłoby wykorzystanie pożądanej relacji do przekształcenia ostatecznej matrycy, unikając obliczenia kosztownego obrotu obrazu.
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(właściwie ton/d
). Teraz „zastosowanie do niego obrotu” daje mi wektor 3x1, ale jak mogę go użyć do ponownego obliczenia macierzy homografii? Dzięki