如图所示P点就是目标图像B在(X,Y)处对应于源图像中的位置,P的坐标位置会出现小数部分,所以我们假设 P的坐标为P(x+u,y+v),其中x,y分别表示整数部分,u,v分别表示小数部分。那么我们就可以得到如图所示的 最近16个像素的位置,在这里用a(i,j)(i,j=0,1,2,3)来表示。
双立方插值的目的就是通过找到一种关系,或者说系数,可以把这16个像素对于P处像素值得影响因子找出 来,从而根据这个影响因子来获得目标图像对应点的像素值,达到图像缩放的目的。 影响因子函数就是S(x):
我们要做的就是求出S(x)函数中的参数x,从而获得上面所说的16个像素所对应的系数。在学习双线性插 值法的时候,我们是把图像的行和列分开来理解的,那么在这里,我们也用这种方法描述如何求出a(i,j)对应 的系数k_ij。假设行系数为k_i,列系数为k_j。我们以a(0,0)位置为例:
首先,我们要求出当前像素与P点的位置,比如a(0,0)距离P(i+u,j+v)的距离为(1+u,1+v)。
那么我们可以得到:k_i_0=W(1+u),k_j_0=W(1+v). 同理我们可以得到所有行和列对应的系数:
k_i_0=W(1+u), k_i_1=W(u),k_i_2=W(1-u), k_i_3=W(2-u);
k_j_0=W(1+v), k_j_1=W(v),k_j_2=W(1-v), k_j_3=W(2-v);
这样我们就分别得到了行和列方向上的系数。 由k_i_j=k_i*k_j我们就可以得到每个像素a(i,j)对应的权值了。
为何像素a(i,j)对应的权值k_i_j是k_i*k_j而不是k_i呢?
这时候我们得看立方卷积插值的矩阵表示:
AB运算后是个1*4的矩阵,这是可以看成是有1行4列的像素,这时候就得把这四列像素分别乘上k_j.
等价为:
最后通过求和公式可以得到目标图片B(X,Y)对应的像素值:
pixelB(X,Y)=pixelA(0,0)*k_0_0+pixelA(0,1)*k_0_1+…+pixelA(3,3)*k_3_3;
这里其实就是个求和公式,由于不知道怎么编辑公式,就这样表达了。
文字部分参考:http://blog.csdn.net/qq_29058565/article/details/52769497
图片来源:https://www.bilibili.com/video/av20110752/?p=12(截图)