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

Допустим, у меня есть 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 степенями свободы (3translation, 3rotation, 1scale)?

11.12.2008 06:18:24
4 ОТВЕТА
РЕШЕНИЕ

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

     | х1 х2 х3 |
T1 = | y1 y2 y3 |
     | z1 z2 z3 |

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

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

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

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

4
11.12.2008 06:27:45

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

1
11.12.2008 07:24:59
Нет, это зависит от вашего соглашения для умножения матрицы на вектор. Если вы умножаете свои векторы (столбцы) справа, то моя формула верна. Если вы умножаете свои векторы (строки) слева, то ваш правильный, но вы также должны транспонировать T1 и T2.
Adam Rosenfield 11.12.2008 17:06:26

Преобразование из семи параметров, о котором вы говорите, называется трехмерным конформным преобразованием или иногда трехмерным преобразованием подобия, учитывая, что два облака похожи. Если две фигуры идентичны, решение Адама Розенфилда будет хорошим. Там, где есть небольшие различия, и вы хотите получить наилучшее соответствие, наиболее часто используемое решение - это преобразование Гельмерта, которое использует метод наименьших квадратов для минимизации остатков. Википедия и гугл материал на этот взгляд не кажутся великолепными. Моя ссылка на это Ghilani и Вольф вычисление регулировки , P345. Это также отличная книга по математике применительно к пространственным задачам и хорошее дополнение к библиотеке.

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

1
11.12.2008 07:53:40
У вас есть указатель на какой-нибудь код / ​​библиотеку для решения Helmert? Все, что я могу бросить, это реализации, которые используют его для преобразования с известными преобразованиями.
Martin Beckett 27.04.2009 18:52:11

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

0
29.12.2008 18:53:27