のりだー君の画像処理講座

第4回 − 拡大縮小について −

今回から新しいテーマを取り上げます。この頃よく聞く「サムネイル」画像を作成する場合に必用となる拡大縮小アルゴリズムについて解説していきます。

■はじめに

ビットマップ形式の画像データ(第1回「画像の単位」を参照)は、画素(ピクセル)という点の集まりで構成されています。ですから、本来、拡大縮小処理には不向きな(つまり、処理結果が劣化してしまう)画像データといえるでしょう。しかし、近年、このような画像データを取り扱う上では重要な処理となってきました。そこで、基本処理から目的に応じた各種アルゴリズムを解説していきます。

■基本処理

手始めに、単純に1/2のサイズにしたい場合を考えます。(説明を簡単にするため、画素を数値で表現します。) 元画像を、以下のように定義します。
0123456789 これを1/2に縮小すると、
02468 となります。次に、2倍のサイズにしたい場合を考えます。
2倍に拡大すると、
0*1*2*3*4*5*6*7*8*9*     (* : 設定されていない画素)
となり、設定されていない画素が発生してしまいます。これは、処理が「元画像を2倍に拡大して拡大画像を作成する」という正論的な考え方のためです。実際の拡大縮小処理では、逆の考え方をします。つまり、「2倍に拡大される拡大画像の画素が、元画像のどこの画素にあたるかを調べ、その画素を拡大画像の画素とする」という逆変換で処理します。逆変換式は、a,bを拡大縮小率、(X,Y)を出力画像の画素、(x,y)を入力(元)画像の画素とすると、
x = X / a
y = Y / b
になります。ちなみに正変換式は、
X = ax
Y = by
となります。出力画像の全ての画素(X,Y)に対して、逆変換をかけて、対応する入力画像の画素を求めて、この画素の濃度値を出力画像にセットすれば上記のような”ぬけ”は起こらないはずです。ただし、逆変換の式で、x,yは小数を含むものになりますが、入力画像の画素の位置は整数なので、なんらかの方法で整数化することが必用です。ここで一番簡単な方法は四捨五入して最も近い画素を求める方法です。この処理は内挿処理と呼ばれます。(この説明は後述します。)それでは、逆変換で2倍拡大をしてみます。最初の拡大画像は、このようになっています。
********************
先頭の画素を逆変換(この場合、1/2倍します。)により元画像の位置を調べます。すると、"0"の画素が得られます。その濃度値を拡大画像の先頭の濃度値としてセットします。
0*******************
次に2番目の画素の入力画像の画素は、四捨五入して"1"がえられます。
01******************
出力画像の全ての画素を処理すると、
01122334455667788999
となります。(ただし、出力画像の最後の画素は、入力画像の外に位置するため、入力画像の端の画素の濃度値を採用しています。)

■内挿処理

内挿処理は濃度補間とも呼ばれ、出力画像座標系上に正方格子を設定し、その格子点に対応する画像データの配列に変換します。しかし、通常この出力画像座標系上での格子点に対応する入力画像の座標は整数値とはならないため、求めたい点の入力画像上での周辺の格子点の濃度値より内挿によって求めなくてはなりません。ここで、以下の内挿法について説明します。

@最近隣内挿法(nearest neighbor interpolation)
最近傍法とも呼ばれ、内挿したい点に最も近い格子点の濃度値を求めるもます。
最大1/2画素の位置誤差を生じ、拡大縮小率が高くなるに従いギザギザした感じのモザイク状になったり、細かな部分の情報(画素)が欠落し画質が劣化する欠点をもちますが、アルゴリズムが簡単で、オリジナルな画像データを壊さない利点もあります。

A共1次内挿法(bi-linear interpolation)
線形補間法とも呼ばれ、内挿したい点の周囲4格子点の画素の濃度値を用いて次式にて線形補間します。
この方法では、オリジナルな画像データが壊される欠点があるが、画素間の色を滑らかに変化させ、最近隣内挿法よりも自然な結果が得られます。

B3次たたみ込み内挿法(cubic convolution interpolation または bi-cubic interpolation)
3次補間法とも呼ばれ、さらに精度の高い補間を行う方法で、内挿したい点の周囲16格子点の画素の濃度値を用いて3次式にて補間します。
理論的には内挿したい点の濃度値が完全に復元できます。

Cその他の関数による内挿法
多項式関数、スプライン関数またはラグランジュ関数などの関数にて内挿するなどいろいろな方法が検討されています。

■まとめ

ただ単純に拡大縮小を行うのであれば、最も簡単で、処理速度の速い最近隣内挿法を使用します。先ほども述べたようにモザイク状がきになるのであれば、共1次内挿法を使用します。ただし、拡大率が高くなるに従い画像がぼやけてくる現象が起こります。なぜなら、画像中のエッジ(濃度値が急激に変化している)部分の画素値が滑らかになってしまい、エッジとして認識できなくなるためです。(エッジについては、次回以降に記述予定しています。)

この問題を解決するには、さらに参照する入力画像格子点数を増やすことで画像の情報をできるだけ反映する3次たたみ込み内挿法やその他の関数による内挿法により処理します。このように、得たい画像の品質と処理速度を天秤にかけて内挿法を選択していきます。また、内挿法や逆変換などは画像の回転などを取り扱う幾何(学的)変換でも使用されます。

今回は、基本処理から目的に応じた各種内挿法を解説していきましたが、これは拡大・縮小の両方に使用できます。しかし、実際に作成してみると縮小時の品質が良くない場合があります。そこで次回は、縮小時における固有の処理について解説していきます。

1999.11.12入稿