public void Normalize() { FillGrayLevelHistogram(); int min = FindMinimum(); int max = FindMaximum(); if (min == -1 || max == -1) { throw new Exception("Somthing is wrong with the image!"); } int quantityOfIntervals = max - min; double intervalLength = (double)255 / quantityOfIntervals; double normolizedLevel = 0; for (int i = 0; i < 256; i++) { Histogram[i] = 0; } for (int i = min; i <= max; i++) { Histogram[i] = (int)normolizedLevel; normolizedLevel += intervalLength; Console.WriteLine(normolizedLevel); } for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { int value = Histogram[GrayLevelImage.GetPixel(i, j).R]; Color grayColor = Color.FromArgb(value, value, value); NormalizedImage.SetPixel(i, j, grayColor); } } }
void FillGrayLevelHistogram() { for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { Histogram[GrayLevelImage.GetPixel(i, j).R]++; } } }
public void Equalize() { const int k = 256; double[] h = new double[k]; // Построение гистограммы for (int i = 0; i < k; i++) { h[i] = 0; } for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { h[GrayLevelImage.GetPixel(i, j).R]++; } } int size = Width * Height; // Номмирование гистограммы for (int i = 0; i < k; i++) { h[i] = h[i] / size; } // Построение гистограммы с накоплением for (int i = 1; i < k; i++) { h[i] = h[i - 1] + h[i]; } //Равномерное распределение значений for (int i = 0; i < Width; i++) { for (int j = 0; j < Height; j++) { int value = (int)(h[GrayLevelImage.GetPixel(i, j).R] * (k - 1)); Color color = Color.FromArgb(value, value, value); EqualizedImage.SetPixel(i, j, color); } } }