Quantcast
Channel: 午後わてんのブログ
Viewing all articles
Browse latest Browse all 420

カラー画像を1bpp(1bit)白黒画像に変換して保存するアプリ作ってみた、しきい値は手動設定

$
0
0

画像を白黒2値に変換して保存するアプリ
イメージ 1
しきい値を変更しているところ
平均輝度のボタンで画像の平均輝度をしきい値に設定



画像を開くときはファイルをドラッグアンドドロップ
対応するのは普通の画像ファイルで
画像形式はbmp、jpeg、png、tiff、gif、wdpなどの8bpp以上の画像
イメージ 2
こういうカラー画像もグレースケールで表示される


変換した画像の保存形式
イメージ 3
開ける画像形式とだいたい同じ


保存画像のbppを1, 8, 32から指定できる
それぞれのPixelFormatは
1bppがBlackWhite
8bppがGray8
32bppがBgr32
効率がいいのは1bpp
8と32はムダにファイルサイズが大きくなるけど一般的な画像形式


bmp
1bppを指定した場合、なぜかPixelFormatがIndexed1になってしまうけど、同じ1bppだから問題ない?

png
指定通りに保存される
gif
どれを指定しても8bppになる

jpeg
1bppと8bppが8bitグレースケール、32bppは24bppカラーになる
jpegの画質指定は75
2値画像でjpegの意味は薄いからおまけ程度

wdp
問題ない
ロスレス(可逆圧縮)設定で保存している

tiff
pngやwdp同様、指定通りに保存される

tiff形式で保存するときの圧縮形式の選択
イメージ 4
選択できるようにしてみた

保存形式ファイルサイズ(KB)
tiff(Ccitt4)3.1
png3.7
gif3.9
tiff(Default)4.2
wdp5.7
bmp6.1
jpeg30.8

上の画像を1bppで保存した時に
一番効率が良かったのはtiff画像をCcitt4って言う圧縮方式だった
jpegは不可逆圧縮だからねえ…白黒はっきりした画像には弱い
wdpの1bpp保存はWmpBitmapEncoderの初期設定だと画像が崩壊していたけど、ロスレス指定で正常に保存できた

イメージ 5
左画像はロスレス指定、ImageQualityLevel = 1.0f;
右画像は初期値でImageQualityLevel = 0.9f;
1bpp画像に不可逆圧縮は意味が薄いってことなんだろうねえ





しきい値を決める方法に大津の2値化ってのがあるんだけど、難しくてできなかった…かわりに画像の平均輝度をしきい値にするものだけ付けてみたのが今回のアプリ
目的は1bppのBitmap画像を作ってみたかったとか、画像の減色やディザリングを試してみたかったはずなんだけど、よくわかんなくなってきたなあ
白黒2値画像はまだ続く














Viewing all articles
Browse latest Browse all 420

Trending Articles