我看到到处都在使用 HSV 颜色空间:用于跟踪、人体检测等……我想知道,为什么?这个色彩空间是什么使它比使用 RGB 更好?
为什么我们在视觉和图像处理中如此频繁地使用 HSV 颜色空间?
颜色信息通常比 HSV 信息更嘈杂。
让我举个例子:我和一些朋友参与了一个处理真实场景视频中交通标志识别的项目(噪音、阴影,有时还存在遮挡)。这是一个更大项目的一部分,因此我们有时间尝试不同的方法来解决这个特定问题(并重用旧方法)。我自己没有尝试基于颜色的方法,但我记得一个有趣的信息:_STOP 标志中的主要 RGB 分量通常不是红色!(主要是由于阴影)
您经常可以从 HSV 颜色空间中获得更好的信息。让我再举一个个人经验的例子:试着想象你有一个单色平面的图像,上面有阴影。在 RGB 颜色空间中,阴影部分很可能与没有阴影的部分具有非常不同的特征。在 HSV 颜色空间中,两个色块的色调分量更可能相似:阴影将主要影响值,或者可能是饱和度分量,而色调表示主要的“颜色”(没有亮度和被白色稀释/black) 不应该改变太多。
如果这些解释对您来说听起来不直观,我建议:
尝试并更好地理解用于在 HSV 颜色空间中表示颜色的组件,并更新您的 RGB 知识
试着看看为什么这些颜色表现被开发出来的原因:它总是以某种方式,基于人类对颜色的解释
例如,孩子们实际上并不喜欢高度着色==有价值的物体,他们更喜欢高度饱和的物体,颜色强烈且未稀释的物体
在你得到这个并培养一些直觉之后,你应该玩图像:尝试在它们的 RGB 和 HSV 组件中分解各种图像
您的目标是查看和理解包含阴影、强照明、光反射的图像的这些分解的差异。
如果您有喜欢玩的特定类型的图像,请尝试分解它们:谁知道呢,也许 RGB 真的比 HSV 更适合您的需求 :)
仅使用 Hue 组件会使算法对照明变化不太敏感(如果不是不变的话)。
另一个流行的选项是 LAB 颜色空间,其中 AB 通道代表颜色,AB 空间中的欧式距离更符合人类对颜色的感知。同样,忽略 L 通道(亮度)使算法对光照差异更加稳健。
我能想到的最佳答案是:RGB 与关于 RGB 显示颜色方式的“实现细节”有关,而 HSV 与“实际颜色”组件有关。另一种说法是 RGB 是计算机处理颜色的方式,而 HSV 试图捕捉我们人类感知颜色方式的组成部分。
我会详细说明:
颜色是基于电磁波的感知。这些波的自然属性是例如强度和频率。如果我们将光波的频率从红外线扫描到紫外线,我们会在视觉上感知到彩虹色的颜色变化。彩虹色可以被认为是“纯色”,因为它们由单频波表示。
现在人眼只能对三种主要的光频率做出反应或“共振”,这并不奇怪,红色、绿色和蓝色。事实是这种响应是非线性的,因此视网膜可以通过三种颜色分量的组合响应来区分给定的纯色(以及隐含的“频率”)。
RGB 颜色空间的存在只是为了模仿我们视网膜的内部运作,因此绝大多数颜色可以通过方便的(从计算机的角度)24 位/像素颜色在计算机显示器上表示编码。RGB 颜色空间与自然颜色属性没有内在关系,也与人类对颜色的解释没有内在关系。
例如,在 RGB 空间中按通道执行的任何算术运算(例如,颜色渐变的生成)都会给出非常粗略甚至明显“错误”的结果。这就是为什么建议通过将色标从 RGB 转换为其他颜色空间(HLS、Lab 等)、执行插值、然后将插值转换回 RGB 来创建颜色图的原因。
希望这可以帮助!