Magick.NET 评价红色通道
Magick.NET Evaluate Red Channel
我正在使用 Magick.NET 对照片进行颜色校正。我通过使用 Evaluate 方法为每个通道增加或减少一个百分比来调整红色、绿色和蓝色通道。此处的值是应用于指定通道的 +/- 更改量。
image.Evaluate(channel, EvaluateOperator.Add, new Percentage(value));
向通道添加颜色没问题,但是从通道中移除颜色会改变图像中白色的色彩平衡(移除红色,图像变为 green/blue)。我需要能够在不改变白色的情况下将调整应用到每个通道。
我试过在 Evaluate 之后应用 Level 和 ContrastStretch,我认为我可以指定一个 black/white 点 below/above 来忽略调整。
ColorMatrix 看起来很有前途,但给出的结果真的很奇怪,而 Modulate 会进行颜色旋转,这是不对的。
谢谢
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 and http://www.fmwconcepts.com/imagemagick/index.php。感谢 Fred 的 "color balance" 脚本,这是一个很好的例子,说明如何使用 ImageMagick 命令行执行此操作。
我正在使用 Magick.NET 对照片进行颜色校正。我通过使用 Evaluate 方法为每个通道增加或减少一个百分比来调整红色、绿色和蓝色通道。此处的值是应用于指定通道的 +/- 更改量。
image.Evaluate(channel, EvaluateOperator.Add, new Percentage(value));
向通道添加颜色没问题,但是从通道中移除颜色会改变图像中白色的色彩平衡(移除红色,图像变为 green/blue)。我需要能够在不改变白色的情况下将调整应用到每个通道。
我试过在 Evaluate 之后应用 Level 和 ContrastStretch,我认为我可以指定一个 black/white 点 below/above 来忽略调整。
ColorMatrix 看起来很有前途,但给出的结果真的很奇怪,而 Modulate 会进行颜色旋转,这是不对的。
谢谢
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 and http://www.fmwconcepts.com/imagemagick/index.php。感谢 Fred 的 "color balance" 脚本,这是一个很好的例子,说明如何使用 ImageMagick 命令行执行此操作。