如何逆转双像素交替抖动?求梅花形排列颜色感知计算公式
两种颜色梅花形排列的感知颜色计算方法及原理
当#E00000(红色)和#0000E0(蓝色)以梅花形交替排列时,人眼感知到的颜色和RGB数学平均值#700070差异明显,实际感知色为#980098。这背后的核心是人眼对亮度的非线性感知特性,而非简单的线性平均。
核心原理:伽马校正与人眼感知
显示器输出的RGB值是经过伽马编码的(主流设备伽马值约为2.2),而人眼对亮度的感知是线性光的响应。直接对伽马编码的RGB值做平均,得到的结果不符合人眼实际看到的效果,必须先转换到线性光空间计算平均,再转换回伽马编码的RGB空间。
具体计算步骤(以#E00000和#0000E0为例)
将十六进制RGB转为0-1范围的伽马编码值
- #E00000的R分量:
224/255 ≈ 0.8784(0xE0对应十进制224) - #0000E0的B分量:
224/255 ≈ 0.8784
(两个颜色的G分量均为0,无需计算)
- #E00000的R分量:
伽马编码值转线性光值
线性光值 = 伽马编码值^γ(γ取2.2):- 红色R的线性光值:
0.8784^2.2 ≈ 0.732 - 蓝色B的线性光值:
0.8784^2.2 ≈ 0.732
- 红色R的线性光值:
计算线性光空间的平均值
梅花形排列下两种颜色各占50%,因此:- 感知平均的R线性值:
(0.732 + 0)/2 = 0.366(蓝色R分量为0) - 感知平均的B线性值:
(0 + 0.732)/2 = 0.366(红色B分量为0)
- 感知平均的R线性值:
线性光值转回伽马编码RGB
伽马编码值 = 线性光值^(1/γ):- R和B的伽马编码值:
0.366^(1/2.2) ≈ 0.596 - 转0-255整数:
0.596×255 ≈ 152,对应十六进制0x98
最终得到感知平均色为#980098,和GIMP缩放后的结果完全一致。
- R和B的伽马编码值:
关于GIMP的"linear"缩放算法
这个算法的命名是准确的:它先将图像的RGB值转换为线性光空间,在这个空间内做线性平均(缩放时的像素融合本质是颜色平均),最后再转换回伽马编码的RGB空间,因此结果符合人眼的感知效果,并非"名不副实"。
内容的提问来源于stack exchange,提问作者Morgana
相关产品推荐
相关产品推荐

