見える化・数値化のすすめ

見える化・数値化や画像処理を利用して日々の業務をより良くする手段をまとめたサイト

画像補間の代表手法を実際に計算してみた|バイリニア補間・バイキュービック補間

画像処理の分野では、画像を拡大・縮小したり、回転・変形させたりする場面がよくあります。この時に欠かせないのが再標本化という処理です。そして再標本化において特に重要な技術が「補間」になります。今回は代表的な補間手法と具体的な計算方法について例題を用いて紹介したいと思います、

なぜ補間が必要なのか?

画像を回転させたり拡大・縮小すると、新たな座標上に画素を移動させる必要がありますが、多くの場合その移動先の座標は元画像の画素位置の中心と一致しません。つまり、「この座標に相当する画素値って何?」を新たに推定しなければならず、その推定手法が「補間」です。

例えば、6x6の画素(ピクセル)が並んだ画面において、元画像では左上から3段目の画素値(グレースケール値)が171の明るさを持っているとします。ここから画像を回転した時、回転先が回転前の画素の素子位置と全く一緒になるかと考えると、ほぼ必ずずれると思います。しかし画素の素子位置は決まっているので近い素子で補間推定して画素値を決める必要があるわけですね。

補間後の位置がずれる画像

もし補間を行わずに画像を変形すると、拡大時に画素が荒くなったり、回転後にギザギザやモザイクが生じたりします。補間は、変形後の画像でも滑らかな見た目を維持するために欠かせない処理です。

代表的な補間方法

補間方法の代表として3つ今回紹介したいと思います。

これらについて詳細と実際の計算内容を紹介したいと思います。

補間方法とその比較

まず最初に代表的な補間手法とその特徴を表にまとめました。

補間方法

特徴

注意点(デメリット)

ニアレスト

ネイバー補間

・最も高速

・最近傍の画素値を使用

・分類ラベルのデータに

・画質は粗い

・ギザギザやブロックノイズ多

バイリニア補間

・周囲4画素を用いた補間。

・リサイズや回転で幅広く使用

・エッジがぼやける

バイキュービック補間

・周囲16画素を用いた補間

・高画質で自然な見た目。

・計算コストが高い

・処理速度が最も遅い。

補間後の画像の滑らかさは

ニアレストネイバー < バイリニア補間 < バイキュービック補間

補間時の処理速度は

バイキュービック補間 < バイリニア補間 < ニアレストネイバー

となるわけですね。実際に3つの補間をした際の画像も作成してみました。

各補間手法比較

画像をみると、ニアレストネイバーは画質粗く、ギザギザ感があります。階段とか顕著ですね。
バイリニア補間では十分滑らかですが、少しボケているようにも見えます。
バイキュービック補間は、滑らかかつエッジがそこまでボケていないようにも見えますが、バイリニア補間でも十分な感じとも見れますね。

それでは各補間方法の内容を紹介したいと思います。

ニアレストネイバー補間

最も近い整数座標にある画素の値をそのまま使います。式で表すとこんな感じ。[x+0.5]と[y+0.5]は少数以下を四捨五入しているのと同等です。

ニアレストネイバー計算式

実際に計算するとこのような内容になります。
ニアレストネイバ計算計算は非常に簡単ですが、画素の連続性が考慮されないので、粗くなります。

バイリニア補間

周囲4画素の値を使い、x方向・y方向の距離に応じて加重平均を行います。計算式を文字で記載すると行列で表されるのですが、煩雑(面倒)なので実際の計算手順で見てみましょう。以下に例題を準備しました。下記状況の時、Iの素子はどんな画素値にすればいいかを考えます。
バイリニア補間の例題0
         バイリニア補間の例題1
それでは実際に考えましょう。手順は以下の通りです。
1:縦方向の画素値(E・F)を比で求める。
2:辺EFの横方向の画素値を比で求める。
バイリニア補間計算1

バイキュービック補間

バイキュービックでは、x・y方向それぞれに4つ、計16画素を使用します。計算は、各横4つ・縦4つそれぞれの軸の重みhを計算したうえで、各画素値に横・縦軸の重みhを掛けたものを合算します。重みhの計算式は以下の通りです。(tの値は注目している縦・横軸とIの距離です。)

バイキュービック式1

ただし、一般的には a = -1.0 を代入された以下のような式がよく利用されます。今回はこちらの式を利用しながら計算します。

バイキュービックの計算式2

上記の式はtの距離によって場合分けも多く、手順をみても分かりづらいと思うので例題をまた準備しました。

バイキュービック例題1

では実際に計算しましょう。手順は以下の通りです。
1:縦4つ横4つそれぞれの重み(hy1,hy2,hy3,hy4,hx1,hx2,hx3,hx4)を求める
2:16個の画素値にそれぞれの重みを掛けて、合算する。

まずは各重みを計算します。tの値は軸線からの距離になります。1マスで1の距離になる感じですね。

バイキュービック計算1

これで全ての重みが計算できました。次は各重みを16個の画素値に掛けて合算します。

バイキュービック計算2

計算は複雑ですが、エッジやグラデーションの表現が自然で、写真のような滑らかさが得られます。

ちなみに上記の内容をバイリニア補間で計算すると以下の結果となりました。近しい値にはなりますね。

バイリニア(バイキュービック比較)補間

おわりに 

補間処理は、画質を保つための重要なステップです。どの手法を使うかは目的に沿いつつ「速さを取るか、画質を取るか」によって判断されます。以下の使い分けをする指標もあります。

・ニアレストネイバー :分類マスクなどラベルを壊したくないとき 
・バイリニア補間   :一般的な拡大や回転処理
バイキュービック補間:高品質な画像変換や印刷用

補間手法の選定は処理内容と目的に応じて検討すべきですので、補間原理と具体的な計算を理解することで、よりやりたいことにあった画像処理が実現できると良いですね。