You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何逆转双像素交替抖动?求梅花形排列颜色感知计算公式

两种颜色梅花形排列的感知颜色计算方法及原理

当#E00000(红色)和#0000E0(蓝色)以梅花形交替排列时,人眼感知到的颜色和RGB数学平均值#700070差异明显,实际感知色为#980098。这背后的核心是人眼对亮度的非线性感知特性,而非简单的线性平均。

核心原理:伽马校正与人眼感知

显示器输出的RGB值是经过伽马编码的(主流设备伽马值约为2.2),而人眼对亮度的感知是线性光的响应。直接对伽马编码的RGB值做平均,得到的结果不符合人眼实际看到的效果,必须先转换到线性光空间计算平均,再转换回伽马编码的RGB空间。

具体计算步骤(以#E00000和#0000E0为例)

  1. 将十六进制RGB转为0-1范围的伽马编码值

    • #E00000的R分量:224/255 ≈ 0.8784(0xE0对应十进制224)
    • #0000E0的B分量:224/255 ≈ 0.8784
      (两个颜色的G分量均为0,无需计算)
  2. 伽马编码值转线性光值
    线性光值 = 伽马编码值^γ(γ取2.2):

    • 红色R的线性光值:0.8784^2.2 ≈ 0.732
    • 蓝色B的线性光值:0.8784^2.2 ≈ 0.732
  3. 计算线性光空间的平均值
    梅花形排列下两种颜色各占50%,因此:

    • 感知平均的R线性值:(0.732 + 0)/2 = 0.366(蓝色R分量为0)
    • 感知平均的B线性值:(0 + 0.732)/2 = 0.366(红色B分量为0)
  4. 线性光值转回伽马编码RGB
    伽马编码值 = 线性光值^(1/γ):

    • R和B的伽马编码值:0.366^(1/2.2) ≈ 0.596
    • 转0-255整数:0.596×255 ≈ 152,对应十六进制0x98

    最终得到感知平均色为#980098,和GIMP缩放后的结果完全一致。

关于GIMP的"linear"缩放算法

这个算法的命名是准确的:它先将图像的RGB值转换为线性光空间,在这个空间内做线性平均(缩放时的像素融合本质是颜色平均),最后再转换回伽马编码的RGB空间,因此结果符合人眼的感知效果,并非"名不副实"。

内容的提问来源于stack exchange,提问作者Morgana

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 18:50:34