首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将CIELab转换为CIELCh(ab)不会产生正确的结果

将CIELab转换为CIELCh(ab)不会产生正确的结果
EN

Stack Overflow用户
提问于 2018-12-12 06:34:05
回答 1查看 730关注 0票数 0

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

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

代码语言:javascript
复制
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

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

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

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

我取了(38.17/-21.59)的arctangent。我检索到了-1.056弧度的值。根据代码,如果var_H < 0,则需要执行以下操作:

代码语言:javascript
复制
 var_H = 360 - ( abs( var_H ) / PI ) * 180

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

结果是299。

那么我到底做错了什么呢?如何获取119的值?

EN

回答 1

Stack Overflow用户

发布于 2018-12-12 13:59:38

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

您需要在arctangent计算中考虑“象限”。这是一个从CIE-Lab计算H°值的示例,同时考虑到象限信息:

代码语言:javascript
复制
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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53733379

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档