static void Main(string[] args) { // 5.画像CまたはDに対し、ソラリゼーション(入力[0-255],出 力[0-254]の濃度値の間で振幅127,周期3の余弦波 曲線)を行い、ヒストグ ラム分布の変化を確認せよ。 // ソラリゼーション用トーンカーブ作成 var curve = new ToneCurve(); for (var i = 0; i < 256; ++i) { curve[i] = (int)(127 * (Math.Cos(i * 3 * 2 * Math.PI / 256) + 1)); } foreach (var name in new List <string> { "C", "D" }) { // 画像読み込み var src = new GlayImage(name + ".pgm"); // ヒストグラム画像を生成して出力 new Histgram(src).GetHistgramImage().Write(name + "_hist.pgm"); // ソラリゼーション適用 var dest = src.Apply(curve); // 画像を出力 dest.Write(name + "_solar.pgm"); // ヒストグラム画像を生成して出力 new Histgram(dest).GetHistgramImage().Write(name + "_solar_hist.pgm"); } }
static GlayImage GetHistgramImage(GlayImage src) { var hist = new int[256]; // 0 で初期化 var maxIndex = 0; var maxValue = 0; for (var y = 0; y < src.Size.Height; ++y) { for (var x = 0; x < src.Size.Width; ++x) { var v = src[x, y]; ++hist[v]; if (hist[v] > maxValue) { maxIndex = v; maxValue = hist[v]; } } } var res = new GlayImage(new Size(256, 256)); for (var x = 0; x < 256; ++x) { for (var y = 0; y < 256; ++y) { res[x, y] = (y * maxValue / 255 > maxValue - hist[x]) ? 255 : 0; } } return(res); }
static void Main(string[] args) { // 3.1,2におけるそれぞれのコントラストを求めよ。 foreach (var name in new string[] { "A", "B", "A_rev", "B_rev" }) { var img = new GlayImage(name + ".pgm"); var minValue = 255; var maxValue = 0; for (var y = 0; y < img.Size.Height; ++y) { for (var x = 0; x < img.Size.Width; ++x) { if (img[x, y] > maxValue) { maxValue = img[x, y]; } if (img[x, y] < minValue) { minValue = img[x, y]; } } } Console.WriteLine("{0} のコントラスト : {1}", name, maxValue - minValue); } }
static void Main(string[] args) { var img = new GlayImage(); img.Read("A.pgm"); img.Write("A_p2.pgm"); img.Write("A_clone.pgm"); var hist = new Histgram(img); hist.GetHistgramImage().Write("A_hist.pgm"); }
static void Main(string[] args) { // 1.画像A,Bのヒストグラム分布を求めよ(C言語による画像処理論 参照)。 foreach (var name in new string[] { "A", "B" }) { var img = new GlayImage(name + ".pgm"); var imgHist = GetHistgramImage(img); imgHist.Write(name + "_hist.pgm"); } }
static void Do1() { // 画像読み込み var src = new GlayImage("A.pgm"); // 階調の最小値と最大値を調べる var min = 255; var max = 0; for (var y = 0; y < src.Size.Height; ++y) { for (var x = 0; x < src.Size.Width; ++x) { if (src[x, y] < min) { min = src[x, y]; } if (src[x, y] > max) { max = src[x, y]; } } } // トーンカーブ作成 var curve = new ToneCurve(); for (var i = 0; i < 256; ++i) { if (i < min) { curve[i] = 0; } else if (i > max) { curve[i] = 255; } else { curve[i] = (i - min) * (200 - 30) / (max - min) + 30; } } // 画像を変換 var dest = src.Apply(curve); // 出力 dest.Write("A_curve.pgm"); }
static void Main(string[] args) { // 2.画像 A,B の反転処理を行い、ヒストグラム分布の変化を確認せよ。 foreach (var name in new string[] { "A", "B" }) { var img = new GlayImage(name + ".pgm"); // 階調を反転 for (var y = 0; y < img.Size.Height; ++y) { for (var x = 0; x < img.Size.Width; ++x) { img[x, y] = 255 - img[x, y]; } } img.Write(name + "_rev.pgm"); var imgHist = GetHistgramImage(img); imgHist.Write(name + "_rev_hist.pgm"); } }
static void Main(string[] args) { // 6.画像CとDのαブレンディング(横方向)を行え。 // 画像読み込み var img1 = new GlayImage("C.pgm"); var img2 = new GlayImage("D.pgm"); Debug.Assert(img1.Size == img2.Size); // 左が C の画像から始まり、右に進むに連れて徐々に D の画像になるようなアルファブレンド画像を作成 for (var x = 0; x < img1.Size.Width; ++x) { var alpha = (double)x / (img1.Size.Width - 1); for (var y = 0; y < img1.Size.Height; ++y) { img1[x, y] = (int)(img2[x, y] * alpha + img1[x, y] * (1 - alpha)); } } // 画像出力 img1.Write("C_D_alpha.pgm"); }
static void Do2() { // 画像読み込み var src = new GlayImage("A.pgm"); foreach (var item in new List <Tuple <string, double> > { Tuple.Create("2_0", 2.0), Tuple.Create("0_5", 0.5) }) { var name = item.Item1; var gamma = item.Item2; // ガンマ補正のトーンカーブ作成 var curve = new ToneCurve(); for (var i = 0; i < 256; ++i) { var val = (int)(255 * Math.Pow(curve[i] / 255.0, 1 / gamma)); if (val >= 256) { val = 255; } curve[i] = val; } // 画像を変換 var dest = src.Apply(curve); // 画像を出力 dest.Write("A_gamma_" + name + ".pgm"); // ヒストグラム画像を生成 var hist = GetHistgramImage(dest); // ヒストグラム画像を出力 hist.Write("A_gamma_" + name + "_hist.pgm"); } }