Bicubic介绍及Python实现

Bicubic

Bicubic 介绍

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

1.像素点

插值像素点与原图像的关系:
在这里插入图片描述

2.插值函数

插值函数是对于理论上最优插值函数 s i n ( x ) / x sin(x)/x 的近似。
函数如下,一般取a = -0.5
W ( x ) = { ( a + 2 ) x 3 ( a + 3 ) x 2 + 1 x 1 a x 3 5 x 2 + 8 a x 4 a 1 < x < 2 0 o t h e r s 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 = 1 2 m = 1 2 f ( n + j , m + i ) × W ( u m ) × W ( v n ) 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 ( u 1 ) W ( u 2 ) ] C = [ W ( v + 1 ) W ( v ) W ( v 1 ) W ( v 2 ) ] B = [ 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 ) ] f ( j + v , i + u ) = C B A T \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代码