目次→http://1studying.blogspot.jp/2017/07/c-magicknetmokuzi.html#kuw09
「Magick.NET」で
グレースケール画像を、モノクロ2階調へ変換する方法を記載します。
(2階調画像を作成する場合は、
必ず事前にグレースケール画像を用意します。)
画像のグレースケール化処理については以下のリンク先を参照して下さい。
「C# Magick.NETを使ってみる。グレースケール変換」
http://1studying.blogspot.jp/2017/07/c-magicknet.html
しきい値で2値化
グレースケール画像を閾値で2値化します。
//閾値で2階調化(カラータイプ変更無し) myMagick.Threshold(new ImageMagick.Percentage(50.0));//50%→128
グレースケール画像を閾値で2値化時、
閾値より暗い色を全て黒(K100)にします。
//閾値より暗い色を全て黒(K100)にする(カラータイプ変更無し) myMagick.BlackThreshold(new ImageMagick.Percentage(50.0));//50%→128
グレースケール画像を閾値で2値化時、
閾値より明るい色を全て白(K0)にします。
//閾値より明るい色を全て白(K0)にする(カラータイプ変更無し) myMagick.WhiteThreshold(new ImageMagick.Percentage(50.0));//50%→128
ディザで2値化
「Magick.NET」ではグレースケール画像をディザで2値化する場合、
初期値として「Riemersmaディザ」が使われます。
//「Riemersmaディザ」で2値化(カラータイプ変更無し) myMagick.ColorType = ImageMagick.ColorType.Bilevel;
「Riemersmaディザ」を明示して2値化を行う場合は、クオンタイズを使います。
以下のようにします。
//「Riemersmaディザ」で2値化(カラータイプ変更無し) ImageMagick.QuantizeSettings qSetting = new ImageMagick.QuantizeSettings(); qSetting.ColorSpace = ImageMagick.ColorSpace.Gray; qSetting.DitherMethod = ImageMagick.DitherMethod.Riemersma; qSetting.Colors = 2; myMagick.Quantize(qSetting);
「誤差拡散ディザ」の「フロイドスタインバーグ」(よく使われるディザ処理です)
を明示して2値化を行う場合は、クオンタイズを使います。
以下のようにします。
//「誤差拡散ディザ」「フロイドスタインバーグ」で2値化(カラータイプ変更無し) ImageMagick.QuantizeSettings qSetting = new ImageMagick.QuantizeSettings(); qSetting.ColorSpace = ImageMagick.ColorSpace.Gray; qSetting.DitherMethod = ImageMagick.DitherMethod.FloydSteinberg; qSetting.Colors = 2; myMagick.Quantize(qSetting);
考察:
Photoshopの誤差拡散ディザはフロイドスタインバーグとは違う結果となる。
独自のアルゴリズムっぽい気がする。(Sierraっぽい?)
(参照→https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%82%B6)
「Magick.NET」のディザ処理は、
「Riemersmaディザ」も「誤差拡散ディザ」の「フロイドスタインバーグ」も、
Photoshopと比べて結果があまり良くない。
グレーの10%以下は飛ぶし、85%以上は潰れた表現になる。
自分用メモ:
「フロイドスタインバーグ」は「Magick.NET」に用意されている物より、
自作した物の方が結果が良かった。
「C# Magick.NET 自作ディザの作成」(非公開)
http://00studying.blogspot.jp/2017/07/c-magicknet.html?zx=a09787eceddc7dea
「無作為 (Random) ディザ」
ランダムにディザを掛ける為、毎回結果が変わります。
//「無作為 (Random) ディザ」で2値化(カラータイプ変更無し) myMagick.RandomThreshold(new ImageMagick.Percentage(0.0), new ImageMagick.Percentage(100.0));(グレースの5%以下や95%以上も、ちゃんとディザがかかるが、
細部の表現に弱い)
スクリーントーンで2値化
「Magick.NET」はスクリーントーンで2値化を行う際、
スクリーンの選択肢が少なく、角度指定も出来ないです。
かなりザックリとした物となります。
//「スクリーントーン」で2値化 myMagick.OrderedDither("h8x8a");引数の文字列には、標準で以下の設定が用意されています。
(threshold,checks,
o2x2,o3x3,o4x4,o8x8,
h3x4a,h6x6a,h8x8a,
h3x4o,h6x6o,h8x8o,h36x16o,
c5x5b,c5x5w,c6x6b,c6x6w,c7x7b,c7x7w)
「Magick.NET」の標準では、
「Photoshop」の「スクリーントーン」とは程遠い結果となります。
自分用メモ:
「Photoshop」の「スクリーントーン」に処理結果を近づける。
「C# Magick.NETで「Photoshop」の2値網化をエミュレート1」非公開
http://00studying.blogspot.jp/2017/07/c-magicknetphotoshop.html
「C# Magick.NETで「Photoshop」の2値網化をエミュレート2」非公開
http://00studying.blogspot.jp/2017/07/c-magicknetphotoshop_11.html
ローカルしきい値で2値化
指定したピクセル範囲内のピクセル濃度の平均を閾値として、
2値化処理を行います。
//「ローカル閾値法」で2値化 //4x4の周辺ピクセルの単純平均を取りそれを閾値として2値化する myMagick.AdaptiveThreshold(4, 4); myMagick.Negate();
その他
ImageMagickなら
「convert -list threshold」で所有ディザマップ(所持網点)の一覧表示
参考にしたサイト
2値化して、1bppの白黒画像を作成する
(C#での2値画像の作成)
https://dobon.net/vb/dotnet/graphics/1bpp.html
B/W Halftone Dither
https://www.imagemagick.org/discourse-server/viewtopic.php?t=17389
ディザ処理とハーフトーン処理の概要
http://caca.zoy.org/study/part2.html
誤差拡散の説明
http://caca.zoy.org/study/part3.html
ディザ
https://ja.wikipedia.org/wiki/%E3%83%87%E3%82%A3%E3%82%B6
ディザ「C#画像を色から白黒に変換する」
https://stackoverflow.com/questions/31148616/c-sharp-convert-an-image-from-color-to-a-black-and-white
ImageMagickでのディザを使った様々なテスト結果。
http://bisqwit.iki.fi/jutut/colorquant/
ローカルしきい値法の説明
http://ishidate.my.coocan.jp/vcpp10_g9/vcpp10_g9.htm
0 件のコメント:
コメントを投稿