Magick.NET Evaluate Red Channel - PullRequest
0 голосов
/ 16 мая 2018

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

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

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

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

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

Спасибо

1 Ответ

0 голосов
/ 07 июня 2018

tldr; создайте белую маску и примените ее к изображению, используя .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.

...