Инвертирование аффинного преобразования - как обновить координату центра? - PullRequest
2 голосов
/ 24 мая 2010

Итак, у меня есть 3D-изображение, которое преобразуется в пространство с помощью аффинного преобразования. Это преобразование состоит из традиционной матрицы 4х4 плюс центральная координата, относительно которой выполняется преобразование. Как я могу инвертировать эту центральную точку, чтобы вернуться в исходное пространство? У меня есть координата, но это вектор 1x3 (или 3x1, в зависимости от порядка строк / столбцов). Я предполагаю, что для того, чтобы получить соответствующий центр инверсии, мне нужно превратить вектор в 1x4, но если это так, что я должен поместить в четвертую позицию? Очевидные кандидаты - 0 и 1, но я не уверен, что это правильно.

Идея состоит в том, что если я преобразую изображение в пространство, а затем инвертирую преобразование, результирующее изображение должно быть идентичным (в пределах ошибок округления / эффектов наложения из-за повторной выборки). Однако в данный момент я просто использую ту же самую центральную координату, и это создает изображение, смещенное на некоторое количество, а не точно такое же изображение. Итак, как я могу преобразовать эту центральную точку?

1 Ответ

1 голос
/ 24 мая 2010

Полагаю, ваше преобразование выглядит так

x' = Mx + t

Решение для х должно дать

x = M_inv (x' - t) 

Работа с матрицами 4x4 в трехмерной системе координат обычно означает работу в однородных координатах. Вы сохраняете мультипликативное значение в 4-й координате, которая обычно называется w. Значение 1 хорошо работает для позиций, значение 0 предназначено для векторов. Это связано с тем, что информация о переводе, хранящаяся в матрице M, должна влиять только на позиции (это простое объяснение, извините). Так что, да, отрицание вектора перевода уже должно помочь. Добавьте 0 в качестве 4-го компонента.

...