20 сент. 2012 г.

Создание гистограммы изображения с помощью C # и WPF

      В этой инструкции, рассмотрим как построить RGB гистограммы в 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;
}
ПРИМЕЧАНИЕ: С последней версией AForge (2.2.4 на момент написания этой статьи) разница между сглаженной и не сглаженной гистограммы не так заметно, как в приведенном выше примере. Алгоритм сглаживания включен для использования с более старыми версиями библиотеки или с различными библиотеками, которые не обеспечивают возможность выравнивания.
После компиляции и запуска, главное окно будет выглядеть следующим образом:

Ссылка для скачивания примера: Rusfolder.net


Ссылка для скачивания библиотек AForge: Rusfolder.net


Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!