Порог цвета к изображению в C#

Пример Предоставляет гамма-коррекцию для изображения в C# использует метод ImageAttribute объекта SetGamma для гамма-коррекции изображения. В этом примере используется метод SetThreshold, чтобы применить порог цвета к изображению.

Метод SetThreshold принимает в качестве параметра a float между 0 и 1. Когда вы используете объект ImageAttributes для рисования пикселя, пиксельные цветовые компоненты (по шкале от 0 до 1) сравниваются с пороговым значением. Если компонент больше или равен пороговому значению, он устанавливается в 1. Если компонент меньше порогового значения, он установлен в 0.

Например, предположим, что цветовые компоненты пикселя в масштабе от 0 до 255: R = 128, G = 200 и B = 180. Преобразование этих компонентов в шкалу от 0 до 1 (где 0 & equiv; 0 и 255 & equiv; 1) дает значения компонент R = 0,502, G = 0,784 и B = 0,706.

Теперь предположим, что порог равен 0,75. Для этого пикселя красные и синие компоненты находятся ниже порога, поэтому они меняются на 0. Зеленая компонента находится выше порога, поэтому она установлена в 1. Результат: R = 0, G = 1, B = 0. Преобразование назад к нормальному шкале от 0 до 255, R = 0, G = 255, B = 0, зеленовато-зеленого цвета.

Следующий метод AdjustThreshold применяет порог к изображению.

// Выполните настройку порога на изображении.
private Bitmap AdjustThreshold(Image image, float threshold)
{
    // Создаем растровое изображение результата.
    Bitmap bm = new Bitmap(image.Width, image.Height);

    // Создаем объект ImageAttributes и устанавливаем порог.
    ImageAttributes attributes = new ImageAttributes();
    attributes.SetThreshold(threshold);

    // Нарисуем изображение на новом растровом изображении
    // при применении новой ColorMatrix.
    Point[] points =
    {
        new Point(0, 0),
        new Point(image.Width, 0),
        new Point(0, image.Height),
    };
    Rectangle rect =
        new Rectangle(0, 0, image.Width, image.Height);
    using (Graphics gr = Graphics.FromImage(bm))
    {
        gr.DrawImage(image, points, rect,
            GraphicsUnit.Pixel, attributes);
    }

    // Вернуть результат.
    return bm;
}
 // Выполните настройку порога на изображении.
private Bitmap AdjustThreshold (изображение изображения, порог поплавка)
{
     // Создаем растровое изображение результата.
     Растровое изображение bm = новое растровое изображение (image.Width, image.Height);

     // Создаем объект ImageAttributes и устанавливаем порог.
     Атрибуты ImageAttributes = new ImageAttributes ();
     attributes.SetThreshold (порог);

     // Нарисуем изображение на новом растровом изображении
     // при применении новой ColorMatrix.
     Точка [] points =
     {
         новая точка (0, 0),
         новая точка (image.Width, 0),
         new Point (0, image.Height),
     };
     Прямоугольник rect =
         новый прямоугольник (0, 0, image.Width, image.Height);
     используя (Graphics gr = Graphics.FromImage (bm))
     {
         gr.DrawImage (изображение, точки, прямоугольник,
             GraphicsUnit.Pixel, атрибуты);
     }

     // Вернуть результат.
     return bm;
}  

...

Конечным результатом является изображение, содержащее только первичный и вторичный цвета, плюс черный и белый.

Источник: http://csharphelper.com/blog/2016/12/apply-a-color-threshold-to-an-image-in-c/

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (Пока оценок нет)
Adblock
detector