カラー画像を1bpp(1bit)白黒画像に変換アプリver1.1、閾値の自動設定、大津の二値化でできたかも
大津の二値化を使った白黒画像できたかも
今回のアプリのダウンロード先
1年前に作った
カラー画像を1bppの白黒2値化するアプリは
白黒の閾値は手動で設定か、画像全体の輝度平均で指定していたのを
自動で設定する、自動1と自動2を付け足した
ついでに見た目も少し変更してver1.1
画素(ピクセル)の輝度値が1~10までの10段階の場合で
それぞれの輝度値の画素個数が
1 3 1 1 5 3 1 0 0 1
だった場合で計算してみる
見た感じだと4と5のところで分ければ良さそう
計算して求めるにはどうしたらいいのかってところ
参照したところ
判別分析法(大津の二値化) 画像処理ソリューション
http://imagingsolution.blog.fc2.com/blog-entry-113.html
2値化 (binalization)
http://www.sanko-shoko.net/note.php?id=xkpw
【画像処理】大津の二値化処理の原理・特徴・計算式 | アルゴリズム雑記この辺を見ると、どうやら
https://algorithm.joho.info/image-processing/otsu-thresholding/
ある閾値で分けたとき、それぞれの範囲の画素の割合と平均輝度で計算できるみたい
計算する値
a範囲をa、b範囲をb
aの平均輝度= aの輝度合計 / aの画素数
bの平均輝度= bの輝度合計 / bの画素数
ってして
X=aの画素割合*bの画素割合*(aの平均輝度ーbの平均輝度)^2
このXの値が一番大きくなったときの閾値
さっきのヒストグラムで計算すると
全部計算して
これであっているかわかんないけど、それっぽい閾値が選ばれた
PixelFormat.Gray8のBitmapsourceからヒストグラム作成
ヒストグラムから指定範囲の平均輝度値
これらを使って
閾値の計算
背景色が青の330~351行目がそれ
これでそれっぽい閾値が得られる、これがアプリの自動2で動作するところ
大津の二値化を理解するには分散が必要みたいだけど、結果を得るだけなら画素割合と平均輝度だけでいいってことなのかも
説明見てもさっぱりわからないんだよねえ、説明の最後にある結果だけを真似てみたっていうだけ
自動1
これはab平均輝度の差が一番小さいときの閾値
なので2値化したあとの白と黒の画素数が同じくらいになるのかな?当たり障りのない平均的な分け方になる?
試したらうまくいく画像もあったので追加した
元の画像
初代グランツーリスモから
黒背景に黒のR32
自動2
閾値は101になった
黒いところは黒になる、正しい自動1
かなり暗いところも白に変換されて形が見えるようになった
元画像
自動2
自動1
白い
平均輝度
これはこれくらいがいいかなあ
ギットハブ
関連記事
次のバージョンは1年3ヶ月後
1年前の2018/1/22
カラー画像を1bpp(1bit)白黒画像に変換して保存するアプリ作ってみた、しきい値は手動設定 ( ソフトウェア ) - 午後わてんのブログ - Yahoo!ブログ
https://blogs.yahoo.co.jp/gogowaten/15335812.html