GPG雑学:バイリニアフィルタ - 画像を拡大する方法

​ 当然の話ですが、デジタル画像は拡大しても
細かい部分を詳しく見ることはできません。














コンピューターは画像を単純に
色情報の配列として保存しているだけです。





こういう風に色データの配列で作られています。


昔のコンピューターは画面を拡大するとき
隙間の部分を近くの色で塗り替えました。




計算は簡単ですが、結果としてはあまり綺麗ではないです。

ギザギザしている部分が良く見つかります。


コンピューターの性能が良くなってからは
もっと自然に見える拡大方法が出てきました。

従来の拡大画像(左)、現在の拡大画像(右)


今日は画像を拡大する時に良く使われている
バイリニアフィルタ 「Bilinear Filter」 について話します。










● バイリニアフィルタとは? ●


名前の意味そのまま訳すると
二重(bi) 線形(linear) 補間(filter) です。



。。。



先ずは 線形補間 について説明します。


例えは、こういうグラフがあるとしましょう



そして、このグラフが何らかの理由で
一部のデータだけ残った場合を考えてみます。



この情報から元のグラフを復元するため
点と点の間を線で繋げます。


これが線形補間です。




線形補間の良い所は、計算がめちゃくちゃ早くて
結果物も計算の軽さに比べて悪くないことです。

これは演算速度を重要視するゲームでは
強力な利点として作用します。


線分の中を計算するには内分点公式を使います。
\(\displaystyle P(x,y) = \frac{n}{m+n}A(x,y) + \frac{m}{m+n}B(x,y)\)



色の場合は赤、緑、青の各要素ごとに分けて
線形補間を行います。




すなわち、バイリニアフィルタ(二重線形補間)
画像の色情報を2つの軸(横、縦)に対して
線形補間することです。



では、具体的な計算方法をみてみましょう。



● バイリニアフィルタの計算仕方 ●


※その前、用語の整理をしておきます。
テクセル:加工する前の元イメージ画素のこと
ピクセル:加工後、画面に写っている画素のこと





Step 1.
計算しようとするピクセルを基準で
周りの4つのテクセル情報を取得します。

ピクセル周りの4テクセル(A、B、C、D)

各テクセルの重心点からの距離を取得



Step 2.
横軸で線形補間を行い、2地点の色を計算します。

A と B を線形補間し、E 地点の色を計算
\(\displaystyle E = \frac{b}{a+b}A + \frac{a}{a+b}B\)

C と D を線形補間し、F 地点の色を計算
\(\displaystyle F = \frac{b}{a+b}C + \frac{a}{a+b}D\)



Step 3.
計算された2地点を縦軸で線形補間して
目的地点のピクセル色を計算します。

E と F を線形補間し、目的地 P の色を計算
\(\displaystyle P = \frac{d}{c+d}E + \frac{c}{c+d}F\)


これでP地点のピクセル色が計算できました。


各ピクセルに対して上記の計算を行うと
こんなふうに綺麗に補間できます。





● おまけに ●

上記の計算式を少し整理して、Pの色を
A、B、C、Dと距離だけで表現してみます。

\(\displaystyle P = \frac{d}{c+d}E + \frac{c}{c+d}F\)

\(\displaystyle = \frac{d}{c+d} \left ( \frac{b}{a+b}A + \frac{a}{a+b}B \right )\)

\(\displaystyle + \frac{c}{c+d} \left ( \frac{b}{a+b}C + \frac{a}{a+b}D \right )\)

\(\displaystyle = \frac{bd}{(a+b)(c+d)}A + \frac{ad}{(a+b)(c+d)}B\)

\(\displaystyle + \frac{bc}{(a+b)(c+d)}C + \frac{ac}{(a+b)(c+d)}D\)


ところで、四角形 「ABCD」 の各部分の面積は
以下になります。


\(S_1 = ac\)
\(S_2 = bc\)
\(S_3 = ad\)
\(S_4 = bd\)
\(S_{TOTAL} (S_T) = (a+b)(c+d)\)

従って、上の式をa,b,c,d部分を面積で置換すると
以下のように綺麗に整理されます。

\(\displaystyle P = \frac{S_4}{S_T}A + \frac{S_3}{S_T}B + \frac{S_2}{S_T}C + \frac{S_1}{S_T}D\)


この式を良く考えると、P地点の色は
各地点A,B,C,Dの色を対角に置かれている
領域の面積ほど割り当ている形です。

各テクセルを対角線向こうの領域に塗ります。


この状態で色を混ぜかけるとPピクセルの色になります。
ピクセルPはテクセルBに一番近いので
B色の割当が一番大きい結果になります。



今回も精読いただきありがとうございました。





※ 元ブログから移転された記事です。

コメント