第6回 ディザリング

※ replitで「You've used up all your Development time」というメッセージが出た人はこちらを参考にして新しくreplitのアカウントを作ってください。
※ 本題に入る前に、必ず動画の連絡 を見てください。

  1. リサイズとグレースケール化
  2. 二値化
  3. ランダムディザリング
  4. 組織的ディザリング

二値化
二値化の処理では、元画像の各ピクセルの明度を調べて、閾値 (「いきち」、または「しきいち」と読む) より暗いものは黒、明るいものは白にする。
OpenCVで画像 img を閾値50で二値化する処理は以下の通り。
cv2.threshold(img, 50, 255, cv2.THRESH_BINARY)

閾値が小さければ白い部分が多く、閾値が大きければ黒い部分が多くなる。
(これは解説動画で使っているサンプル画像をグレースケール化したもの。これをベースに以降の処理を行っているので、課題には使わないこと)


閾値50で二値化


閾値100で二値化


閾値150で二値化
ランダムディザリング
ピクセルごとにランダムな閾値を設定すると、出力画像は白と黒の点がランダムにばらまかれる。
ただし、元画像の暗い場所に対応するエリアでは黒の割合が多く、明るい場所に対応するエリアでは白の割合が多くなる。
その結果、単純な二値化よりも元画像に含まれる被写体の構造が見えるようになる。
組織的ディザリング
以下のような4x4の配列を考える。これはBayer型マスクと呼ばれるもの。
0 8 2 10
12 4 14 6
3 11 1 9
15 7 13 5
これらの数値 (0~15) に対して「16倍して8を加える」という処理を行うと、8~248の値が得られる。

その値を閾値として、元画像の4x4のパーツごとに対応させると以下のような画像が得られる。

このような方法 (組織的ディザリング) に使われるマスクには、Bayer型の他にも以下のようなものがある。

渦型
6 7 8 9
5 0 1 10
4 3 2 11
15 14 13 12

網点型
11 4 6 9
12 0 2 14
7 8 10 5
3 15 13 1

課題

課題解答
戻る