За допомогою OpenCV я обчислюю гомографію між, скажімо, цими двома зображеннями:
і
Не хвилюйтесь про дивну білу форму з правого боку, це пов’язано з тримачем смартфона, яким я користуюся. Гомографія, задається findHomography () функціями ( з використанням точки виявлена з Fast детектором особливості і HammingLUT дескриптора узгодження ), це:
A = [ 1.412817430564191, 0.0684947165270289, -517.7751355800591;
-0.002927297251810, 1.210310757993256, 39.56631316477566;
0.000290600259844, -9.348301989015293e-05, 1]
Зараз я використовую той самий процес, щоб обчислити гомографію між тими ж зображеннями, які були повернуті на 180 градусів (догори дном), використовуючи imagemagick (власне, мені було б однаково цікаво знати співвідношення обертання на 90 або 270 градусів ...). Ось вони:
і
За допомогою цих зображень гомографія стає:
B = [ 0.7148688519736168, 0.01978048500375845, 325.8330631554814;
-0.1706219498833541, 0.8666521745094313, 64.72944905752504;
-0.0002078857275647, -5.080048486810413e-05, 1]
Тепер питання, як ви співвідносите A і B? Два перших діагональних значення A близькі до зворотного однакового в B, але це не дуже точно (.707805537 замість 0.71486885). Моєю кінцевою метою було б використовувати шукане відношення для перетворення кінцевої матриці, уникаючи обчислення дорогого обертання зображення.
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(власне, цеn/d
). Тепер "застосування обертання до нього" дає мені вектор 3x1, але як я можу використовувати його для того, щоб знову обчислити матрицю гомографії? Спасибі