f8g

ハーフトーニング (ディザ法)

画像を2値化するハーフトーニングのDither法が面白かったので紹介。

コード

パターンを与えると、それっぽく点を打つ。(これ使用

function dither(img, pattern){
	var black = new ImageProcessing.Color(0, 0, 0);
	var white = new ImageProcessing.Color(255, 255, 255);
	var l = pattern.length;
	var n = 256 / (l * l);

	img.each(function(px, x, y){
		if(px.average() > pattern[x % l][y % l] * n + 8)
			img.setPixel(x, y, white);
		else
			img.setPixel(x, y, black);
	});
}

参考PDF
http://gandalf.doshisha.ac.jp/~kon/grad-thesis/archives/2003yamauchi.pdf

Bayer

var pattern = [
	[ 0,  8,  2, 10],
	[12,  4, 14,  6],
	[ 3, 11,  1,  9],
	[15,  7, 13,  5]
];

http://gyazo.com/45bf9352012ef5239563f065f69230cd.png

Screw

var pattern = [
	[13,  7,  6, 12],
	[ 8,  1,  0,  5],
	[ 9,  2,  3,  4],
	[14, 10, 11, 15]
];

http://gyazo.com/bf9cb56a7913ed6d21862844639bf965.png

Dot concentrate

var pattern = [
	[12, 4, 8, 14],
	[10, 0, 1,  7],
	[ 6, 3, 2, 11],
	[15, 9, 5, 13]
];

http://gyazo.com/58fa5470e2708b7f57ff35cbe4f46f7e.png