Задан набор пар точек в трехмерном пространстве. Первая часть пары задает исходные координаты, или координаты, пришедшие с исходными данными. Вторая часть пары задает координаты той же точки, в которую следует попасть исходной точке после преобразования. Или в какую точку исходная точка должна быть трансформирована. Задача: найти аффинное преобразование, переводящее исходные точки в целевые, или уточненные, наилучшим образом. Переведем это на осязаемый язык математики.
Аффинное преобразование задается одной из форм линейного преобразования: H′=AH+B Здесь H - вектор заданных точек, H′ - вектор уточненных, A - матрица 3x3, B - вектор-столбец.
Требуется найти такие коэффициенты матрицы A и вектора B, при которых для всех пар точек выполняется наилучшее преобразование.
Задача характеризуется тем, что как исходные значения H, так и целевые значения H′ заданы с некоторыми погрешностями и, вообще говоря, не существует одного такого преобразования с матрицей A и вектором B, которое бы в точности перевело все исходные точки в целевые уточненные. Какое бы преобразование ни использовалось, в итоге какие-то точки разойдутся или сильно, или очень сильно.
Поэтому выберем критерий оптимальности в виде: возьмем разность отклонений целевой и преобразованной точки. У этой разности возьмем квадрат и получим из векторной величины скалярную и всегда положительную. И сложим все эти квадраты. Полчив сумму квадратов отклонений, потребуем минимизации этой суммы.
Будем полагать, что такая минимизация осуществима. В самом деле, если двигать один набор точек по другому, то по крайней мере в одном из взаимных расположений (а может быть и в нескольких) такая сумма рано или поздно окажется в минимуме.
Далее нас интересуют значения коэффициентов матрицы A и вектора B, при которых такая сумма минимальна. Если сумма квадратов отклонений минимальна, то набор соответствующих частных производных по коэффициентам Aij и Bi должны быть равны нулям.
Положим, что пары точек заданы точками h(x,y,x) и h′(x′,y′,z′) и эти значения x, y, z, x′, y′ и z′ заданы для всего набора, для всех пар.
Положим, что аффинное преобразование отображает: {x′=a11x+a12y+a13z+b1y′=a21x+a22y+a23z+b2z′=a31x+a32y+a33z+b3 Мы должны минимизировать значение ∑n(a11x+a12y+a13z+b1−x′)2+∑n(a21x+a22y+a23z+b2−y′)2+∑n(a31x+a32y+a33z+b3−z′)2=min Для упрощения представим эту сумму в виде: ∑nS2x+∑nS2y+∑nS2z=min Берем частные производные по aij и bi и приравниваем их нулям и используем промежуточное равенство: ∂∂aij∑nS2k=2∑nSk∂∂aijSk Таким образом, нужно опустить 2 и найти чему равна соответствующая частная производная по aij и bi. Для трехмерного пространства матрица A содержит в общем случае 3⋅3=9 коэффициентов и вектор b содержит 3 коэффициента. Итого мы должны получить систему уравнений с 9+3=12 неизвестных, и решить её.
При взятии частных производных по коэффициентам aij от величин Sk задача существенно обьлегчается тем, что производная Sk по aij или bi либо равна 0 если Sk не зависит от соответствующего коэффициента, либо равна одной из координат x, y, z, либо равна единице.
Беря частные производные по коэффициентам aij и bi, получаем уравнения: ∂∂a11: ∑(a11xx+a12yx+a13zx+b1x)=∑x′x ∂∂a12: ∑(a11xy+a12yy+a13zy+b1y)=∑x′y ∂∂a13: ∑(a11xz+a12yz+a13zz+b1z)=∑x′z ∂∂b1: ∑(a11x+a12y+a13z+b1)=∑x′ ∂∂a21: ∑(a21xx+a22yx+a23zx+b2x)=∑y′x ∂∂a22: ∑(a21xy+a22yy+a23zy+b2y)=∑y′y ∂∂a23: ∑(a21xz+a22yz+a23zz+b2z)=∑y′z ∂∂b2: ∑(a21x+a22y+a23z+b2)=∑y′ ∂∂a31: ∑(a31xx+a32yx+a33zx+b3x)=∑z′x ∂∂a32: ∑(a31xy+a32yy+a33zy+b3y)=∑z′y ∂∂a33: ∑(a31xz+a32yz+a33zz+b3z)=∑z′z ∂∂b3: ∑(a31x+a32y+a33z+b3)=∑z′ Далее надо раскрыть все знаки сумм и получить систему уравнений относительно коэффициентов aij и bi. a11∑nxx+a12∑nyx+a13∑nzx+b1∑nx=∑nx′x a11∑nxy+a12∑nyy+a13∑nzy+b1∑ny=∑nx′y a11∑nxz+a12∑nyz+a13∑nzz+b1∑nz=∑nx′z a11∑nx+a12∑ny+a13∑nz+b1n=∑nx′ a21∑nxy+a22∑nyy+a23∑nzy+b2∑ny=∑ny′x a21∑nxz+a22∑nyz+a23∑nzz+b2∑nz=∑ny′y a21∑nxz+a22∑nyz+a23∑nzz+b2∑nz=∑ny′z a21∑nx+a22∑ny+a23∑nz+b2n=∑ny′ a31∑nxx+a32∑nyx+a33∑nzx+b3∑nx=∑nz′x a31∑nxy+a32∑nyy+a33∑nzy+b3∑ny=∑nz′y a31∑nxz+a32∑nyz+a33∑nzz+b3∑nz=∑nz′z a31∑nx+a32∑ny+a33∑nz+b3n=∑nz′ Здесь использовался тот факт, что ∑nb3=b3∑n1=b3n Несмотря на то, что в каждом уравнении слева от знака = стоит лишь 4 числа, совокупность этих уравнений задаёт систему 12x12 линейных уравнений для 12-ти коэффициентов, обозначенных через aij и bi.
Для приведения системы уравнений к СЛАУ нужно зафиксировать их порядок и в них найти коэффициенты матрицы, ну скажем C и D, такие что CX=D где C - квадратная матрица, D - вектор, X - искомый вектор.
И решить это уравнение, найдя X.
Оставив уравнения в том же порядке, получим что соответственно D1=∑x′x D2=∑x′y и так далее.
Упорядочив коэффициенты aij и bi в определенном порядке и рассматривая их как элементы вектора X, выберем сопоставление: X1=a11,X2=a12,X3=a13,X4=b1,X5=a21,X6=a22,X7=a23,X8=b2,X9=a31,X10=a32,X11=a33,X12=b3 После этого сопоставления можем определить по вышеприведенным уравнениям значения коэффициентов Cij, например: C1,1=∑xx C1,2=∑yx C8,10=0 C4,1=∑x C7,7=∑zz C12,12=n
Далее следует банальное программирование. Заводим матрицу 12x12 и вектор на 12. Всем коэффициентам присваиваем нулевые значения. В цикле по всем парам точек расписываем по вышеприведенным уравнениям значения x, y, z, x′, y′ и z′ или их произведения.
Решив систему уравнений (например, методом Гаусса), получаем в качестве результата вектор из искомых значений aij и bi.
Также можно отметить, что вышеприведенная система уравнений может решаться как система для 12-ти переменных, так и может быть разделена на 3 системы по 4 уравнения для вычисления векторов из 4-х коэффициентов: (a11a12a13b1) (a21a22a23b2) (a31a32a33b3) Если расписать в виде матричного произведения эти отдельные 3 системы для 4-х неизвестных каждая, то получим: (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a11a12a13b1)=(∑x′x∑x′y∑x′z∑x′) (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a21a22a23b2)=(∑y′x∑y′y∑y′z∑y′) (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a31a32a33b3)=(∑z′x∑z′y∑z′z∑z′) Соответственно, если решать эти системы методом Гаусса, то надо три решения, по одной на каждую систему. А если решать методом нахождения обратной матрицы, то такую матрицу нужно искать лишь один раз в силу того что все три системы имеют одну и ту же матрицу.
Аффинное преобразование задается одной из форм линейного преобразования: H′=AH+B Здесь H - вектор заданных точек, H′ - вектор уточненных, A - матрица 3x3, B - вектор-столбец.
Требуется найти такие коэффициенты матрицы A и вектора B, при которых для всех пар точек выполняется наилучшее преобразование.
Задача характеризуется тем, что как исходные значения H, так и целевые значения H′ заданы с некоторыми погрешностями и, вообще говоря, не существует одного такого преобразования с матрицей A и вектором B, которое бы в точности перевело все исходные точки в целевые уточненные. Какое бы преобразование ни использовалось, в итоге какие-то точки разойдутся или сильно, или очень сильно.
Поэтому выберем критерий оптимальности в виде: возьмем разность отклонений целевой и преобразованной точки. У этой разности возьмем квадрат и получим из векторной величины скалярную и всегда положительную. И сложим все эти квадраты. Полчив сумму квадратов отклонений, потребуем минимизации этой суммы.
Будем полагать, что такая минимизация осуществима. В самом деле, если двигать один набор точек по другому, то по крайней мере в одном из взаимных расположений (а может быть и в нескольких) такая сумма рано или поздно окажется в минимуме.
Далее нас интересуют значения коэффициентов матрицы A и вектора B, при которых такая сумма минимальна. Если сумма квадратов отклонений минимальна, то набор соответствующих частных производных по коэффициентам Aij и Bi должны быть равны нулям.
Положим, что пары точек заданы точками h(x,y,x) и h′(x′,y′,z′) и эти значения x, y, z, x′, y′ и z′ заданы для всего набора, для всех пар.
Положим, что аффинное преобразование отображает: {x′=a11x+a12y+a13z+b1y′=a21x+a22y+a23z+b2z′=a31x+a32y+a33z+b3 Мы должны минимизировать значение ∑n(a11x+a12y+a13z+b1−x′)2+∑n(a21x+a22y+a23z+b2−y′)2+∑n(a31x+a32y+a33z+b3−z′)2=min Для упрощения представим эту сумму в виде: ∑nS2x+∑nS2y+∑nS2z=min Берем частные производные по aij и bi и приравниваем их нулям и используем промежуточное равенство: ∂∂aij∑nS2k=2∑nSk∂∂aijSk Таким образом, нужно опустить 2 и найти чему равна соответствующая частная производная по aij и bi. Для трехмерного пространства матрица A содержит в общем случае 3⋅3=9 коэффициентов и вектор b содержит 3 коэффициента. Итого мы должны получить систему уравнений с 9+3=12 неизвестных, и решить её.
При взятии частных производных по коэффициентам aij от величин Sk задача существенно обьлегчается тем, что производная Sk по aij или bi либо равна 0 если Sk не зависит от соответствующего коэффициента, либо равна одной из координат x, y, z, либо равна единице.
Беря частные производные по коэффициентам aij и bi, получаем уравнения: ∂∂a11: ∑(a11xx+a12yx+a13zx+b1x)=∑x′x ∂∂a12: ∑(a11xy+a12yy+a13zy+b1y)=∑x′y ∂∂a13: ∑(a11xz+a12yz+a13zz+b1z)=∑x′z ∂∂b1: ∑(a11x+a12y+a13z+b1)=∑x′ ∂∂a21: ∑(a21xx+a22yx+a23zx+b2x)=∑y′x ∂∂a22: ∑(a21xy+a22yy+a23zy+b2y)=∑y′y ∂∂a23: ∑(a21xz+a22yz+a23zz+b2z)=∑y′z ∂∂b2: ∑(a21x+a22y+a23z+b2)=∑y′ ∂∂a31: ∑(a31xx+a32yx+a33zx+b3x)=∑z′x ∂∂a32: ∑(a31xy+a32yy+a33zy+b3y)=∑z′y ∂∂a33: ∑(a31xz+a32yz+a33zz+b3z)=∑z′z ∂∂b3: ∑(a31x+a32y+a33z+b3)=∑z′ Далее надо раскрыть все знаки сумм и получить систему уравнений относительно коэффициентов aij и bi. a11∑nxx+a12∑nyx+a13∑nzx+b1∑nx=∑nx′x a11∑nxy+a12∑nyy+a13∑nzy+b1∑ny=∑nx′y a11∑nxz+a12∑nyz+a13∑nzz+b1∑nz=∑nx′z a11∑nx+a12∑ny+a13∑nz+b1n=∑nx′ a21∑nxy+a22∑nyy+a23∑nzy+b2∑ny=∑ny′x a21∑nxz+a22∑nyz+a23∑nzz+b2∑nz=∑ny′y a21∑nxz+a22∑nyz+a23∑nzz+b2∑nz=∑ny′z a21∑nx+a22∑ny+a23∑nz+b2n=∑ny′ a31∑nxx+a32∑nyx+a33∑nzx+b3∑nx=∑nz′x a31∑nxy+a32∑nyy+a33∑nzy+b3∑ny=∑nz′y a31∑nxz+a32∑nyz+a33∑nzz+b3∑nz=∑nz′z a31∑nx+a32∑ny+a33∑nz+b3n=∑nz′ Здесь использовался тот факт, что ∑nb3=b3∑n1=b3n Несмотря на то, что в каждом уравнении слева от знака = стоит лишь 4 числа, совокупность этих уравнений задаёт систему 12x12 линейных уравнений для 12-ти коэффициентов, обозначенных через aij и bi.
Для приведения системы уравнений к СЛАУ нужно зафиксировать их порядок и в них найти коэффициенты матрицы, ну скажем C и D, такие что CX=D где C - квадратная матрица, D - вектор, X - искомый вектор.
И решить это уравнение, найдя X.
Оставив уравнения в том же порядке, получим что соответственно D1=∑x′x D2=∑x′y и так далее.
Упорядочив коэффициенты aij и bi в определенном порядке и рассматривая их как элементы вектора X, выберем сопоставление: X1=a11,X2=a12,X3=a13,X4=b1,X5=a21,X6=a22,X7=a23,X8=b2,X9=a31,X10=a32,X11=a33,X12=b3 После этого сопоставления можем определить по вышеприведенным уравнениям значения коэффициентов Cij, например: C1,1=∑xx C1,2=∑yx C8,10=0 C4,1=∑x C7,7=∑zz C12,12=n
Далее следует банальное программирование. Заводим матрицу 12x12 и вектор на 12. Всем коэффициентам присваиваем нулевые значения. В цикле по всем парам точек расписываем по вышеприведенным уравнениям значения x, y, z, x′, y′ и z′ или их произведения.
Решив систему уравнений (например, методом Гаусса), получаем в качестве результата вектор из искомых значений aij и bi.
Также можно отметить, что вышеприведенная система уравнений может решаться как система для 12-ти переменных, так и может быть разделена на 3 системы по 4 уравнения для вычисления векторов из 4-х коэффициентов: (a11a12a13b1) (a21a22a23b2) (a31a32a33b3) Если расписать в виде матричного произведения эти отдельные 3 системы для 4-х неизвестных каждая, то получим: (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a11a12a13b1)=(∑x′x∑x′y∑x′z∑x′) (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a21a22a23b2)=(∑y′x∑y′y∑y′z∑y′) (∑xx∑yx∑zx∑x∑xy∑yy∑zy∑y∑xz∑yz∑zz∑z∑x∑y∑zn)(a31a32a33b3)=(∑z′x∑z′y∑z′z∑z′) Соответственно, если решать эти системы методом Гаусса, то надо три решения, по одной на каждую систему. А если решать методом нахождения обратной матрицы, то такую матрицу нужно искать лишь один раз в силу того что все три системы имеют одну и ту же матрицу.
Комментариев нет:
Отправить комментарий