У меня есть серия точек в двух 3D-системах. С ними я использую np.linalg.lstsq для вычисления матрицы аффинного преобразования (4x4) между ними. Однако из-за моего проекта мне пришлось «отключить» сдвиг в преобразовании. Есть ли способ разложить матрицу на базовые преобразования? Я узнал, как это сделать для Переноса и Масштабирования, но я не знаю, как разделить Вращение и Сдвиг. Если нет, есть ли способ вычислить матрицу преобразования по точкам, которые не включают сдвиг? Я могу использовать только numpy или tensorflow для решения этой проблемы, кстати.
Как разложить аффинную матрицу?
comment
Это больше похоже на вопрос механики сплошной среды, чем на вопрос программирования.
- person Daniel F   schedule 16.08.2018
comment
Вам нужно использовать для этого numpy или tensorflow? Иногда проще просто посчитать самостоятельно, и, в конечном итоге, в конечном итоге, вероятно, это поможет вам лучше в долгосрочной перспективе. math.stackexchange.com/questions/612006/
- person AdaRaider   schedule 16.08.2018
Ответы (1)
Я не уверен, что понимаю, о чем вы спрашиваете.
В любом случае, если у вас есть два набора трехмерных точек P и Q, вы можете использовать алгоритм Кабша, чтобы найти матрицу вращения R и вектор перемещения T, чтобы сумма квадратов расстояний между (RP + T) и Q была минимальной. Вы, конечно, можете объединить R и T в матрицу 4x4 (только вращения и перемещения без сдвига или масштаба).
person
David
schedule
16.08.2018
Спасибо за ответ. Что мне нужно, так это найти наиболее близкое преобразование от P к Q, используя только перенос, поворот и масштабирование, то есть без сдвига. Мне нужно вычислить матрицу преобразования подобия из точек
- person Felipe Moser; 16.08.2018
Вы можете посмотреть здесь: stackoverflow.com/questions/13432805/ Они объясняют, как расширить алгоритм Кабша, включив в него также масштабирование. В любом случае в окончательной матрице преобразования нет сдвига.
- person David; 16.08.2018
Спасибо за это, Дэвид! Я нашел здесь перевод этой статьи на языке Python: gist.github.com/CarloNicolini/7118015
- person Felipe Moser; 16.08.2018
Здорово! Рад, что помог тебе!
- person David; 16.08.2018