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

第3回 − ディザ処理について −

前回では減色処理について説明しました。減色処理だけでは、奇麗に表示できない場合があり、このような場合にディザ処理を施します。

前回にて、「高い階調の画像を低い階調の画像に変換するディザ処理」と記述しましたが、これでは言葉足らずでした。正しくは、「高い階調の画像を低い階調の画像に変換した場合に発生する階調(色数の)不足を補うディザ処理」です。

■ディザ処理

ディザ処理とは、利用できる色数の不足を見かけ上で奇麗に見せる方法で、元々は、白と黒しか表現できないプリンタ装置に濃淡画像を再現する場合に使用されていました。今回の場合は、減色で発生した量子化誤差を視覚的に目障りにならないようにします。

ディザ処理には、周辺画素の濃度などを考慮する方法と、それらを考慮しない方法があります。ここでは周辺画素の濃度を考慮した、階調特性に優れる誤差拡散法について説明します。

■誤差拡散法

誤差拡散法は、色の置き換えの際に発生する誤差を周りの画素に分散させることで、画像全体の累積的な色の誤差をほぼゼロにする方法です。ここで、色の誤差とは、色を置き換えるとき、元の画像の色とカラーパレットから選択された置き換える色の差のことです。また量子化誤差は、この方法によって高域側に変調されます。つまり、人間の視覚特性(高域側に存在する誤差やひずみを知覚しにくい)を考慮した方法といえます。

■結果

ここまでをまとめると、第1回の@の問題、256色表示ディスプレイでの24ビット画像表示、つまり、16777216色を256色で表現するためには、中央値分割法などにより256色個のカラーパレットを作成し、原画像の各画素の色に最も近い色を選定して、誤差拡散法などによって原画像の階調を再現し表示します。これでやっと表示できました。

■コラム

今まで、256色表示ディスプレイでは256色個のカラーパレットで表現すると言っていましたが、実は、Windowsだとシステムが20色を予約してしまっているため、画像を表示するのに作成した256色個のカラーパレットのうちどれもシステム予約の20色と一致していなければ、236色しか使用できないのです。

今度は第1回のAの問題、複数の画像を同時に表示する場合を考えます。

この問題解決には、どの画像も1つのカラーパレット(同じ256色)で表現すればいいですね。でも、同じカラーパレットをどのように作成すればよいのか?実は、この記事を表示しているブラウザーが、そのカラーパレットを作成しています。画像はRGBの各成分を8ビット(256階調)、16777216色(= 256 x 256 x 256)で表現していますから、色の各成分を6階調の6 x 6 x 6 = 216色で均等にすればどの画像も無理なく表現できます。しかも、コラムで記述した「236色の制限」をもクリアーしています。後は、今までの処理で複数の画像を同時に表示することができます。

■まとめ

第1回に提示した問題を第2回、3回で解決していきました。だだ、画像を表示するのに色々と処理をしなければなりません。また、これらに出てきた処理は、画像ファイルのフォーマット変換でも使用されています。例えば、JPEG等のフルカラーの画像をGIF等の256色までしか扱えないフォーマットに変換する場合です。

次回は、この頃よく聞く「サムネイル」画像を作成する場合に必用となる拡大縮小アルゴリズムについて解説していきます。また、気が付いた事柄を随時、挿入していくつもりです。
オートバイ(Ducati 916 SPS)のレース活動により(スゴウに遠征するのだ〜! 最遠方賞がもらえるかも?)ちょっと投稿がおくれるかもしれません。

1999.10.8入稿