午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

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

 
画像を白黒2値に変換して保存するアプリ

動作の様子
しきい値を変更しているところ
平均輝度のボタンで画像の平均輝度をしきい値に設定
 
 
 
画像を開くときはファイルをドラッグアンドドロップ
対応するのは普通の画像ファイルで
画像形式はbmpjpegpngtiff、gif、wdpなどの8bpp以上の画像
イメージ 2
こういうカラー画像もグレースケールで表示される
 
変換した画像の保存形式
イメージ 3
開ける画像形式とだいたい同じ
 
 
保存画像のbppを1, 8, 32から指定できる
それぞれのPixelFormatは
1bppがBlackWhite
8bppがGray8
32bppがBgr32
効率がいいのは1bpp
8と32はムダにファイルサイズが大きくなるけど一般的な画像形式
 
 
1bppを指定した場合、なぜかPixelFormatがIndexed1になってしまうけど、同じ1bppだから問題ない?
 
指定通りに保存される
 
gif
どれを指定しても8bppになる
 
1bppと8bppが8bitグレースケール、32bppは24bppカラーになる
jpegの画質指定は75
2値画像でjpegの意味は薄いからおまけ程度
 
wdp
問題ない
ロスレス(可逆圧縮)設定で保存している
 
pngやwdp同様、指定通りに保存される
 
tiff形式で保存するときの圧縮形式の選択
イメージ 4
選択できるようにしてみた
 
    保存形式	ファイルサイズ(KB)
tiff(Ccitt4)		3.1
png			3.7
gif			3.9
tiff(Default)	4.2
wdp			5.7
bmp			6.1
jpeg			30.8
上の画像を1bppで保存した時に
一番効率が良かったのはtiff画像をCcitt4って言う圧縮方式だった
jpeg不可逆圧縮だからねえ…白黒はっきりした画像には弱い
wdpの1bpp保存はWmpBitmapEncoderの初期設定だと画像が崩壊していたけど、ロスレス指定で正常に保存できた
 
イメージ 5
左画像はロスレス指定、ImageQualityLevel = 1.0f;
右画像は初期値でImageQualityLevel = 0.9f;
1bpp画像に不可逆圧縮は意味が薄いってことなんだろうねえ
 
 
 
 
 
しきい値を決める方法に大津の2値化ってのがあるんだけど、難しくてできなかった…かわりに画像の平均輝度をしきい値にするものだけ付けてみたのが今回のアプリ
目的は1bppのBitmap画像を作ってみたかったとか、画像の減色やディザリングを試してみたかったはずなんだけど、よくわかんなくなってきたなあ
白黒2値画像はまだ続く
 
 
関連記事
カラー画像を1bpp(1bit)白黒画像に変換して保存するアプリのコード ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15335830.html
今回のアプリのコード
文字カウントしたら約11000文字で、ブログの文字上限に引っかかるかと思ったけど載せれた
 
 
一年後、2018/12/04
カラー画像を1bpp(1bit)白黒画像に変換アプリver1.1、閾値の自動設定、大津の二値化でできたかも ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15779372.html