4段階量子化ではなく、単純に2値化してみた。
Source Code (Processing 0124 Beta) and Image File
今回はキーボードの aとs で閾値を操作できる。
プログラム自体は、前の量子化のしきい値を減らしただけだ。
PImageimg,img_result;
floatr_ratio=0.299;//RGB比合計して1
floatg_ratio=0.587;
floatb_ratio=0.114;intthreshold=128;//2値化の閾値
voidsetup(){
img=loadImage(“pileus-s.jpg”);
size(img.width*2,img.height);
image(img,0,0);
binarize();
}voiddraw(){
}voidbinarize(){
img_result=newPImage(img.width,img.height);
//2値化
floatlevel;
for(inti=0;icolorpix=img.pixels[i];
floatmed=(int)(r_ratio*red(pix)+g_ratio*green(pix)+b_ratio*blue(pix));
//floatmed=(int)(red(pix)+green(pix)+blue(pix));//RGB比を考慮しない
if(med>threshold)level=256;//白
elselevel=0;//黒
img_result.pixels[i]=color(level);
}
image(img_result,img.width,0);//表示
}voidkeyPressed(){
//2値化閾値の調整
if(‘A’<=key&&key<='z'){
switch(key){
case’a’:
if(threshold>0)threshold–;
break;
case’s’:
if(threshold<255)threshold++;
break;
}
}
println(“threshold:”+threshold);
binarize();
}