【问题标题】:Removing R from RGB Color从 RGB 颜色中移除 R
【发布时间】:2016-10-29 23:00:26
【问题描述】:

有没有办法去除 RGB 像素的 红色 通道,使生成的图片中的红色变为 白色强>不黑?我需要区分红色和蓝色/黑色,但在不同的光线下 RGB 值会有所不同。如果我只是删除 R 通道,较深的红色会变成黑色,我想要相反的结果。

谢谢!

【问题讨论】:

  • 将 R 设为 255 / 1 而不是 0?
  • 很遗憾,没有。将 R 设置为 255 会使一切看起来都像红色,即使是蓝/黑像素也很难与红色区分开来。
  • 纯红色、黄色和洋红色的预期输出是多少?还有橙色和紫色?
  • 如果你只是想区分红色和蓝色/黑色,为什么不看看 R 通道与蓝色通道的相对值呢?可能使用类似 R/BR-B 的方法?
  • 我需要区分蓝色(阴影)/黑色(阴影)和红色(阴影)/白色,所以如果有办法放大蓝色和黑色阴影,那将是完美的解决方案反之亦然,以减少蓝色和黑色。

标签: image-processing colors rgb


【解决方案1】:

如果我理解正确的话-

需要将红色通道值归一化,然后作为混合值使用:

mix = R / 255

然后使用混合因子将白色与正常颜色减去红色通道混合:

     Original-red    White
R' = 0             + 255 * mix
G' = G * (1 - mix) + 255 * mix
B' = B * (1 - mix) + 255 * mix

请注意,它会杀死黄色和洋红色,而这些当然会使用红色通道,而且越红越混入白色。

您应该能够使用 CMYK 颜色模型或两者的组合来解决此问题,这样您就可以分离出所有主要组件。然后用 f.ex 覆盖混合。来自 CMYK 的黄色/洋红色分量。

混合过程应该和描述的一样。

概念演示

var ctx = c.getContext("2d");
var img = new Image;
img.onload = function() {
  c.width = img.width;
  c.height = img.height;
  ctx.drawImage(this, 0, 0);

  var idata = ctx.getImageData(0,0,c.width,c.height),
      data = idata.data, len = data.length, i, mix;
 
  /* mix = R / 255
     R = 0             + 255 * mix
     G = G * (1 - mix) + 255 * mix
     B = B * (1 - mix) + 255 * mix
  */
  for(i = 0; i < len; i+= 4) {
    mix = data[i] / 255;                           // mix using red
    data[i  ] = 255 * mix;                         // red channel
    data[i+1] = data[i+1] * (1 - mix) + 255 * mix; // green channel
    data[i+2] = data[i+2] * (1 - mix) + 255 * mix; // blue channel
  }
  ctx.putImageData(idata,0,0);
};
img.crossOrigin = "";
img.src = "//i.imgur.com/ptOPQZx.png";
document.body.appendChild(img)
&lt;h4&gt;Red removed + to white&lt;/h4&gt;&lt;canvas id=c&gt;&lt;/canvas&gt;&lt;h4&gt;Original:&lt;/h4&gt;

【讨论】:

  • 哇,效果太棒了,我尝试进行其他标准化,但从您的示例图像来看,这是我能得到的最好的!这正是我所需要的,保持蓝色/黑色并摆脱红色。非常感谢! @K3N
  • @ZdravkoDonev 没问题!我更新了之前的评论并将其移到了答案中。
猜你喜欢
  • 1970-01-01
  • 2022-12-18
  • 1970-01-01
  • 2017-08-20
  • 1970-01-01
  • 2021-02-25
  • 2017-05-03
  • 1970-01-01
  • 2018-12-23
相关资源
最近更新 更多