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はテクセルBに一番近いので
B色の割当が一番大きい結果になります。
今回も精読いただきありがとうございました。
※ 元ブログから移転された記事です。
コメント
コメントを投稿