在 HSV 空间中添加/混合颜色

Posted

技术标签:

【中文标题】在 HSV 空间中添加/混合颜色【英文标题】:adding/mixing colors in HSV Space 【发布时间】:2011-11-14 22:22:54 【问题描述】:

我已经尝试了几天的可视化。 我正在生成衍射图像,并希望根据光的波长对其进行着色。 获得正确颜色的最简单方法是使用 HSV 空间,其中 H 随波长而变化,S,V 设置为 1.0 唉,我找不到在 HSV 空间中混合不同颜色的公式/算法/方法。

是否有混合 HSV 的公式或其他可理解的方式?

【问题讨论】:

您可能会发现这个先前的问题信息丰富:***.com/questions/6130621/… 【参考方案1】:

Foley 等人的标准参考文献之一Computer Graphics: Principles and Practice。在第 13.3.7 节“在色彩空间中插值”中有这样的说法:

“当两个图像混合时 [...] 颜色可能会很远,加法模型(例如 RGB)是合适的。另一方面,如果目标是在两种固定颜色之间进行插值色调(或饱和度)并为所有插值颜色保持固定的色调(或饱和度),则 HSV 或 HLS 更可取。但请注意,HSV 或 HSL 中的固定饱和度插值被视为具有观看者的固定饱和度 [...]"

所以他们同意@andrewmu 的建议,这似乎是总体上最好的建议。

【讨论】:

如果您想在 HSV 空间中混合两种以上的颜色(亮度和饱和度设置为 1)怎么办?你能把色轮上的颜色向量加起来吗?如果您以这种方式添加所有彩虹色(一直围绕车轮),您应该得到白色,对吧?【参考方案2】:

老实说,我会转换 RGB,平均组件并转换回 HSV。

这不是最有效的方法,但您可能拥有或需要 RGBHSV 代码,并且 RGB 计算可能要简单得多。

【讨论】:

这更像是 1. 对于每个波长:计算每个像素的强度。标准化,添加到 double 数组(图片)。 2. 写之前:标准化图片数组,按 255.0 缩放,转换为 int 3. 最后存储到文件中(原始 PPM 或更多的工作 PNG) 剩下的唯一事情就是签入以某种方式,这些图片在物理上是否正确。 我不完全理解,虽然听起来很有趣。如果要对 RGB 颜色进行归一化,您会将它们投影到颜色空间的某个弯曲区域。 Tbh 为了保存,这些天我只写原始字节并在命令行上使用 ImageMagick 将其转换为 PNG。

以上是关于在 HSV 空间中添加/混合颜色的主要内容,如果未能解决你的问题,请参考以下文章

由RGB到HSV颜色空间的理解

HSV介绍二:HSV颜色识别-HSV基本颜色分量范围

HSV色彩空间

HSV颜色检测

色彩空间-- RGBHSV

HSV 和 HLS颜色空间