public static Bitmap toContrast2(Bitmap _b) { Bitmap temp = copy(_b); XHistogram his = new XHistogram(_b); his.scaleHistogram(255); int[][] LUT; // look up table LUT = new int[3][]; for (int i = 0; i < LUT.Length; i++) // isi dengan 0 { LUT[i] = new int[256]; for (int j = 0; j < LUT[i].Length; j++) { LUT[i][j] = 0; } } int rmin = 255; int rmax = 0; int gmin = 255; int gmax = 0; int bmin = 255; int bmax = 0; for (int i = 0; i < his.data2[0].Length; i++) // menentukan r g b max & min dari histo incremental { rmin = (his.data2[0][i] <= rmin) ? his.data2[0][i] : rmin; rmax = (his.data2[0][i] >= rmax) ? his.data2[0][i] : rmax; gmin = (his.data2[1][i] <= gmin) ? his.data2[1][i] : gmin; gmax = (his.data2[1][i] >= gmax) ? his.data2[1][i] : gmax; bmin = (his.data2[2][i] <= bmin) ? his.data2[2][i] : bmin; bmax = (his.data2[2][i] >= bmax) ? his.data2[2][i] : bmax; } for (int j = 0; j < LUT[0].Length; j++) // bikin LUT { LUT[0][j] = 255 * (his.data2[0][j] - rmin) / (rmax - rmin); LUT[1][j] = 255 * (his.data2[1][j] - gmin) / (gmax - gmin); LUT[2][j] = 255 * (his.data2[2][j] - bmin) / (bmax - bmin); } for (int i = 0; i < _b.Width; i++) // Apply LUT ke gambar { for (int j = 0; j < _b.Height; j++) { Color ct = temp.GetPixel(i, j); int rt = LUT[0][ct.R]; int gt = LUT[1][ct.G]; int bt = LUT[2][ct.B]; temp.SetPixel(i, j, Color.FromArgb(rt, gt, bt)); } } return(temp); }
public static Bitmap toContrast2(Bitmap _b) { Bitmap temp = copy(_b); XHistogram his = new XHistogram(_b); his.scaleHistogram(255); int[][] LUT; // look up table LUT = new int[3][]; for (int i = 0; i < LUT.Length; i++) { // isi dengan 0 LUT[i] = new int[256]; for (int j = 0; j < LUT[i].Length; j++) { LUT[i][j] = 0; } } int rmin = 255; int rmax = 0; int gmin = 255; int gmax = 0; int bmin = 255; int bmax = 0; for (int i = 0; i < his.data2[0].Length; i++) { // menentukan r g b max & min dari histo incremental rmin = (his.data2[0][i] <= rmin) ? his.data2[0][i] : rmin; rmax = (his.data2[0][i] >= rmax) ? his.data2[0][i] : rmax; gmin = (his.data2[1][i] <= gmin) ? his.data2[1][i] : gmin; gmax = (his.data2[1][i] >= gmax) ? his.data2[1][i] : gmax; bmin = (his.data2[2][i] <= bmin) ? his.data2[2][i] : bmin; bmax = (his.data2[2][i] >= bmax) ? his.data2[2][i] : bmax; } for (int j = 0; j < LUT[0].Length; j++) { // bikin LUT LUT[0][j] = 255 * (his.data2[0][j] - rmin) / (rmax - rmin); LUT[1][j] = 255 * (his.data2[1][j] - gmin) / (gmax - gmin); LUT[2][j] = 255 * (his.data2[2][j] - bmin) / (bmax - bmin); } for (int i = 0; i < _b.Width; i++) { // Apply LUT ke gambar for (int j = 0; j < _b.Height; j++) { Color ct = temp.GetPixel(i, j); int rt = LUT[0][ct.R]; int gt = LUT[1][ct.G]; int bt = LUT[2][ct.B]; temp.SetPixel(i, j, Color.FromArgb(rt, gt, bt)); } } return temp; }