Magick.NET оценивает красный канал

Я использую Magick.NET для цветокоррекции фотографий. Я настраиваю красный, зеленый и синий каналы, добавляя или вычитая процент для каждого с помощью метода Evaluate. Значение здесь представляет собой +/- количество изменений, применяемых к указанному каналу.

        image.Evaluate(channel, EvaluateOperator.Add, new Percentage(value));

Добавление цвета в канал — это нормально, но удаление цвета из канала изменит цветовой баланс белого в изображении (удалив красный, изображение станет зелено-синим). Мне нужно иметь возможность применить настройку к каждому каналу без изменения белого.

Я пробовал применять Level после Evaluate, а также ContrastStretch, думая, что могу указать черную/белую точку ниже/выше которой настройка игнорируется.

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

Спасибо


person David Brunning    schedule 16.05.2018    source источник


Ответы (1)


тлдр; создайте белую маску и примените ее к изображению с помощью .WriteMask(), чтобы любые белые области исключались из вызова .Evaluate(..).

        var newImage = magickImage.Clone();
        var stats = newImage.Statistics().GetChannel(PixelChannel.Composite);
        var mean = stats.Mean / (stats.Maximum - stats.Minimum);
        var stDev = stats.StandardDeviation / (stats.Maximum - stats.Minimum);
        var whiteThreshold = new Percentage(100 - (mean + 0.5 * stDev));
        var blackThreshold = new Percentage(mean - 0.5 * stDev);

        newImage.ColorFuzz = new Percentage(3);
        newImage.WhiteThreshold(whiteThreshold);
        newImage.BlackThreshold(blackThreshold);

        newImage.Opaque(MagickColors.Black, MagickColors.Green);
        newImage.Opaque(MagickColors.White, MagickColors.Black);
        newImage.InverseOpaque(MagickColors.Black, MagickColors.White);

        magickImage.WriteMask = newImage;

Полезные сайты включали https://www.imagemagick.org/script/index.php. и http://www.fmwconcepts.com/imagemagick/index.php. Спасибо Фреду за его сценарий «цветовой баланс», который является действительно хорошим примером того, как это сделать с помощью командной строки ImageMagick.

person David Brunning    schedule 07.06.2018