image interpolation

14
Image Interpolation 画像補間法 2015, by sai@nac 国偉(工学博士)

Upload: kokuisai

Post on 19-Jan-2017

168 views

Category:

Technology


2 download

TRANSCRIPT

Page 1: Image interpolation

Image Interpolation画像補間法

2015, by sai@nac崔 国偉(工学博士)

Page 2: Image interpolation

補間方法リスト

「Nearest Neighbor法」 --- 省略

「Bilinear法」

「Bicubic法」

「Lanczos法」

「Spline法」

「Trilinear法」

Page 3: Image interpolation

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画素データを使用

Page 4: Image interpolation

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

Page 5: Image interpolation

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

Page 6: Image interpolation

Lanczos2法

元画像の4x4画素データを使用

係数計算

𝐼 𝑥, 𝑦 = 𝑖=03 𝑗=0

3 𝑤 𝑑𝑥𝑖)𝑤(𝑑𝑦𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)

𝑖=03 𝑗=0

3 𝑤 𝑑𝑥𝑖 𝑤(𝑑𝑦𝑗)

𝑤(𝑑) = 𝑠𝑖𝑛𝑐(𝑑)

𝑠𝑖𝑛𝑐( 𝑑 2)0

|𝑑| ≤ 2𝑜𝑡ℎ𝑒𝑟

𝑠𝑖𝑛𝑐(𝑥) = sin(𝜋𝑥)

(𝜋𝑥)

sinc関数によってエッジ部などでは鮮鋭化の効果が期待できる。

Page 7: Image interpolation

Lanczos3法

元画像の6x6画素データを使用

係数計算

𝐼 𝑥, 𝑦 = 𝑖=05 𝑗=0

5 𝑤 𝑑𝑥𝑖)𝑤(𝑑𝑦𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)

𝑖=05 𝑗=0

5 𝑤 𝑑𝑥𝑖 𝑤(𝑑𝑦𝑗)

𝑤(𝑑) = 𝑠𝑖𝑛𝑐(𝑑)

𝑠𝑖𝑛𝑐( 𝑑 3)0

|𝑑| ≤ 3𝑜𝑡ℎ𝑒𝑟

𝑠𝑖𝑛𝑐(𝑥) = sin(𝜋𝑥)

(𝜋𝑥)

d

w

Page 8: Image interpolation

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

Page 9: Image interpolation

City block距離 vs.直線距離

ここまで、Bilinear法、Bicubic法、Lanczos法、すべて「X方向の距離とY方向の距離を求め、それぞれのウェイト(係数)計算をし、X方向のウェイトとY方向のウェイトを掛ける。」という手法をとってきました。

直線距離で計算するのは?

画質という意味では Lanczos2 の直線距離計算が最もバランスがとれているように思います。が、1ピクセルあたり、平方根(√)の計算が 16 回発生する事になり、計算量がとんでもない事になります。

𝐼 𝑥, 𝑦 = 𝑖=03 𝑗=0

3 𝑤 𝑑𝑖𝑗 𝐼(𝑥0 + 𝑖, 𝑦0 + 𝑗)

𝑖=03 𝑗=0

3 𝑤 𝑑𝑖𝑗

𝑑𝑖𝑗 = 𝑑𝑥𝑖2 + 𝑑𝑦𝑗

2

Page 10: Image interpolation

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)

𝐴𝛼 = 𝑓

Page 11: Image interpolation

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)

Page 12: Image interpolation

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 }

Page 13: Image interpolation

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)

計算量が非常に多い!

Page 14: Image interpolation

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