Если контуры легко найти, как на примере (по изменению яркости; при необходимости можно применить фильтры для нахождения контуров), то просто складываем расстояния от краёв до контуров для каждого шага квантования (строка пикселов в данном случае, либо можно увеличить разрешение контура интерполяцией), выбираем наименьшее и сдвигаем картинки на это расстояние. Потом применяется какой-нибудь алгоритм смешивания изображений, например, по среднему значению цветов пикселей.
Если для наложения нужен только сдвиг, то - перебирать пары точек с примерно равным коэффициентом кривизны и углом наклона, например. После преобразования растра в контуры (кривые).
Либо (более тупой метод) — сдвигать растры (без поворота) до момента, когда они начнут «наезжать» друг на друга.