画像のリサイズ – AS3.0

AS3で画像処理入門(その4) – flashrodにて、ActionScript3.0による画像のリサイズ処理をしてるエントリーを見つけました。

リンク先のエントリーではリサイズ処理の補間方法についての説明がなかったので簡単に、

・補間方法について
 幾何学変換では理論上は変換行列を用いることで実現できますが,デジタル画像においては,入力画像の各座標値に変換行列を掛け合わせただけでは不完全です.それはデジタル画像の座標は正の整数値で表現されるため,小数点を含んだ座標を参照することが出来ないからです.そこで,小数点を含む座標における画素値を計算するために様々な画像補間法が提案されています.

* ニアレストネイバー法 (最近傍法)
補間される画素の座標が小数点を含む場合,最も近い座標を選ぶ手法.
エッジは保存されますが,拡大したときに粗さが目立ちます.
* バイリニア補間法 (線形補間法)
補間される座標の近傍4画素の値を用いて1次補間を行って画素の値を決める手法.
最近隣接補間と比べて滑らかな補間結果が得られます.
* バイキュービック補間法 (双三次補間法)
補間される座標の近傍16画素の値を用いて3次補間を行って画素の値を決める手法.
最も粗さの少ない画像が得られますが,エッジなどがぼやける傾向にあります.

この3つが有名ですが、リンク先ではバイキュービック補間の例はありませんでした。リサイズ処理の説明でバイキュービック補間が載ってない本があるとは少し考えづらいですが;

あと、最近傍法の所で(コードを見る限りでは)誤解を与えそうな所があったので補足。

拡大先画像の座標から拡大元画像の座標を決めてその画素値を参照していくわけですが、その際に決めた座標が実数になってしまう場合も当然考えられます。最近傍法というのは、その実数座標に一番近い整数座標の画素値を参照する手法になります。よって、画素値を参照する拡大元画像の座標はNumber型(実数)で保存しておき、関数内では、

とします。切り捨てだと”最近傍”になりません。つまり(x,y)、(x+1,y)、(x,y+1)、(x+1,y+1)の4つの整数座標のどれかから画素値を参照する座標を決定する際、切り捨てだと必ず(x,y)が選ばれてしまうということです。画像のリサイズ処理くらいだと特に気にすることはないかもしれませんが一応参考程度に。

あわせて読む:

One thought

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です