Преобразование CIELab в CIELCh (ab) не дает правильного результата - PullRequest
0 голосов
/ 12 декабря 2018

Мне трудно вручную конвертировать 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, то нужно сделать: </p>

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

Итак, я сделал 360 - (1.056 / 3.14) * 180.

И это дает 299.

Так что я здесь не так делаю?Как мне получить значение 119 ???

1 Ответ

0 голосов
/ 12 декабря 2018

Я связался со службой поддержки EasyRGB, и они были достаточно хороши, чтобы объяснить, что делать!Вот что сказал представитель:

Вам необходимо учесть "квадранты" в расчете арктангенса.Это пример для вычисления значения H ° в CIE-Lab с учетом информации о квадранте:

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

...