algorithm - HCL 颜色到 RGB 和反向

标签 algorithm colors wolfram-mathematica color-conversion

我需要一个算法来将 HCL 颜色转换为 RGB 并将 RGB 反向转换为 HCL,同时记住这些颜色空间具有不同的色域(我需要将 HCL 颜色限制为可以在 RGB 颜色空间中再现的颜色)。这个算法是什么(该算法旨在在原生仅支持 RGB 颜色的 Wolfram Mathematica 中实现)?我没有使用色彩空间的经验。

附言一些关于HCL颜色的文章:

M. Sarifuddin (2005). A new perceptually uniform color space with associated color similarity measure for content–based image and video retrieval.

Zeileis, Hornik and Murrell (2009): Escaping RGBland: Selecting Colors for Statistical Graphics // Computational Statistics & Data Analysis Volume 53, Issue 9, 1 July 2009, Pages 3259-3270

更新: 正如 Jonathan Jansson 指出的那样, 在上面两篇文章中不同的颜色空间被描述为名称“HCL”:“第二篇文章使用了 LCh(uv) 与 Lu 相同v* 但在极坐标中描述,其中 h(uv) 是 u* 和 v* 坐标的角度,C* 是该矢量的大小”。所以实际上我需要一种算法来将 RGB 转换为 Luv* 并向后转换。

最佳答案

我也刚刚学习了 HCL 色彩空间。不过,您问题中两篇文章中使用的色彩空间似乎是不同的色彩空间。

第二篇文章使用 L*C*h(uv),它与 ​​L*u*v* 相同,但在极坐标中描述,其中 h(uv) 是 u* 和 v* 坐标的角度,C*是该向量的大小。

第一篇文章中的 LCH 颜色空间似乎描述了另一种颜色空间,而不是使用更多算法转换的颜色空间。这里还有第一篇论文的另一个版本:http://isjd.pdii.lipi.go.id/admin/jurnal/14209102121.pdf

如果您打算使用 CIE L*u*v*,您需要先将 sRGB 转换为 CIE XYZ,然后再转换为 CIE L*u*v*。在大多数情况下,RGB 实际上指的是 sRGB,因此无需从 RGB 转换为 sRGB。

All source code needed

Good article about how conversion to XYZ works

Nice online converter

但我无法回答您有关如何将颜色限制在 sRGB 空间的问题。您可以在转换后丢弃 0 到 1 范围之外的 RGB 颜色。仅仅限制颜色会产生非常奇怪的结果。尝试转到转换器并输入颜色 RGB 0 0 255 并转换为 L*a*b*(类似于 L*u*v*),然后将 L* 增加到 70 并将其转换回来,结果肯定是不再是蓝色了。

编辑:更正了 URL 编辑:将另一个答案合并到这个答案中

关于algorithm - HCL 颜色到 RGB 和反向,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7530627/

相关文章:

android - 在 Android Activity 中将颜色设置为文本?

wolfram-mathematica - 在 Mathematica 中生成一个列表,对每个元素进行条件测试

wolfram-mathematica - 在 Mathematica 中导出带有纹理的图形

c# - 快速查找遭受浮点不准确

php - 如何从表中选择一行,该行包含一个正整数字段,但0用于表示 "any"

python - 分组可变长度元组的高效算法

algorithm - 计算递归算法的复杂度

Android 应用小部件 : how to change color AND transparency of ImageView

ios - NavigationBar 改变颜色本身

wolfram-mathematica - 在 Mathematica 中显示模块内的绘图