Math RGB标准2.2伽马校正中的所有数字来自哪里?

Math RGB标准2.2伽马校正中的所有数字来自哪里?,math,colors,formula,gamma,Math,Colors,Formula,Gamma,以下是标准fwd伽马2.22(1/0.45)校正公式: for R,G,B < 0.018 R´ = 4.5 * R G´ = 4.5 * G B´ = 4.5 * B for R,G,B ≥ 0.018 R´ = 1.099 * R^0.45 - 0.099 G´ = 1.099 * G^0.45 - 0.099 B´ = 1.099 * B^0.45 - 0.099 R、G、Bg(x)的数字{a,b,c,x0}来解决,比如: g(x)=a*x^.45+b in[x0,1] g(x)

以下是标准fwd伽马2.22(1/0.45)校正公式:

for R,G,B < 0.018
R´ = 4.5 * R
G´ = 4.5 * G
B´ = 4.5 * B
for R,G,B ≥ 0.018
R´ = 1.099 * R^0.45 - 0.099
G´ = 1.099 * G^0.45 - 0.099
B´ = 1.099 * B^0.45 - 0.099
R、G、B<0.018的

R´=4.5*R
G´=4.5*G
B´=4.5*B
对于R,G,B≥ 0.018
R´=1.099*R^0.45-0.099
G´=1.099*G^0.45-0.099
B´=1.099*B^0.45-0.099
数字0.18、4.5、1.099和0.099从何而来?我特别需要知道它们是如何推导出来的


我需要知道,因为我正在编写一个gamma校正函数,使用幂和缩放的简单方法,而不是上面的方法,会产生不同的结果。

下面是我对它的理解

伽马校正功能的设计必须符合以下要求(参见):

  • 0强度的电压必须为0
  • 1强度的电压必须为1
  • 它必须表现为接近强度1的幂函数(指数1/2.22=0.45)
  • 它必须是接近原点的线性(以减少低强度下传感器噪声的影响)
  • 它在[0,1]中必须是连续的且连续可微的
所以这个问题可以通过找到定义函数g:x->g(x)的数字{a,b,c,x0}来解决,比如:

  • g(x)=a*x^.45+b in[x0,1]
  • g(x)=cxim[0,x0[
  • g(1)=1
  • g(0)=0
  • lim{x->x0-}(g)=lim{x->x0+}(g)
  • lim{x->x0-}(dg/dx)=lim{x->x0+}(dg/dx)
由此得出以下方程式:

  • a+b=1
  • c*x0=a*x0^.45+b
  • c=0.45*a*x0^-0.55
相当于:

  • a=1/(1-.55*x0^.45)
  • b=-.55*x0^.45/(1-.55*x0^.45)
  • c=.45*x0^-.55/(1-.55*x0^.45)
如果将x0设置为0.018,则得到:

  • a=1.099
  • b=-.099
  • c=4.5
剩下的问题是:他们是如何选择x0的?我找不到0.018值的任何理由……或者他们可以从其他3个参数中的任何一个开始(例如,将坡脚坡度设置为4.5,他们导出a、b和x0)


我不确定这是否能解决你的问题,无论如何,我希望这能有所帮助(我在数学方面玩得很开心)。

下面是我的计算结果

伽马校正功能的设计必须符合以下要求(参见):

  • 0强度的电压必须为0
  • 1强度的电压必须为1
  • 它必须表现为接近强度1的幂函数(指数1/2.22=0.45)
  • 它必须是接近原点的线性(以减少低强度下传感器噪声的影响)
  • 它在[0,1]中必须是连续的且连续可微的
所以这个问题可以通过找到定义函数g:x->g(x)的数字{a,b,c,x0}来解决,比如:

  • g(x)=a*x^.45+b in[x0,1]
  • g(x)=cxim[0,x0[
  • g(1)=1
  • g(0)=0
  • lim{x->x0-}(g)=lim{x->x0+}(g)
  • lim{x->x0-}(dg/dx)=lim{x->x0+}(dg/dx)
由此得出以下方程式:

  • a+b=1
  • c*x0=a*x0^.45+b
  • c=0.45*a*x0^-0.55
相当于:

  • a=1/(1-.55*x0^.45)
  • b=-.55*x0^.45/(1-.55*x0^.45)
  • c=.45*x0^-.55/(1-.55*x0^.45)
如果将x0设置为0.018,则得到:

  • a=1.099
  • b=-.099
  • c=4.5
剩下的问题是:他们是如何选择x0的?我找不到0.018值的任何理由……或者他们可以从其他3个参数中的任何一个开始(例如,将坡脚坡度设置为4.5,他们导出a、b和x0)


不确定这是否能解决您的问题,无论如何,我希望这会有所帮助(我对数学很感兴趣)。

您可能会想看一看。这是一本很棒的读物。这些是编码公式(传感器信号->字节),您确定这是您需要的更正吗?@Stéphane此公式是Intel IPP的直接副本。更正是正确的。我只是想知道这些数字是如何推导出来的。@JacquesCousteau谢谢……我来读一下。您可能会想看一看。这是一个很好的阅读。这些是编码公式(传感器信号->字节),您确定这是您需要的更正吗?@Stéphane此公式是Intel IPP的直接副本。更正是正确的。我只是想知道这些数字是如何推导出来的。@JacquesCousteau谢谢……我来读一下。谢谢@Stépahne。这当然是一个很好的开始。如果您将这两个公式应用于输入,0.018是近似的input值,其中两个公式产生相同的结果。这是意料之中的。现在,如何轻松找到这个交叉点?0.02更接近。找到交叉点应该有效,因为脚趾显然在交叉点结束。这引出了一个问题:为什么他们没有使用0.02,而是使用0.018?谢谢@Stépahne。这当然是一个伟大的交叉点艺术。如果将两个公式应用于输入,则0.018是两个公式产生相同结果的近似输入值。这是意料之中的。现在,如何轻松找到此交叉点?0.02更接近。找到交叉点应该有效,因为脚趾显然在交叉点处结束。这就引出了一个问题:他们为什么不使用0。02,但使用了0.018?