将 CIELab 转换为 CIELCh(ab) 未产生正确结果

2024-04-03

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

根据http://www.easyrgb.com/en/math.php 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 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

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

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

结果是 299。

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


我联系了 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。如果有人尝试转换任何颜色,他们一定应该检查他们的计算器和数学页面:

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

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

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将 CIELab 转换为 CIELCh(ab) 未产生正确结果 的相关文章

  • 如何创建一个在给定范围内随机打乱数字的 int 数组[重复]

    这个问题在这里已经有答案了 基本上 假设我有一个可以容纳 10 个数字的 int 数组 这意味着我可以在每个索引中存储 0 9 每个数字只能存储一次 如果我运行下面的代码 int num new int 10 for int i 0 i l
  • 为什么隐式类型转换没有警告?

    我终于发现了程序中的一个错误 该错误是由返回类型的隐式类型转换引起的 即使g Wall对此没有任何警告 我想知道是否有什么办法可以快速找出这种无意识的错误 include
  • 求反射角的弧度

    我正在编写一个简单的 Flash 游戏 只是为了学习 Flash 并提高我的数学能力 但我对弧度感到非常困惑 因为这对我来说是新的 到目前为止 我所做的是使用鼠标 单击并释放 使用弧度向该方向射出一个球 现在我想要发生的是 当球撞到墙壁时
  • 在 Flutter 中更改深色模式的文本颜色(带有动态主题)?

    当我选择深色模式时 文本变成白色 但我想将所有文本设置为白色70或其他内容 包括按钮和常规文本 如何定义深色模式的默认文本颜色 我的主题数据现在是这样的 class MyApp extends StatelessWidget overrid
  • C/C++ 中的最小二乘回归

    如何在 C C 中实现因子分析的最小二乘回归 the黄金标准是LAPACK http www netlib org lapack lug node27 html 你特别想要xGELS
  • 如何使ggplot2图形与R中的黑白打印(复印友好)兼容?

    有没有办法转换ggplot2绘制成黑白版本而不重写大部分代码 以便黑白版本保持可读性 例如 要替换scale fill gradient with scale fill grey 或者自动进行适合复印的转换 如网站http colorbre
  • 为什么结构体不能转换为嵌入类型

    package main type Inner struct x int type Outer struct Inner func main x Inner 1 y Outer x cannot convert x type Inner t
  • iOS 中的随机颜色

    我想让我的导航栏每次加载时都具有不同的颜色 我在 viewDidApear 中放置了以下代码 CGFloat hue arc4random 256 256 0 0 0 to 1 0 CGFloat saturation arc4random
  • R 编程:创建堆叠条形图,每个堆叠条形具有可变颜色

    我正在尝试创建一个堆叠条形图 每个堆叠条形图中的颜色可变 也就是说 一个条形图在红色上方显示蓝色 下一个条形图在紫色上方显示红色 等等 我还想保留堆叠图表的功能 十分感谢大家 Adam 下图 使用上面的代码创建 显示了主要汽车制造商生产的汽
  • 四舍五入到 25、50、75、100

    我不是一个数学爱好者 所以我很难想出一个将小数四舍五入到 25 50 75 和 100 的计算方法 这不会是典型的四舍五入 因为小数不会减少但只增加了 Example 如果 11 12 则舍入为 11 25 如果为 11 34 则舍入为 1
  • Python 小数.InvalidOperation 错误

    当我运行这样的东西时 我总是收到此错误 from decimal import getcontext prec 30 b 2 3 Decimal b Error Traceback most recent call last File Te
  • 矩阵向量变换

    我正在编写一个代码来制作软件蒙皮器 骨骼 皮肤动画 并且我正处于 优化 阶段 蒙皮器工作得很好 并且在 Core 上 1 09 毫秒内对 4900 个三角形网格与 22 个骨骼进行蒙皮Duo 2 Ghz 笔记本 我需要知道的是 1 有人可以
  • SQL Server:将 varchar 转换为十进制(也考虑指数表示法)

    我需要转换表的数据并进行一些操作 其中一种列数据类型是Varchar 但它存储decimal数字 我正在努力转换varchar into decimal 我努力了CAST TempPercent1 AS DECIMAL 28 16 问题是数
  • 基于时间的算法评分

    我们希望创建一种评分算法 在更短的时间内获得更高的分数 在更长的时间内获得更少的分数 需要注意的是 没有实际范围 因此时间范围可以从 100 毫秒到长达 10 分钟或更长时间 点范围为 0 到 50 谢谢你的帮助 你可以简单地把它变成一个线
  • 计算序言中列表的排列

    在 序言艺术 第二版中有一个问题 您应该定义一个谓词 Even permutation Xs Ys 和类似的奇数排列 当您查询时 例如 Even permutation 1 2 3 2 3 1 和 odd permutation 1 2 3
  • 如何修复此 YCrCb -> RBG 转换公式?

    我使用的公式来自这个问题 https stackoverflow com questions 8838481 kcvpixelformattype 420ypcbcr8biplanarfullrange frame to uiimage c
  • 具有非常大的数字的除法

    我只是想知道在处理大数字时有哪些不同的除法策略 我所说的大数字是指 50 位数字 例如 9237639100273856744937827364095876289200667937278 82637448262718273966299344
  • 检查值是否实现接口的说明

    我读过 Effective Go 和其他类似这样的问答 golang接口合规性编译类型检查 https stackoverflow com questions 17994519 golang interface compliance com
  • 为什么“valueAsNumber”返回 NaN 作为值?

    在下面的代码中 我试图调用valueAsNumber但我只得到一个 NaN 返回 当我使用parseInt我得到了我期望的结果 为什么是这样
  • 如何安全地将 CGFloat 降低或提高到 int?

    我经常需要在地板或天花板上安装CGFloat to an int 用于计算数组索引 我永远看到的问题floorf theCGFloat or ceilf theCGFloat 是浮点不准确可能会带来麻烦 那如果我的CGFloat is 2

随机推荐