Вы можете использовать методы, аналогичные разработанным здесь: http://www -ui.is.su-tokyo.ac.jp / ~ takeo / research / hard /
Что выdo, вы определяете сетку контрольных точек MxN, которая покрывает ваше исходное изображение.Затем вам нужно определить, как изменить каждую из ваших контрольных точек так, чтобы конечное изображение минимизировало некоторую энергетическую функцию (минимальную кривизну или что-то в этом роде).
Окончательное изображение - это линейная деформация, определяемая вашим контролемточки (представьте, что это двумерная сетка, текстура которой является исходным изображением и положение вершин которой вы собираетесь изменить).
Пока ваша энергетическая функция может быть выражена с помощью линейных уравнений, вы можете глобальнорешить вашу проблему (выяснить, куда отправлять каждую контрольную точку) с помощью решателя линейных уравнений.
Вы выражаете каждую из ваших исходных точек (те, которые лежат на ваших изогнутых линиях) с использованием билинейных весов интерполяции окружающей их сеткиточки, затем вы выражаете свое ограничение на цель, записывая уравнения для этих точек.
После решения этих линейных уравнений вы получаете конечные точки сетки, а затем просто визуализируете свою 2D-сетку с позициями новых вершин.