// 画像用の変数
PImage[] img = new PImage[9];
// 出力ファイル名
String[] fName = {"元", "1二値化0.3", "1二値化0.5", "1二値化0.7", "1減色",
"2ランダムグレー", "2ランダムカラー", "3組織グレー", "3組織カラー"};
int w, h;
void setup() {
size(800, 600);
w = width;
h = height;
img[0] = loadImage("元.jpg");
img[0].resize(w, h);
// 1~8番を元画像と同じ画像にする
for (int i=1; i<=8; i++) {
img[i] = img[0].get();
}
binarize(0.3, 1); // 閾値0.3で二値化した画像をimg[1]に保存
binarize(0.5, 2); // 閾値0.5で二値化した画像をimg[2]に保存
binarize(0.7, 3); // 閾値0.7で二値化した画像をimg[3]に保存
reduceColor(2, 4); // R, G, Bそれぞれ2色に減色した画像をimg[4]に保存
randomDither(true, 5); // ランダムディザリング(白黒)した画像をimg[5]に保存
randomDither(false, 6); // ランダムディザリング(カラー)した画像をimg[6]に保存
orderedDither(true, 7); // 組織的ディザリング(白黒)した画像をimg[7]に保存
orderedDither(false, 8); // 組織的ディザリング(カラー)した画像をimg[8]に保存
println("完了");
textFont(createFont("MS Pゴシック", 48));
image(img[0], 0, 0, width, height);
}
void draw() {
}
// 閾値tで二値化する(課題1)
void binarize(float t, int n) {
img[n].save("data/"+ fName[n] +".png");
}
// RGBそれぞれcn色に減色する(課題1)
void reduceColor(int cn, int n) {
img[n].save("data/"+ fName[n] +".png");
}
// ランダムディザリングをかける(課題2)
// isMonochromeがtrueなら白黒、falseならカラー
void randomDither(boolean isMonochrome, int n) {
for (int j=0; j<h; j++) {
for (int i=0; i<w; i++) {
color c = img[n].pixels[i+j*w];
// 0~255のランダムな整数を作ってtに入れる
if (isMonochrome) {
// cの明度がtより小さければ0, そうでなければ255をbrに入れる
// n番目の画像の(i, j)のピクセルに、明るさがbrの色を設定する
} else {
// cの赤成分がtより小さければ0, そうでなければ255をrに入れる
// cの緑成分がtより小さければ0, そうでなければ255をgに入れる
// cの青成分がtより小さければ0, そうでなければ255をbに入れる
// n番目の画像の(i, j)のピクセルに、色成分がr, g, bの色を設定する
}
}
}
img[n].save("data/"+ fName[n] +".png");
}
// 組織的ディザリングをかける(課題3)
// isMonochromeがtrueなら白黒、falseならカラー
void orderedDither(boolean isMonochrome, int n) {
}
void keyPressed() {
int k = key-'0';
if (k>=0 && k<=8) {
background(0);
image(img[k], 0, 0, width, height);
fill(255, 0, 0);
text(fName[k], 30, height-30);
fill(255);
}
}