グレースケールのグラデーションに、白黒2値のカラーパレットと4x4のしきい値マップを使った配列ディザリングを適用した例。この時、使われるタイルパターンは全17通り。
配列ディザリング (はいれつでぃざりんぐ)とは、画像をディザリング するアルゴリズムの一つである。
このアルゴリズムは通常、色深度 が小さくて表示可能な色数が少ないディスプレイにおいて、なるべく滑らかな画像を表示するために使用される。たとえば、Microsoft Windows は「VGA 標準16色グラフィックモード」の時に配列ディザリング法を用いてグラフィックを表示する。画像にこのアルゴリズムを適用した場合、特徴的なクロスハッチング状のタイルパターンがハッキリと現れる。
しきい値マップ
このアルゴリズムは「しきい値マップ (M )」を使って色数を減らす。ディスプレイに表示される画像の各ピクセルの色の値と、対応する「しきい値マップ」のセルの値を比較し、画面に表示する色を決める。その過程で、元画像の色と、そのディスプレイで利用可能なカラーパレットの色との差分が切り捨てられる。
「しきい値マップ」の大きさは任意に決めて構わないが、普通は「2の累乗 かける 2の累乗」のマトリクスを使う。ちなみに、この「しきい値マップ」のことを「テーブル」という日本人がいるが、「マトリクス」が正しい(「テーブル」は「値」で構成された表、「マトリックス」は「行」と「列」で構成された表、つまり「行列 」のこと)。
M
=
1
4
×
[
0
2
3
1
]
{\displaystyle \mathbf {M} ={\frac {1}{4}}\times {\begin{bmatrix}0&2\\3&1\\\end{bmatrix}}}
任天堂
ポケットカメラ (1998年発売)。配列ディザリング法は軽くて十分きれいなので、Z80カスタム(4MHz)を搭載した携帯型ゲーム機でも動画(縦112ドット×横128ドット、モノクロ4階調)のリアルタイム処理が可能
配列ディザリングのアルゴリズムは画像を自然に表現できるが、しかし画像のピクセルの各々においては、そのピクセルの色の値がしきい値マップの対応するセルの値で置き換えられることになるので、ピクセルの色の値のしきい値を超えた部分がカットされ、元の色とは異なる色に量子化 されることになる。
配列ディザリング法のアルゴリズムを組むに際して、ほとんどの場合、すべてのピクセルにしきい値を追加して、ピクセルの値をしきい値と比較するだけで充分ディザリングの実用を満たすので、わざわざ0.5を減算して「しきい値マップ」を正規化する必要まではない。元画像のピクセルの輝度の値がベイヤーマトリクスの対応するセルの値よりも小さかった場合は、そのピクセルを「黒」で描写し、そうじゃなかった場合は「白」で描写する、みたいなアルゴリズムで充分である。ただ、正規化しなかった場合、画像の平均輝度がわずかに増加し、「ほとんど白に近いグレー」のピクセルがディザリングされずにそのまま白になる、という欠点がある。もっともこれは、グレースケールパレット(もしくは色同士の相対的な距離が(ほぼ)一定なカラーパレット)を使用する場合は問題とはならない。人間の目は明色の階調差よりも暗色の階調差の方をより正確に認識するため、「ほとんど白に近いグレー」を白飛びさせて暗色の階調差に割り振るのは、むしろ望ましいディザリング結果になるとすら言える。一方で、色数の特に少ないカラーパレットや任意の色で構成されたカラーパレットを使用してディザリングを行った場合は、元画像と全然違った見た目の画像が生成されることになるため、アルゴリズムを組む人は面倒がらずに適切な正規化を行った方が良い。
配列ディザリング法で、64色のカラーパレット(左)を使って、140 x 140 = 19600色のカラースケールを表現したもの(右)
逆の目線で言うと、アルゴリズムは、すべてのピクセルの各カラーチャンネル「c 」に対して次の変換を実行する。
c
′
=
n
e
a
r
e
s
t
_
p
a
l
e
t
t
e
_
c
o
l
o
r
(
c
+
r
×
(
M
(
x
mod
n
,
y
mod
n
)
−
1
2
)
)
{\displaystyle c'=\mathrm {nearest\_palette\_color} {\mathopen {}}\left(c+r\times \left(M(x{\bmod {n}},y{\bmod {n}})-{\frac {1}{2}}\right){\mathclose {}}\right)}
ここで、「M (i , j ) 」はi 番目の行とj 番目の列のしきい値マップ、「c ′ 」は変換された色、「r 」は色空間における広がりの量である。RGBの各色が0から255までのオクテット で表された、全「23N 」色の等間隔な色で構成されるカラーパレットを想定すると、一つの色は通常はこのような形で選択される。
r
≈
255
N
{\displaystyle r\approx {\frac {255}{N}}}
このアルゴリズムは1つ1つのピクセルのみを操作するもので、条件分岐もないため、非常に高速で、リアルタイム変換に適している。さらに、ディザパターンは表示フレームに対して常に同じ位置にあるため、誤差拡散法よりもジッター (いわゆる「カクツキ」「チラツキ」、現代のゲームエンジンのレトロゲーム機風シェーダーでも問題になる)が発生しにくく、アニメーションに適している。誤差拡散法のディザパターンよりも反復的なタイリングであるため、配列ディザリングを使用した画像の圧縮率は高くなる。配列ディザリングは、直線が真っ直ぐに変換され、揺らぎが少ないため、イラストなど線画系の画像に適している(写真などは誤差拡散法の方が奇麗に出る)。
カラーパレットに合わせてしきい値マップを自作する場合、しきい値マップの値同士の差は、カラーパレットの色同士の最小の差と同じ範囲になるようにスケーリングすることが望ましい。
注釈
^ Bayer, Bryce (June 11–13, 1973). “An optimum method for two-level rendition of continuous-tone pictures” . IEEE International Conference on Communications 1 : 11–15. オリジナル の2013-05-12時点におけるアーカイブ。. https://web.archive.org/web/20130512190753/http://white.stanford.edu:80/~brian/psy221/reader/Bayer.1973.pdf .
^ Joel Yliluoma. “Arbitrary-palette positional dithering algorithm ”
参照
関連項目
誤差拡散法
ドット絵 - 配列ディザリングはタイルパターンが奇麗に出るので、画像のドット絵化(デジタイズ)に適している。
外部リンク