2006 年 2 月 7 日 19 時 24 分

極限の減色


このアーカイブは同期化されません。 mixi の日記が更新されても、このアーカイブには反映されません。


[写真] [写真]


では、極限まで減色するとどうなるか。
1 ピクセルあたり 1 ビットしか使えない画像だ。

もちろん、RGB では表現できないため、
カラーテーブルを使った減色となるが、
2 色しか使えないことになる。

では、その 2 色に白と黒を選んでみよう。
つまり、白黒画像へと減色することになる。
この処理は 2 値化とも呼ばれることがある。

色情報を表現するのは絶望的なのは明らかなので、
以前説明したグレースケールへの計算を行ったあと、
値が 127 以下の場合は黒、128 以上の場合は白、
こういう発想で処理をしてみよう。

# limit, unpack_rgb ルーチンはカーネル実装を参照のこと

my $data = read_bmp;

foreach my $line (@$data) {
    foreach my $pixel (@$line) {
        my ($red, $green, $blue) = unpack_rgb($pixel);

        no integer;

        $pixel = $red * 0.299 + $green * 0.587 + $blue * 0.114;
        $pixel = limit(int($red + 0.5), 0, 255) < 127 ? 0 : 1;
    }
}

my @colors = (0x00000000, 0x00ffffff);

write_bmp($data, 1, \@colors);

結果は写真の通りとなった。
黒と白のバランスが悪く、全体的に黒くなってしまった。
さて、どうすればもう少しましになるだろうか。



Copyright (c) 1994-2007 Project Loafer. All rights reserved.