7

计算机屏幕上像素的亮度通常与像素的数字 RGB 三元组值不是线性相关的。早期 CRT 的非线性响应需要补偿非线性编码,我们今天继续使用这种编码。

通常我们在计算机屏幕上生成图像并在那里消费它们,所以一切正常。但是,当我们进行抗锯齿处理时,称为 gamma 的非线性意味着我们不能只将 0.5 的 alpha 值添加到 50% 覆盖的像素并期望它看起来正确。0.5 的 alpha 值只有 0.5^2.2=22% 的亮度与 1.0 的 alpha 和 2.2 的典型 gamma 一样亮。

抗锯齿伽玛补偿是否有任何广泛确立的最佳实践?你有日常使用的宠物方法吗?有没有人看到任何关于使用不同技术对图形输出质量的结果和人类感知的研究?

我曾想过做标准的 X^(1/2.2) 补偿,但这在计算上是相当密集的。不过,也许我可以使用包含 256 个条目的查找表来加快速度。

4

4 回答 4

2

查找表经常用于此类工作。它们又小又快。

但无论是查找还是一些公式,如果最终结果是图像文件,并且格式允许,最好在文件中保存颜色配置文件或至少 Gamma 值以供以后查看,而不是尝试自己调整 RGB 值.

原因:对于典型的字节值 R、G、B 通道,每个通道的每个像素都有 256 个唯一值。这几乎足以让人眼看起来很好(我希望“字节”被定义为九位!)除了平凡的值反转之外,任何类型的数学都会映射其中一些值的多对一。对于 R、G 或 B 的每个像素,输出不会有 256 个值可供选择,但要少得多。这可能导致轮廓、锯齿、颜色噪声和其他不良情况。

除了精度问题,如果需要任何一种体面的质量,所有的堆肥、混合、混合、颜色校正、假镜头光晕添加、色度键控等都应该在线性 RGB 空间中完成,其中 R、G 和B 与物理光强度成正比。图像数学模拟物理光数学。但是,在极限速度至关重要的地方,有办法作弊。

于 2010-02-12T04:13:54.973 回答
2

Jim Blinns - “Dirty Pixels”一书通过使用 16 位数学和查找表来准确地返回和前进到线性色彩空间,概述了一种快速且良好的合成计算。这家伙从事 NASA 的可视化工作,他知道自己的东西。

于 2010-03-31T23:25:44.633 回答
2

我试图回答实际问题,尽管现在主要是为了参考:

首先,国际电联的建议(http://www.itu.int/rec/T-REC-H.272-200701-I/en)可以应用于编程(但你必须知道你的东西) .

在 Jim Blinn 的“Notation, Notation, Notation”第 9 章中,有非常详细的数学和感知错误分析,尽管他只涉及合成(许多其他图形任务也受到影响)。

他建立的符号也可以用来推导出处理伽马的方法,或者检查给定的处理方法是否真的正确。非常方便,我的宠物方法(主要是我独立发现但后来发现他的书)。

于 2014-02-05T15:54:12.213 回答
0

生成图像时,通常在线性颜色空间(如线性 RGB 或 CIE 颜色空间之一)中工作,然后在最后转换为非线性 RGB 空间。这种转换可以在硬件中或通过查找表甚至通过复杂的数学来加速。(请参阅其他答案的参考资料。)

在执行 alpha 混合(例如,将此图标渲染到此背景上)时,通常会忽略这种精度以支持速度。通过将 alpha 作为参数进行 lerping,直接在非线性 RGB 空间中计算结果。这不是“正确的”,但在大多数情况下已经足够了。特别是对于桌面上的图标之类的东西。

如果您尝试进行更正确的混合,则将其视为原始渲染。在线性空间中工作(可能需要初始转换),然后在最后转换为您的非线性显示空间。

现在很多图形都使用 sRGB 作为非线性显示色彩空间。如果我没记错的话,sRGB 与 2.2 的 gamma 非常相似,但对低端的值进行了调整。

于 2014-02-05T19:09:39.797 回答