基本原理
双线性插值能够缩小图片放大时所产生的锯齿,主要原理是对所求像素点临近的四个点像素值进行加权叠加,权值可通过与对应点的距离得出。
如下图所示,D为所求的点的位置,坐标为(X’,Y’),已知相邻四个点的像素值S(X,Y),S(X,Y+1), S(X+1,Y+1),S(X+1,Y)及对应距离dx,dy,求对应点D(X’,Y’)。
Q(X1’,Y’)= S(X,Y) * (1-dy) + S(X,Y+1) * dy
Q(X2’,Y’)= S(X+1,Y) * (1-dy) + S(X+1,Y+1) * dy
D(X’,Y’)= (1-dx) * Q(X1’,Y’) + dx * Q(X2’,Y’)
即
D(X’,Y’)= S(X,Y)*(1-dy)*(1-dx)+S(X,Y+1)*dy*(1-dx)+S(X+1,Y)*(1-dy)*dx +S(X+1,Y+1)*dy*dx
代码实现
double dx,dy;
double xDst;
double yDst;
x1 = (int)xDst;
x2 = x1+1;
y1 = (int)yDst;
y2 = y1+1;
dx = xDst -x1;
dy = yDst -y1;
*pDataRoi++=((int)(*(region1+x1+y1*wr)*(1-dx)*(1-dy))+(int)(*(region1+x1+y2*wr)*(1-dx)*dy)
+(int)(*(region1+x2+y1*wr)*dx*(1-dy))+(int)(*(region1+x2+y2*wr)*dx*dy));