Magick.NET评估红色频道

时间:2018-05-16 07:49:27

标签: c# imagemagick magick.net

我正在使用Magick.NET对照片应用色彩校正。我通过使用Evaluate方法向每个通道添加或减去一个百分比来调整红色,绿色和蓝色通道。此处的值是应用于指定通道的+/-更改量。

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

为通道添加颜色很好,但从通道中删除颜色会改变图像中白色的颜色平衡(删除红色,图像变为绿色/蓝色)。我需要能够在不改变白色的情况下对每个通道应用调整。

我尝试过在评估后使用Level,还有ContrastStretch,认为我可以指定低于/高于该值的黑/白点,忽略调整。

ColorMatrix看起来很有前景,但是给出了非常奇怪的结果而且Modulate会进行颜色旋转,这是不对的。

由于

1 个答案:

答案 0 :(得分:0)

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.phphttp://www.fmwconcepts.com/imagemagick/index.php的有用网站。感谢弗雷德的色彩平衡"脚本,这是如何使用ImageMagick命令行执行此操作的一个非常好的示例。