組織的ディザリング
これまで見てきた、ディザリングは閾値が固定であったのに対し、組織的ディザリングは閾値を位置によって変化させる手法です。
ディザリング表は一般的に以下が利用されます。
元の画像
組織的ディザリング
基本的な使い方
まず、ディザリング表の0から15までの数字に4の2乗をかけて「0から255」に変換し、その値を閾値とします。
そして、縦横4区切りずつに、ディザリング表で算出した「0から255」の閾値で2値化を行なっていきます。
つまり組織的ディザリングでは縦横の4画素ごとに閾値が変化していきます。
サンプルコード
import cv2
import numpy as np
import random as rand
file_cat = 'img/cat.jpg'
gray = cv2.imread(file_cat , 0) #グレースケール
height, width = gray.shape # 高さ・幅取得
# ディザリング表
matrix = [[0, 8, 2, 10],[12, 4, 14, 6], [3, 11, 1, 9], [15, 7, 13, 5]]
for i in range(4):
for j in range(4):
matrix[i][j] = matrix[i][j] * 16
for i in range(height):
for j in range(width):
if gray[i][j] < matrix[i % 4][j % 4]: # 4区切りずつ判定する
gray[i][j] = 0
else:
gray[i][j] = 255
while 1:
cv2.imshow("gray", gray)
k = cv2.waitKey(1)
if k == ord('q'): # Qキーが押されたら終了
break
cv2.destroyAllWindows()