天天看點

Bicubic介紹及Python實作Bicubic

Bicubic

Bicubic 介紹

放大圖像某點的像素值涉及其映射到原始圖像一點的臨近16個像素點。

在橫、豎兩個方向分别采用多項式插值三次函數

1.像素點

插值像素點與原圖像的關系:

Bicubic介紹及Python實作Bicubic

2.插值函數

插值函數是對于理論上最優插值函數 s i n ( x ) / x sin(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} W(x)=⎩⎪⎨⎪⎧​(a+2)∣x∣3−(a+3)∣x∣2+1a∣x∣3−5∣x∣2+8a∣x∣−4a0​∣x∣≤11<∣x∣<2others​

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) B(X,Y)=n=−1∑2​m=−1∑2​f(n+j,m+i)×W(u−m)×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} ​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,i−1)f(j+1,i−1)f(j+2,i−1)​f(j−1,i)f(j,i)f(j+1,i)f(j+2,i)​f(j−1,i+1)f(j,i+1)f(j+1,i+1)f(j+2,i+1)​f(j−1,i+2)f(j,i+2)f(j+1,i+2)f(j+2,i+2)​⎦⎥⎥⎤​f(j+v,i+u)=CBAT​

bicubic python代碼