Post on 19-Jan-2017
Image Interpolation画像補間法
2015, by sai@nac崔 国偉(工学博士)
補間方法リスト
「Nearest Neighbor法」 --- 省略
「Bilinear法」
「Bicubic法」
「Lanczos法」
「Spline法」
「Trilinear法」
Bilinear法𝐼(𝑥0, 𝑦0) 𝐼(𝑥0 + 1, 𝑦0)
𝐼(𝑥0, 𝑦0 + 1) 𝐼(𝑥0 + 1, 𝑦0 + 1)
𝐼(𝑥, 𝑦) = 1.0 − 𝑝 1.0 − 𝑠 𝐼(𝑥0, 𝑦0)+p 1.0 − 𝑠 𝐼(𝑥0 + 1, 𝑦0)+1.0 − 𝑝 𝑠𝐼(𝑥0, 𝑦0 + 1)+ps𝐼(𝑥0 + 1, 𝑦0 + 1)
𝑝 + 𝑞 = 1.0
𝑠 + 𝑡 = 1.0
係数 = 1.0
元画像の2x2画素データを使用
Bicubic法
元画像の4x4画素データを使用
係数計算
𝐼 𝑥, 𝑦 = 𝑖=03 𝑗=0
3 𝑤 𝑑𝑥𝑖)𝑤(𝑑𝑦𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)
𝑖=03 𝑗=0
3 𝑤 𝑑𝑥𝑖 𝑤(𝑑𝑦𝑗)
𝑤(𝑑) = 1 − 2𝑑2 + 𝑑3
4 − 8𝑑 + 5𝑑2 − 𝑑3
0
|𝑑| ≤ 1.01.0 ≤ |𝑑| ≤ 2.0
2.0 ≤ |𝑑|
係数 = 1.0
Bicubic法 --- 続き 補間関数 φ(t) として、次のような三次の多項式を考えます。ここで、各ピクセルの間隔 h の値を h = 1 とします。
φ(0) = 1、φ(±1) = φ(±2) = 0 より、4式
φ(t)が連続であるためには、φ(t)の左側微分係数 φ-‘(t) と右側微分係数 φ+’(t) が等しい必要があることで、3式
七つの連立方程式に対して未知数は八つなので、全ての未知数を得ることはできません。そこで、b3 = α として、各未知数をαを使って表す
𝑤(𝑡) = 𝑎 + 2 𝑡 3 − 𝑎 + 3 𝑡 2 + 1
𝑎|𝑡|3 − 5𝑎 𝑡 2 + 8𝑎 𝑡 − 4𝑎0
0 ≤ |𝑡| < 11 ≤ |𝑡| < 22 ≤ |𝑡|
よって、下記の補間関数を得る。(キュービックコンボリューション)
aは補間関数の性質を制御するための変数(-0.5~-2程度が用いられる)
一般的に、設定a=-1。前ページの式を導き出す。
𝜑(𝑡) = 𝑎3 𝑡
3 + 𝑎2 𝑡2 + 𝑎1 𝑡 + 𝑎0
𝑏3|𝑡|3 + 𝑏2 𝑡
2 + 𝑏1 𝑡 + 𝑏00
0 ≤ |𝑡| < 11 ≤ |𝑡| < 22 ≤ |𝑡|
φ(0) = a0 = 1φ(±1) = a3 + a2 + a1 + a0 = 0
φ(±1) = b3 + b2 + b1 + b0 = 0
φ(±2) = 8b3 + 4b2 + 2b1 + b0 = 0
φ-'(0) = -a1 = φ+'(0) = a1
φ-'(±1) = 3a3 + 2a2 + a1 = φ+'(±1) = 3b3 + 2b2 + b1
φ-'(±2) = 12b3 + 4b2 + b1 = φ+'(±2) = 0
Lanczos2法
元画像の4x4画素データを使用
係数計算
𝐼 𝑥, 𝑦 = 𝑖=03 𝑗=0
3 𝑤 𝑑𝑥𝑖)𝑤(𝑑𝑦𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)
𝑖=03 𝑗=0
3 𝑤 𝑑𝑥𝑖 𝑤(𝑑𝑦𝑗)
𝑤(𝑑) = 𝑠𝑖𝑛𝑐(𝑑)
𝑠𝑖𝑛𝑐( 𝑑 2)0
|𝑑| ≤ 2𝑜𝑡ℎ𝑒𝑟
𝑠𝑖𝑛𝑐(𝑥) = sin(𝜋𝑥)
(𝜋𝑥)
sinc関数によってエッジ部などでは鮮鋭化の効果が期待できる。
Lanczos3法
元画像の6x6画素データを使用
係数計算
𝐼 𝑥, 𝑦 = 𝑖=05 𝑗=0
5 𝑤 𝑑𝑥𝑖)𝑤(𝑑𝑦𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)
𝑖=05 𝑗=0
5 𝑤 𝑑𝑥𝑖 𝑤(𝑑𝑦𝑗)
𝑤(𝑑) = 𝑠𝑖𝑛𝑐(𝑑)
𝑠𝑖𝑛𝑐( 𝑑 3)0
|𝑑| ≤ 3𝑜𝑡ℎ𝑒𝑟
𝑠𝑖𝑛𝑐(𝑥) = sin(𝜋𝑥)
(𝜋𝑥)
d
w
3次畳み込み補間
行列式計算、元画像の4x4画素データを使用
係数はbicubic, lanczos2の係数計算式で求められる。
距離
計算結果は、16点の元画像データの最小値より小さな値となる場合や、最大値より大きな値となる場合があるので、ご注意が必要です。(正規化しないため)
(正規化の場合:上式に 𝑤𝑝𝑤𝑞を割る)
𝐼(𝑥, 𝑦) = 𝑤(1 + 𝑞) 𝑤(𝑞) 𝑤(1 − 𝑞) 𝑤(2 − 𝑞)
𝐼(−1,−1)𝐼(−1,0)𝐼(−1,1)𝐼(−1,2)
𝐼(0, −1)𝐼(0,0)𝐼(0,1)𝐼(0,2)
𝐼(1, −1)𝐼(1,0)𝐼(1,1)𝐼(1,2)
𝐼(2, −1)𝐼(2,0)𝐼(2,1)𝐼(2,2)
𝑤(1 + 𝑝)𝑤(𝑝)
𝑤(1 − 𝑝)𝑤(2 − 𝑝)
I(-1,-1)
I(2,2)
q
p
I(-1,2)
I(1,-1)
I(x,y)
0 ≤ 𝑝 < 1.0
0 ≤ 𝑞 < 1.0
City block距離 vs.直線距離
ここまで、Bilinear法、Bicubic法、Lanczos法、すべて「X方向の距離とY方向の距離を求め、それぞれのウェイト(係数)計算をし、X方向のウェイトとY方向のウェイトを掛ける。」という手法をとってきました。
直線距離で計算するのは?
画質という意味では Lanczos2 の直線距離計算が最もバランスがとれているように思います。が、1ピクセルあたり、平方根(√)の計算が 16 回発生する事になり、計算量がとんでもない事になります。
𝐼 𝑥, 𝑦 = 𝑖=03 𝑗=0
3 𝑤 𝑑𝑖𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)
𝑖=03 𝑗=0
3 𝑤 𝑑𝑖𝑗
𝑑𝑖𝑗 = 𝑑𝑥𝑖2 + 𝑑𝑦𝑗
2
Spline法(三次スプライン補間法)
元画像の4x4画素データを使用する。四点(0,0), (1,0), (0,1), (1,1)からなる格子内の点に対する値が次の多項式の値と等しくなると仮定します
𝐼 𝑥, 𝑦 = 𝑎00 + 𝑎10𝑝 + 𝑎20𝑝2 + 𝑎30𝑝
3
+𝑎01𝑞 + 𝑎11𝑝𝑞 + 𝑎21𝑝2𝑞 + 𝑎31𝑝
3𝑞+𝑎02𝑞
2 + 𝑎12𝑝𝑞2 + 𝑎22𝑝
2𝑞2 + 𝑎32𝑝3𝑞2
+𝑎03𝑞3 + 𝑎13𝑝𝑞
3 + 𝑎23𝑝2𝑞3 + 𝑎33𝑝
3𝑞3
未知の係数 aijの求め方:
①四点I(i,j)の値を代入すると、4個の式が得られた
②I(x,y) を x で偏微分します。四点で4個の式が得られた
③I(x,y) を y で偏微分します。四点で4個の式が得られた
④最後に混合微分 Ixy(x,y) 。これで、計 16個の式が得られた
だから、未知数 aij も 16個あることから連立方程式によって係数を求めることができます
pq
(1)
𝐴𝛼 = 𝑓
Spline法(三次スプライン補間法) ---続き
連立方程式
未知の係数aij
α = ( a00, a10, a20, a30, a01, a11, a21, a31, a02, a12, a22, a32, a03, a13, a23, a33 )T
右辺の値からなるベクトルf
未知係数の解は α = A-1fになります。
𝐴𝛼 = 𝑓
α = A-1f (2)
Spline法(三次スプライン補間法) ---続き
この逆行列 A-1は次のようなものになります。
{ 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{-3, 3, 0, 0, -2, -1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 2, -2, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, -3, 3, 0, 0, -2, -1, 0, 0 },
{ 0, 0, 0, 0, 0, 0, 0, 0, 2, -2, 0, 0, 1, 1, 0, 0 },
{-3, 0, 3, 0, 0, 0, 0, 0, -2, 0, -1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, -3, 0, 3, 0, 0, 0, 0, 0, -2, 0, -1, 0 },
{ 9, -9, -9, 9, 6, 3, -6, -3, 6, -6, 3, -3, 4, 2, 2, 1 },
{-6, 6, 6, -6, -3, -3, 3, 3, -4, 4, -2, 2, -2, -2, -1, -1 },
{ 2, 0, -2, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0 },
{ 0, 0, 0, 0, 2, 0, -2, 0, 0, 0, 0, 0, 1, 0, 1, 0 },
{-6, 6, 6, -6, -4, -2, 4, 2, -3, 3, -3, 3, -2, -1, -2, -1 },
{ 4, -4, -4, 4, 2, 2, -2, -2, 2, -2, 2, -2, 1, 1, 1, 1 }
Spline法(三次スプライン補間法) ---続き
偏微分 Ix(x,y),
偏微分 Iy(x,y),
微分混合微分 Ixy(x,y)
画素毎に、補間値の求め手順:
(3)(4)(5)式により、ベクトルfを求める
(2)式により、係数ベクトルαを求める
(1)式により、補間位置の値I(x,y)を計算する
𝐼𝑥(𝑥, 𝑦) = 𝐼 𝑥 + 1, 𝑦 − 𝐼(𝑥 − 1, 𝑦)2
𝐼𝑦(𝑥, 𝑦) = 𝐼 𝑥, 𝑦 + 1 − 𝐼(𝑥, 𝑦 − 1)2
𝐼𝑥𝑦(𝑥, 𝑦) = 𝐼 𝑥 + 1, 𝑦 + 1 − 𝐼(𝑥 − 1, 𝑦 − 1)
8
(3)
(4)
(5)
計算量が非常に多い!
Trilinear法 (トリリニア)
係数 = 1.0
3次元線形補間、元画像の2x2x2画素データ(8点)を使用する。P1~P8は隣接点で、Piの値を求める。
P1点に基準として、Piの相対位置は(p,q,w)になれば、Piの値は
x
y
z
𝐼𝑝𝑖 = 1 − 𝑝 1 − 𝑞 1 − 𝑤 𝐼𝑝1+𝑝 1 − 𝑞 1 − 𝑤 𝐼𝑝2+ 1 − 𝑝 1 − 𝑞 𝑤𝐼𝑝3
+𝑝 1 − 𝑞 𝑤𝐼𝑝4+ 1 − 𝑝 𝑞 1 − 𝑤 𝐼𝑝5
+𝑝𝑞 1 − 𝑤 𝐼𝑝6+ 1 − 𝑝 𝑞𝑤𝐼𝑝7
+𝑝𝑞𝑤𝐼𝑝8