Что означают элементы в матрице гомографии?

Я новичок в обработке изображений, но я использую EMGU для анализа изображений С#. Тем не менее, я знаю, что матрица гомографии не уникальна для EMGU, и, возможно, кто-то, кто знает другой язык, может лучше объяснить.

Пожалуйста, (как можно упрощенно) может кто-нибудь объяснить, что делает каждый элемент. Я посмотрел это онлайн, но не могу найти ответ, который я могу правильно понять (как я уже сказал, я новичок во всем этом!)

Я анализирую 2 изображения, оба двухмерные. Поэтому для учета вращения/трансляции изображения требуется матрица 3х3. Если движение не обнаружено, матрица гомографии: 100, 010, 001

Я знаю из исследования (например, Гомография OpenCV, преобразование точки, что делает этот код), который: 10Tx, 01Ty, XXX

10,01 бит - это поворот координат x и y. Биты Tx и Ty являются поступательным движением, но что такое бит XXX? Это то, чего я не понимаю? Это как-то связано с аффинными преобразованиями? Пожалуйста, кто-нибудь может объяснить: 1. Если я сейчас прав в том, что говорю выше. 2. что означает бит XXX

Ответ 1

Это не так сложно понять, если вы разбираетесь в умножении матриц. Предположим, вы указываете x

/a\
\b/,

и вы хотите повернуть систему координат на A:

/3 4\
\5 6/

и и "переместить его" t

/2\
\2/.

Последние матрицы являются компонентами аффинного преобразования, чтобы получить новую точку y:

y = A*x + t = <a'; b'>T //(T means transposed).

Как вы знаете, чтобы получить это, можно построить 3d-матрицу B и вектор x' выглядящий как

    /3 4 2\         /a\
B = |5 6 2| ,  x' = |b|
    \0 0 1/         \1/

такой, что

     /a'\
y' = |b'| = B*x'
     \ 1/ 

из которого вы можете извлечь y. Давайте посмотрим, как это работает. В исходном преобразовании (с использованием сложения) первым шагом будет выполнение умножения, т.е. вращающаяся часть y_r:

y_r = A*x = <3a+4b; 5a+6b>T

Затем вы добавляете "абсолютную" часть:

y = y_r + t = <3a+4b+2; 5a+6b+2>T

Теперь посмотрим, как работает B Я буду вычислять y' строка за строкой:

1) a' = 3*a + 4*b + 2*1

2) b' = 5*a + 6*b + 2*1

3) the rest: 0*a + 0*b + 1*1 = 1

Как раз то, что мы ожидали. Сначала вычисляется часть вращения - сложение и умножение. Затем добавляется x-часть поступательной части, умноженная на 1 --it, остается неизменной. То же самое для второго ряда.

В третьей строке a и b отбрасываются (умножается на 0). Последняя часть остается неизменной и составляет 1. Итак, все, что касается последней строки, это "сбросить" значения точки и сохранить 1.


Таким образом, можно утверждать, что для этого будет достаточно матрицы 2х3. Это частично верно, но имеет один существенный недостаток: вы теряете способность к компоновке. Предположим, что вы в основном удовлетворены B, но хотите отразить одну координату. Затем вы можете выбрать другую матрицу преобразования

    /-1 0 0\
C = | 0 1 0|
    \ 0 0 1/

и иметь результат

y'' = C*B*x' = <-3a+4b+2; 5a+6b+2; 1>T

Это простое умножение не может быть сделано так просто с матрицами 2х3, просто из-за свойств умножения матриц.

В принципе, в приведенном выше примере последняя строка (XXX) также может быть чем-либо еще вида <0;0;x>. Это было просто, чтобы отбросить баллы. Тем не менее, точно так же, как это необходимо, чтобы сделать композицию путем умножения.

Наконец, в данном случае википедия кажется мне достаточно информативной.

Ответ 2

Прежде всего, аффинное преобразование - это те, которые сохраняют прямые и могут иметь любую произвольную размерность

Гомография описывает отображение на двух плоскостях или то, что происходит при чистом вращении камеры.

Последняя строка представляет собой различные ножницы (то есть, когда x является функцией как x, y)