Bicubic介绍及Python实现

Bicubic

Bicubic 介绍

放大图像某点的像素值涉及其映射到原始图像一点的临近16个像素点。
在横、竖两个方向分别采用多项式插值三次函数

1.像素点

插值像素点与原图像的关系:
Bicubic介绍及Python实现

2.插值函数

插值函数是对于理论上最优插值函数sin(x)/xsin(x)/x的近似。
函数如下,一般取a = -0.5
W(x)={(a+2)x3(a+3)x2+1x1ax35x2+8ax4a1<x<20others W(x)=\begin{cases} (a+2)|x|^3-(a+3)|x|^2+1 & |x|\leq 1\\ a|x|^3-5|x|^2+8a|x|-4a & 1<|x|<2\\ 0 & others \end{cases}

3.像素值计算

对于每个像素点像素值的计算:
B(X,Y)=n=12m=12f(n+j,m+i)×W(um)×W(vn) B(X,Y) = \sum_{n=-1}^{2} \sum_{m=-1}^{2}f(n+j,m+i)\times W(u-m)\times W(v-n)
矩阵计算方式如下:

A=[W(u+1)W(u)W(u1)W(u2)]C=[W(v+1)W(v)W(v1)W(v2)]B=[f(j1,i1)f(j1,i)f(j1,i+1)f(j1,i+2)f(j,i1)f(j,i)f(j,i+1)f(j,i+2)f(j+1,i1)f(j+1,i)f(j+1,i+1)f(j+1,i+2)f(j+2,i1)f(j+2,i)f(j+2,i+1)f(j+2,i+2)]f(j+v,i+u)=CBAT \begin{aligned} &A = \left[ \begin{matrix} W(u+1) & W(u) & W(u-1) & W(u-2)\end{matrix}\right] \\ &C = \left[ \begin{matrix} W(v+1) & W(v) & W(v-1) & W(v-2)\end{matrix}\right] \\ &B =\left[ \begin{matrix} f(j-1,i-1) & f(j-1,i) & f(j-1,i+1) & f(j-1,i+2) \\ f(j,i-1) & f(j,i) & f(j,i+1) & f(j,i+2) \\ f(j+1,i-1) & f(j+1,i) & f(j+1,i+1) & f(j+1,i+2) \\ f(j+2,i-1) & f(j+2,i) & f(j+2,i+1) & f(j+2,i+2) \\ \end{matrix}\right] \\ &f(j+v,i+u) = CBA^T \end{aligned}

bicubic python代码