スポンサーリンク
スポンサーリンク

【OpenCV】3つの擬似濃淡変換(ディザリング)の解説【Python】

擬似濃淡変換(ディザリング)とは

様々な画像処理の中に、擬似濃淡変換(以下ディザリング)というものがあります。

このディザリングは2値を扱うという特徴があり、「0」と「255」の2つの値しか扱いません。こういった画像は、2値画像といいます。

基本的な2値画像は例えばこういったものです。

こうすることによって、データ量を少なくすることができますが、やはり「0」と「255」しかないということで、画像のなめらかさは失われています。

そこで、ディザリングを使って、基本的な2値画像では再現できない画像のなめらかさを、少し複雑なアルゴリズム(仕組み)によって再現してあげます。

今回は普通の2値画像の紹介も含めて、3つの有名なディザリングを紹介していきたいと思います。

そして今回しようする画像はオープンソースの画像で、先ほど2値化された状態で紹介しましたが、こちらになります。

ファイル名は「lena.jpg」にしました。

もはやお馴染みですね。

普通の2値画像

まずは2値化する際に、ソース画像をグレースケール化してカラーチャンネルを1つにします。

次に、閾値(しきいち)を定める必要がありますが、一般的には閾値を「128」にするので、「128」に設定します。これは、「0」と「255」の中間の値です。

そして、画素値がこの閾値未満なら「0」に、以上なら「255」に変換してあげます。

(main.py)

結果

先ほども言いましたが、やはりなめらかさが欠けていますね。

ここからは、ディザリングを行なっていき、なめらかさを再現していきます。

ランダムディザリング

ランダムディザリングでは、閾値(しきいち)を乱数で生成します。その他は同じ方法です。

(main.py)

結果

先ほどの2値画像よりかなり見栄えが良くなりました。

ノイズの向こうに綺麗な画像がありそうな感じを受けます。

誤差拡散ディザリング

誤差拡散ディザリングでは、2値化した際に生じる誤差を次の画素値に反映させます。

 

結果

ランダムディザリングよりさらになめらかになり、より画像の詳細な情報を知ることができるようになりました。

組織的ディザリング

組織的ディザリングでは、ディザリング表というのを用いて閾値を計算します。

一般的に用いられるディザリング表は以下のようになります。

このディザリング表に書かれている「0〜15」までの数字に4の二乗をかけて、「0〜255」に変換し、その値を閾値にします。

そして、縦横4区切りずつに、ディザリング表で算出した「0〜255」の閾値で2値化を行なっていきます。

(main.py)

結果

もちろんですが、なめらかな画像になりました。

組織的ディザリングの見た目は、ディザリング表を変更すればいくらでも変わるので、組織的ディザリングを用いた別の例も紹介していきます。

3×3の組織的ディザリング

使用するディザリング表はこちらです。

より細かく区切っているため、4×4の画像より鮮明になりました。

5×5の組織的ディザリング

使用するディザリング表はこちらです。

区切る範囲が先ほどより大きいため、3×3と比べて若干粗い画像になりました。

コメント