- @ThothChildren
- 2018.11.6
- PV 307
フロイドスタインバーグディザリング
ー 概要 ー
フロイド・スタインバーグ・ディザリング(Floyd–Steinberg dithering)は、特定の画素で新しい値を決めた際に元々との差を周りにばら撒くことで色の階調を減らしても見た目の誤差を少なくするディザリング手法(誤差拡散法の一種).他手法よりも見た目の違和感がなく、256色しか使えないGIFなどに用いられた.
この章を学ぶ前に必要な知識
条件
- 入力はカラーまたはグレー画像
- 出力で使用できる色をあらかじめ決めておく
効果
- 少ない色で人間の目でも違和感のないグラデーションなどを実現.
- 拡散する幅も小さく高速.
ポイント
- 自身の画素の誤差を周りに足し合わせて処理する誤差拡散法の一種
- 基本的に画像の左上から右方向そして下方向に走査.行ったり来たりする牛耕式の場合もある.
- 左上から処理していくとき、誤差を受け取るのは注目画素の左上と自身以外.
- 即ち一度自身を更新したらもう誰も値を変更してはならない
- 周辺画素への影響があるため並列化が難しい
- エッジは比較的残りやすい
解 説
フロイド・スタインバーグ・ディザリング(Floyd–Steinberg dithering)は、特定の画素で新しい値を決めた際に元々との差を周りにばら撒くことで色の階調を減らしても見た目の誤差を少なくするディザリング手法(誤差拡散法の一種).
他手法よりも見た目の違和感がなく、256色しか使えないGIFなどに用いられた.
あらかじめどの色の種類を出力で使うかは指定しておく.それらは使っていい色リストとしての"パレット"に入れておく.
手順
1. 左上より右になめてそして下へなめる処理を以下行う.
2. まず注目画素と最も近い"パレット"の色を選択.
3. 注目画素\( I_{target} \))を「最も近い"パレット"の色(\( I_{newTarget} \))」に置き換えて更新.
4. 上記のその画素値の差を計算
$$err = I_{target} - I_{newTarget} $$5. 4.で計算した画素値差をまだ画素値を更新していない周辺画素に以下のように決められた割合で分配.下記\(*\)が注目している画素,空欄の画素は何もしない.
上記を周辺画素の値に加えて、画素値を更新.
$$W= \frac{1}{16}\begin{bmatrix} & * & 7 \\ 3 & 5 & 1 \end{bmatrix}$$
周辺画素更新例
$$\begin{eqnarray}
I_{arround} &=& I_{arround} + err * W[1][1]\\
&=& I_{arround} + err * (\frac{5}{16})
\end{eqnarray}
$$ | フロイド・スタインバーグ・ディザリング(Floyd–Steinberg dithering)とは |
フロイドスタインバーグディザリング
の概念図 |
この章を学んで新たに学べる
Comments