2010-02-10 70 views
7

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

通常我们在电脑屏幕上生成图像并在那里使用它们,所以它一切正常。但是当我们使用antialias时,称为gamma —的非线性—意味着我们不能仅将0.5的alpha值添加到50%覆盖像素,并期望它看起来正确。 0.5的α值只有0.5^2.2 = 22%,明亮度等于1.0的alpha值,典型的gamma值为2.2。

是否有任何广泛建立的抗锯齿伽马补偿最佳实践?你有每天使用的宠物方法吗?有没有人用不同的技术看到任何有关图形输出质量的结果和人类感知的研究?我曾经想过做标准的X ^(1/2.2)补偿,但是这在计算上是相当激烈的。不过,也许我可以通过一个256条目查找表来加快速度。

回答

1

查找表经常用于这样的工作。他们小而快。

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

原因:对于典型的字节值R,G,B通道,每个像素的每个通道中有256个唯一值。这几乎足以让人眼看起来很好(我希望“字节”已被定义为九位!)除了琐碎的值反转之外,任何类型的数学都会针对其中一些值进行多对一映射。对于R,G或B的每个像素,输出将不会有256个值可供选择,但会少得多。这可能导致轮廓,锯齿,色彩噪音和其他不良情况。抛开精度问题,如果需要任何一种体面的质量,所有的堆肥,混合,混合,色彩校正,假镜头闪光添加,色度键控和其他任何应该在线性RGB空间中完成,其中值R,G和B与物理光强度成比例。图像数学模拟物理光数学。但是,如果最终速度至关重要,那么有办法作弊。

+0

九位字节?你喜欢八度吗? :-) – 2010-03-31 23:27:47

2

Jim Blinns - “肮脏像素”一书通过使用16位数学加查找表来精确地回溯和转发线性色彩空间,概述了一种快速且良好的合成计算。这个人在美国国家航空航天局的可视化工作,他知道他的东西。

2

我想回答,但主要是针对现在参考,实际的问题:

首先,有建议从可以适用于编程ITU(http://www.itu.int/rec/T-REC-H.272-200701-I/en)(但你必须知道你的东东)。

在吉姆布林的“符号,表示法,符号”中,第9章有一个非常详细的数学和感知错误分析,尽管他只涉及合成(许多其他图形任务也受到影响)。

他建立的符号也可以用来派生出一种处理伽玛的方法,或者检查给定的方法是否确实是正确的。非常方便,我的宠物方法(主要是因为我独立发现它,但后来发现他的书)。

0

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

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

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

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