С помощью 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, но они не очень точны (.707805537 вместо 0,71486885). Моей конечной целью было бы использовать требуемое отношение для преобразования конечной матрицы, избегая вычисления дорогостоящего поворота изображения.
Mat invT = 1./t; Mat n = invT.t() * (H - R);
(на самом деле, этоn/d
). Теперь «применение поворота к нему» дает мне вектор 3х1, но как я могу использовать его для повторного вычисления матрицы гомографии? Спасибо