我需要一种算法,将HCL颜色转换为RGB并将向后RGB转换为HCL,同时要记住这些颜色空间具有不同的色域(我需要将HCL颜色限制为可以在RGB颜色空间中再现的颜色)。这是什么算法(该算法打算在仅支持RGB颜色的Wolfram Mathematica 中实现)?我没有使用色彩空间的经验。
PS关于HCL颜色的一些文章:
M.Sarifuddin(2005)。一种新的感知上统一的色彩空间以及相关的色彩相似性度量,可用于基于内容的图像和视频检索。
Zeileis,Hornik和Murrell(2009):逃避RGBland:为统计图形选择颜色//计算统计和数据分析第53卷,第9期,2009年7月1日,第3259-3270页
更新: 正如乔纳森·詹森(JonathanJansson)所指出的那样,在以上两篇文章中,不同的色彩空间以名称“ HCL”描述:“第二篇文章使用L C h(uv)与L u v 相同,但以Polar描述坐标,其中h(uv)是u 和v 坐标的角度,而C 是该矢量的大小”。因此,实际上我需要一种将RGB转换为L u v *并向后转换的算法。
我也只是在讲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。
所需的所有源代码
关于如何转换为XYZ的好文章
不错的在线转换器
但是我无法回答您有关如何将颜色限制到sRGB空间的问题。转换后,您可以丢弃超出0到1范围的RGB颜色。仅夹紧颜色会产生非常奇怪的结果。尝试转到转换器,输入颜色RGB 0 0 255,转换为L * a * b (类似于L * u * v ),然后将L *增加为70,然后将其转换回去,结果肯定是不再是蓝色。
编辑:更正了URL编辑:将另一个答案合并到此答案中