Обрабатывать x,y
как параметр кубической интерполяции
если xs,ys
является целевым разрешением изображения, то:
u=(3.0*x)/xs
v=(3.0*y)/ys
Теперь кубическая интерполяция обычно выполняется по параметру t=<0.0,1.0)
, поэтому
если u=<0.0,1.0>
используйте t=u
и контрольные точки 0,1,2,3
.
если u=<1.0,2.0)
используйте t=u-1.0
и контрольные точки 1,2,3,4
если u=<2.0,3.0>
используйте t=u-2.0
и контрольные точки 2,3,4,5
То же самое касается вертикальных контуров и v
. Вычислите xi,yi
как бикубическую интерполяцию (u,v)
. И копируем пиксель:
dst(x,y)=src(xi,yi);
Это просто ближайший сосед, но вы также можете использовать для этого билинейную... В качестве кубической кривой я бы использовал этот многочлен.
Идея бикубической интерполяции проста. вычислить точку, соответствующую параметру u
, на 4-х горизонтальных контурах. Это даст вам 4 контрольные точки для окончательной кубической интерполяции в вертикальном направлении и v
в качестве параметра. Полученная координата — это ваша исходная позиция в пикселях.