【问题标题】:A better Greyscale algorithm更好的灰度算法
【发布时间】:2011-02-06 12:08:59
【问题描述】:

我正在尝试为每一行创建一个具有恒定灰度值的光谱图像。我编写了一些非常慢的代码,它基本上在给定色调下尝试了 1000 种黑白之间的不同变化,它找到了灰度值最接近目标值的那个,产生了以下图像:

在我的笔记本电脑屏幕 (HP) 上,蓝色峰值附近有一个非常明显的“凹陷”,图像底部附近的蓝色像素看起来比相邻的紫色和青色像素要亮得多。在我的第二个屏幕上(Acer,它的彩色显示效果要好得多),倾角较小,但仍然存在。

我使用以下函数来计算颜色的灰度近似值:

Math.Abs(targetGrey - (0.2989 * R + 0.5870 * G + 0.1140 * B))

当我使用 Paint.NET 将图像转换为灰度时,我得到了一个完美的黑白渐变,因此这部分代码至少可以工作。

所以,问题:这纯粹是我的屏幕显示质量的人工制品吗?或者是否可以对上述灰度算法进行改进以提供视觉上更一致的结果?


编辑:问题似乎主要是显示器校准。不,我再说一遍,代码有问题。

【问题讨论】:

  • 超级聪明——在我看来也不是线性的,但我会将其归结为非线性生物学。
  • 如果没有经过色彩校准的显示器,您无法判断生成的图像是否正常。我的显示器几乎看不到任何下降。
  • @Codo,谢谢。我担心如果没有颜色校准设备,根本就没有解决方案。我会看看我是否可以校准我的 Acer 显示器,如果问题消失,我知道不是我的问题 :)

标签: graphics colors


【解决方案1】:

我想知道这是否更多地与我们的眼睛解读颜色的方式有关,而不是屏幕伪影。

也就是说...我使用的是非常高质量的屏幕(Dell Ultrasharp,IPS),它具有令人难以置信的色彩再现,我不确定您所说的“浸入”蓝色峰值是什么意思。所以要么我只是没有注意到它,要么我的屏幕没有显示相同的图片并且它的颜色更准确。

【讨论】:

  • 显然我使用的灰度函数已经基于人类的色觉系数。但不知何故,我怀疑这么简单的功能能否真正以足够准确的方式复制人类的色觉,以达到我的目的。
  • 我校准了我的显示器,现在光谱图像看起来好多了。仍然有一些小的违规行为,但我认为通过专业的校准方法,这些问题都会消失。
【解决方案2】:

考虑到您使用的灰度转换,输出看起来是正确的(我相信这是 sRGB 颜色空间的标准转换)。

但是 - 颜色模型有很多折衷方案,其中之一是您可以获得的结果在视觉上并不完全符合您的要求。在您的情况下,蓝色权重非常低的事实意味着需要更多的蓝色才能获得任何给定的灰度值,因此蓝色似乎开始较低,至少在人眼如何感知它方面。

如果您的目标是获得视觉上吸引人的光谱图像,那么我建议您更改函数以使 R、G、B 权重更相等,然后看看您是否喜欢得到的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-08
    • 1970-01-01
    • 2010-12-27
    • 2012-02-12
    相关资源
    最近更新 更多