【问题标题】:Image filter kernel to expand 16-235 limited color range图像滤镜内核扩展16-235有限颜色范围
【发布时间】:2017-08-27 04:18:24
【问题描述】:

是否可以编写一个 5x5 的内核来将有限的颜色范围处理成全范围?

这是我的示例双色调内核,我不知道要使用什么值以及在哪里实现这种颜色扩展:

灰度

{ 0.3,  0.3,  0.3,  0.0,  0.0 }
{ 0.6,  0.6,  0.6,  0.0,  0.0 }
{ 0.1,  0.1,  0.1,  0.0,  0.0 }
{ 0.0,  0.0,  0.0,  1.0,  0.0 }
{ 0.0,  0.0,  0.0,  0.0,  1.0 }

我想要 RGB 颜色扩展 RGB 16-235 => 0-255

但是我需要内核矩阵,因为我没有处理图像,而是将矩阵传递给 Windows API 函数(未记录:SetMagnificationDesktopColorEffect)。

我无法对像素进行简单的减法/除法/乘法运算。我没有。

【问题讨论】:

  • 我没有办法测试,但我认为你应该把16 或者-16,作为偏移量放在第 4 行的前 3 个元素中,以及 255/ (235-16) 中的前 3 个对角元素作为乘数。 graficaobscura.com/matrix/index.htmldocs.rainmeter.net/tips/colormatrix-guide
  • 255/(235-16) 而不是前三个对角线 1,使图像变亮,但是第四行中的 -16/16(或任何与 1.0 相差很大的任何东西)会完全破坏图像,使其几乎是白色或黑色。

标签: image image-processing filtering rgb


【解决方案1】:

您基本上可以通过从图像中减去 16 然后将其除以 219 来在没有内核的情况下执行此操作。然后您将归一化为 1 个图像,您必须将其乘以 255 以获得 255 强度范围表示。

【讨论】:

  • 我很清楚这一点,但是我的应用程序中没有完成处理。这个矩阵被传递给一个未记录的 windows api 函数,该函数将效果应用于桌面管理器。它在 user32.dll 中称为 SetMagnificationDesktopColorEffect。我需要矩阵传递给它。
  • 已在问题中澄清。对不起。但是 +1 的努力 - 你实际上回答了定义不够明确的问题:)
  • 这是不可能的,因为核函数是空间过滤方法,它们不直接处理强度,而是通过空间坐标强度相互依赖。可以将内核的所有条目设置为 0,除了中间值放在那里 255/235,它将上限增加到 255,但下限不是这种情况,因为 16 函数的减法不跨越内核。
猜你喜欢
  • 2016-10-26
  • 2018-06-02
  • 1970-01-01
  • 2021-04-24
  • 1970-01-01
  • 1970-01-01
  • 2019-05-12
  • 1970-01-01
  • 2014-01-26
相关资源
最近更新 更多