В этой инструкции, рассмотрим как построить в C # и как отобразить их, используя не более, чем стандартные WPF UIElement — если быть более точным.
Для вычисления значений гистограммы мы будем полагаться на библиотеки обработки изображений AForge.NET. Нам понадобятся библиотеки и ссылки AForge.dll , AForge.Imaging.dll и AForge.Math.dll, код гистограммы рассчитывается очень просто:
System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(imageFilePath); // Luminance ImageStatisticsHSL hslStatistics = new ImageStatisticsHSL(bmp); int[] luminanceValues = hslStatistics.Luminance.Values; // RGB ImageStatistics rgbStatistics = new ImageStatistics(bmp); int[] redValues = rgbStatistics.Red.Values; int[] greenValues = rgbStatistics.Green.Values; int[] blueValues = rgbStatistics.Blue.Values;
Гистограммы результатов расчета хранятся в одномерных целочисленных массивах которые в дальнейшем будут использованы в качестве основы для отображения гистограмм.
Гистограмма сглаживания, пригладить в простых терминах, состоит на удаление шипов без ущерба для общего смысла гистограммы. Лучше проиллюстрировать это на конкретном примере:
Есть несколько подходов для сглаживания гистограммы, но для наглядности я буду использовать простой алгоритм из ответов переполнения стека . Вот код C #:
private int[] SmoothHistogram(int[] originalValues)
{
int[] smoothedValues = new int[originalValues.Length];
double[] mask = new double[] { 0.25, 0.5, 0.25 };
for (int bin = 1; bin < originalValues.Length - 1; bin++)
{
double smoothedValue = 0;
for (int i = 0; i < mask.Length; i++)
{
smoothedValue += originalValues[bin - 1 + i] * mask[i];
}
smoothedValues[bin] = (int)smoothedValue;
}
return smoothedValues;
}
После компиляции и запуска, главное окно будет выглядеть следующим образом:
Ссылка для скачивания примера: Rusfolder.net
Ссылка для скачивания библиотек AForge: Rusfolder.net
0.00 (0%) 0 votes












