Это могло бы быть хорошей справкой. Это синтаксический анализатор используется в Источник вдохновения TwoDesk .
Хорошо, это звучит как искажение изображения. Вот что вам следует сделать:
Создайте триангуляцию Делоне вашей неискаженной сетки и используйте свои знания о соответствиях между деформированной и неискаженной сеткой, чтобы создать триангуляцию для деформированной сетки. Теперь вы знаете соответствующие треугольники на каждом изображении, и, поскольку перекрытия нет, вы сможете без особого труда выполнить следующий шаг.
Теперь, чтобы найти соответствующую точку A
на деформированном image:
A
и используйте преобразование между треугольником в неискаженной сетке и деформированной сеткой, чтобы определить новое положение. Это подробно объяснено ] здесь .
Я понял, что у вас есть взаимно однозначное соответствие между развернутыми и развернутыми точками сетки. И я предполагаю, что деформация не настолько велика, чтобы у вас могли быть пересекающиеся линии сетки (как на изображении, которое вы показываете).
Стратегия в точности совпадает с тем, что предлагает Джейкоб: триангулируйте две сетки так, чтобы получилось однозначное соответствие. соответствия между треугольниками, найдите точку, которая будет отображена в триангуляции, а затем используйте барицентрические координаты в соответствующем треугольнике для вычисления нового местоположения точки.
Предварительный процесс
WT
. WT
добавьте треугольник между соответствующими вершинами развернутой сетки. Это дает триангуляцию UWT
развернутых точек. Отображение точки p
в свернутую сетку
T (p1, p2, p3)
в UWT
, который содержит p
. (b1, b2, b3)
p
в T (p1, p2, p3)
Tw (q1, q2, q3)
будет треугольником в WT
, соответствующим T (p1, p2, p3)
. Новая позиция: b1 * q1 + b2 * q2 + b3 * q3
. Замечания b3) из p
в T (p1, p2, p3)
Tw (q1, q2, q3)
будет треугольником в WT
, соответствующий T (p1, p2, p3)
. Новая позиция: b1 * q1 + b2 * q2 + b3 * q3
. Замечания b3) из p
в T (p1, p2, p3)
Tw (q1, q2, q3)
будет треугольником в WT
, соответствующий T (p1, p2, p3)
. Новая позиция: b1 * q1 + b2 * q2 + b3 * q3
. Замечания Это дает функцию деформации в виде линейного сплайна . Для более плавного поведения можно использовать ту же триангуляцию, но сделать приближение более высокого порядка, что приведет к немного более сложным вычислениям вместо барицентрических координат.
Многое зависит от того, сколько у вас очков. Если у вас есть только один, вы мало что можете с ним сделать - вы можете сместить вторую точку на ту же величину в том же направлении, но у вас недостаточно данных, чтобы добиться чего-то большего.
Если у вас достаточно много существующих точек, вы можете выполнить аппроксимацию поверхности через эти точки и использовать это для приблизительного определения правильного положения новой точки. Учитывая N точек, вы всегда можете получить идеальное совпадение, используя полином порядка N, но вы редко хотите это делать - вместо этого вы обычно предполагаете, что функция растяжения является функцией довольно низкого порядка (например, квадратичной или кубической) и подходит поверхность к точкам на этой основе. Затем вы размещаете новую точку в зависимости от функции вашей подогнанной поверхности.
Другие ответы великолепны. Единственное, что я бы добавил, это то, что вы, возможно, захотите взглянуть на Деформацию произвольной формы как способ описания деформаций.
Если это полезно, то вполне возможно приспособить деформационную сетку / решетку к вашим известным парам, и тогда у вас будет очень быстрый метод деформации будущих точек.