首页 > 解决方案 > CIELab 到 CIELCh(ab) 的转换没有产生正确的结果

问题描述

我很难用我的计算器手动将 CIELab 转换为 CIELCh。

根据http://www.easyrgb.com/en/math.php,以下是通过从弧度到度数从 CIELab 到 CIELCh 的中性语言编程代码:

var_H = arc_tangent( CIE-b*, CIE-a* )  //Quadrant by signs
if ( var_H > 0 ) var_H = ( var_H / PI ) * 180
else             var_H = 360 - ( abs( var_H ) / PI ) * 180
CIE-L* = CIE-L*
CIE-C* = sqrt( CIE-a* ^ 2 + CIE-b* ^ 2 )
CIE-H° = var_H

在这个网站上,它给出了相同的代码,但假设一切都已经在度数:http ://www.brucelindbloom.com/index.html?Equations.html

尝试通过我的物理手持计算器将 CIELAB 代码(37.80、-21.59、38.17)转换为 CIELch 时,我得到了值(38、43.851、299.49)。

但是,正确的值是 (38, 43.851, 119.499)。

这意味着前两部分一切都很好,但最后一部分是不正确的。

我不明白他们是如何得到 119 而不是 299。我相信数学上可能有错误。以下是我如何通过计算器检索 299:

我取了 (38.17/-21.59) 的反正切。我检索到 -1.056 弧度的值。根据代码,如果var_H < 0,那么你需要这样做:

 var_H = 360 - ( abs( var_H ) / PI ) * 180

所以我做了 360 - (1.056/3.14)*180。

这给出了 299。

那么我在这里做错了什么?我如何获得119的价值???

标签: mathcolorstype-conversionpixellab-color-space

解决方案


我联系了 EasyRGB 网站的支持,他们非常棒地解释了该怎么做!这是代表所说的:

您需要在反正切计算中考虑“象限”。这是一个从 CIE-Lab 计算 H° 值的示例,请牢记象限信息:

FUNCTION GS_CIE2Hue( a, b )
LOCAL xBias
if a >= 0 .AND. b == 0 ; return 0     ; endif
if a <  0 .AND. b == 0 ; return 180   ; endif
if a == 0 .AND. b >  0 ; return 90    ; endif
if a == 0 .AND. b <  0 ; return 270   ; endif
if a >  0 .AND. b >  0 ; xBias := 0   ; endif
if a <  0              ; xBias := 180 ; endif
if a >  0 .AND. b <  0 ; xBias := 360 ; endif
return rtod( atan( b / a ) ) + xBias

此解决方案的所有功劳归于http://www.easyrgb.com。如果有人试图转换任何颜色,他们绝对应该查看他们的计算器和数学页面:

http://www.easyrgb.com/en/convert.php#inputFORM

http://www.easyrgb.com/en/math.php


推荐阅读