今回はテキスト5-1 (132ページ~) のヒストグラムについての実践を行う。画像の明るさ・コントラストを変えたときにヒストグラムがどのように変化するかを調べる。
PImage img = loadImage("元.jpg"); // 横幅が1024になるようにリサイズ img.resize(1024, 1024*img.height/img.width); int w = img.width; int h = img.height; img.filter(GRAY); // 画像をグレースケール化する img.save("data/画像1.jpg"); // 画像を保存する // ヒストグラム int[] graph = new int[256]; // 明るさ0~255のピクセルの数をそれぞれカウント for (int i=0; i<w*h; i++) { graph[int(brightness(img.pixels[i]))]++; } float hmax=0; // グラフの最大値 for (int i=0; i<256; i++) { if (graph[i]>hmax) { hmax = graph[i]; } } // ヒストグラムの描画 PGraphics pg = createGraphics(w, h); pg.beginDraw(); pg.fill(0); pg.rect(0, 0, w, h); pg.fill(255); for (int i=0; i<256; i++) { pg.rect(i*4, h*(1-graph[i]/hmax), 4, h*graph[i]/hmax); } pg.endDraw(); img.pixels=pg.pixels; img.save("data/ヒストグラム1.png"); // 画像を保存する exit(); |
for (int i=0; i<w*h; i++){ float b=brightness(img.pixels[i]); // その点の明るさ float db=b/(255.0/2)-1; // 中央からの明るさのずれを規格化した値 b += 50*(1-db*db); // 上に凸の2次関数の形だけ底上げ img.pixels[i] = color(b); // 計算した値をピクセルに設定 } |