Яка зв'язок між гомографією, обчисленою на двох зображеннях, і гомографією, обчисленою на одних і тих же зображеннях догори дном?


9

За допомогою 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). Моєю кінцевою метою було б використовувати шукане відношення для перетворення кінцевої матриці, уникаючи обчислення дорогого обертання зображення.

Відповіді:


4

Я думаю, дивлячись на формулу матриці гомографії:

Hba=RtnTd
де R - матриця обертання, за допомогою якої б повертається по відношенню до а; т - вектор перекладу з а до б; н і г- нормальний вектор площини і відстань до площини відповідно (див. Гомографія-3D рівняння площини до площини ).

Співвідношення двох матриць лежить у нормальному векторі площини. Тому потрібно дістати нормальний вектор площини (з матриці гомографії) і застосувати до неї обертання, а потім обчислити матрицю гомографії за формулою, наведеною вище. Для правильного розкладання матриці гомографії ви можете переглянути ці зразки коду та цей документ .


Я не розумію, що ти маєш на увазі. З рівняння я отримав нормальне с Mat invT = 1./t; Mat n = invT.t() * (H - R);(власне, це n/d). Тепер "застосування обертання до нього" дає мені вектор 3x1, але як я можу використовувати його для того, щоб знову обчислити матрицю гомографії? Спасибі
Стефан Пешард

Додано більше інформації, сподіваюся, що це стане зрозумілим.
Geerten

чому це - t / d, а не + t / d?
Майстро
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.