Выровнять облака точек с помощью корреляции по 3 точкам?

StackOverflow https://stackoverflow.com/questions/358557

Вопрос

Допустим, у меня есть 3 облака точек:первое имеет 3 точки {x1,y1,z1}, {x2,y2,z2}, {x3,y3,z3} и второе облако точек, имеющее те же точки, что и {xx1, yy1, zz1}, {xx2,yy2, zz2}, {xx3,yy3,zz3}...Я предполагаю, что для выравнивания второго облака точек по первому мне нужно умножить точки второго на T[3x3matrix].

1) Итак, как мне найти эту матрицу преобразования (T)?Я пытался составить уравнения вручную, но не смог их решить.Есть ли где-нибудь решение, потому что я почти уверен, что я не первый, кто столкнулся с этой проблемой.

2) Я предполагаю, что матрица может включать в себя перекос и сдвиг.Есть ли способ найти матрицу всего с 7 степенями свободы (3 перемещения, 3 вращения, 1 масштаб)?

Это было полезно?

Решение

Матрица преобразования T1, которая переводит единичные векторы {1, 0, 0}, {0, 1, 0} и {0, 0, 1} в {x1, y1, z1}, {x2, y2, z2}, {x3, y3, z3} — это просто

     | x1 x2 x3 |
T1 = | y1 y2 y3 |
     | z1 z2 z3 |

Аналогично, преобразование T2, которое переводит эти три единичных вектора во второй набор точек, равно

     | xx1 xx2 xx3 |
T2 = | yy1 yy1 yy3 |
     | zz1 zz2 zz3 |

Следовательно, матрица, которая переводит первые три точки во вторые три точки, имеет вид T2 * T1.-1.Если T1 неособо, то это преобразование определено однозначно и не имеет степеней свободы.Если T1 — сингулярная матрица, то решений не может быть или их может быть бесконечно много.

Когда вы говорите, что хотите 7 степеней свободы, это своего рода неправильное использование терминологии.В общем случае эта матрица состоит из 3 степеней свободы вращения, 3 степеней масштабирования и 3 степеней сдвига, всего 9.Вы можете определить эти параметры, выполнив QR-факторизация.Матрица Q дает параметры вращения, а матрица R дает параметры масштабирования (вдоль диагонали) и параметры сдвига (над диагональю).

Другие советы

Подход Адама Розенфилда верен.Но решение T2 * Inv (T1) неверно.Поскольку при умножении матрицы A * B != B * A :Следовательно, результат: Inv(T1) * T2.

А преобразование семи параметров то, о чем вы говорите, называется трехмерным конформным преобразованием или иногда трехмерным преобразованием подобия, учитывая, что два облака похожи.Если две формы идентичны, решение Адама Розенфилда хорошее.Если есть небольшие различия и вы хотите добиться наилучшего соответствия, наиболее часто используемым решением является Преобразование Гельмерта который использует метод наименьших квадратов для минимизации остатков.Материалы Википедии и Google по этому поводу на первый взгляд не кажутся хорошими.Я рекомендую Ghilani & Wolf's. корректировочные расчеты, стр345.Это также отличная книга по матричной математике применительно к пространственным задачам и хорошее дополнение к библиотеке.

редактировать:Версия этого преобразования Адама с 9 параметрами называется аффинное преобразование

Вот пример вычисления оценок параметров двумерного аффинного преобразования в R по методу наименьших квадратов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top