【问题标题】:Magick.NET Evaluate Red ChannelMagick.NET 评估红色通道
【发布时间】:2018-10-26 04:04:53
【问题描述】:

我正在使用 Magick.NET 对照片进行颜色校正。我使用 Evaluate 方法通过添加或减去每个百分比来调整红色、绿色和蓝色通道。这里的值是应用于指定通道的 +/- 变化量。

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

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

我尝试在 Evaluate 之后应用 Level,以及 ContrastStretch,认为我可以指定一个黑/白点下方/上方的调整被忽略。

ColorMatrix 看起来很有希望,但结果却很奇怪,而 Modulate 会进行颜色旋转,这是不对的。

谢谢

【问题讨论】:

    标签: c# imagemagick magick.net


    【解决方案1】:

    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。感谢 Fred 的“色彩平衡”脚本,这是一个非常好的示例,说明如何使用 ImageMagick 命令行进行此操作。

    【讨论】:

      猜你喜欢
      • 2021-08-07
      • 2021-07-04
      • 2022-10-12
      • 1970-01-01
      • 2017-03-25
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多