Answers:
颜色信息通常比HSV信息嘈杂得多。
让我举一个例子:我和一些朋友参与了一个项目,该项目涉及在真实场景视频(噪声,阴影和有时存在遮挡)中识别交通标志。这是一个较大项目的一部分,因此使我们有时间尝试解决此特定问题的不同方法(并重用较旧的方法)。我自己没有尝试过基于颜色的方法,但是我记得一个有趣的信息:_STOP符号中的主要RGB成分通常不是红色!(主要是由于阴影)
通常,您可以从HSV色彩空间中获得更好的信息。让我尝试再次给出一个个人经验的示例:尝试想象您的单色平面图像上有阴影。在RGB色彩空间中,阴影部分很可能与没有阴影的部分具有非常不同的特征。在HSV色彩空间中,两个色块的色相分量很可能相似:阴影将主要影响值或饱和度分量,而色相则指示主要的“颜色”(没有亮度和白色稀释度) / black)应该不会有太大变化。
如果您觉得这些解释不直观,我建议:
尝试看看开发这种颜色表示的原因:总是以某种方式,基于人类对颜色的解释的某种观点
例如,孩子实际上不喜欢高度着色 == 有价值的对象,他们更喜欢高度饱和的对象,即颜色强烈且未稀释的对象
在掌握了这一点并发展了一些直觉之后,您应该使用图像:尝试分解其RGB和HSV分量中的各种图像
您的目标是查看和理解包含阴影,强光照,光反射的图像在这些分解中的区别。
如果您喜欢播放特定类型的图像,请尝试分解它们:谁知道,也许RGB确实比HSV更适合您的需求:)
我能想到的最佳答案是:RGB与RGB显示颜色的方式有关的“实现细节”,而HSV与“实际颜色”组件有关。表示RGB的另一种方式是计算机对待颜色的方式,而HSV试图捕获人类感知颜色的方式的组成部分。
我会详细说明:
颜色是基于电磁波的感知。这些波的自然属性例如是强度和频率。如果我们将光波的频率从红外线扫描到紫外线,我们将在视觉上感知到沿着彩虹色的颜色变化。彩虹色可以被视为“纯色”,因为它们由单频波表示。
现在,人眼只能对三个主要的光频率做出反应或“共振”,这并不奇怪地是红色,绿色和蓝色。事实是该响应是非线性的,因此视网膜可以通过三个颜色分量的组合响应来区分给定的纯色(并隐式地表示其“频率”)。
RGB颜色空间的存在仅仅是为了模仿我们视网膜的内部运作,因此绝大多数的颜色可以通过方便的(从计算机的角度)在24位每像素的颜色上显示在计算机显示器上。编码。RGB颜色空间与自然颜色特性没有内在联系,也与人类对颜色的解释没有关系。
例如,在RGB空间中按通道执行的任何算术运算(例如,生成颜色渐变)都会产生非常粗糙的结果,甚至是明显的“错误”结果。因此,建议通过将色标从RGB转换为其他颜色空间(HLS,Lab等)来创建色图,执行插值,然后将插值转换回RGB。
希望这可以帮助!
我会给你一个例子来理解。就像我们的手有很多部分一样,手掌,后手掌及其下方。我们可以在这些区域看到不同的颜色变化,但是所有这些区域的色相变化不大,因此色相值在手分割中很有用。
据我所知,与YUV或LAB相比,HSV特别好,因为它可以更好地进行特征提取和照明不变性或可视化。我猜HSV是更常用的一种,因为约定和连续性:如果您使用相同的色彩空间,则它更易于比较结果并相互交流。
话虽如此,HSV(而不是RGB)用于计算机视觉的原因有两个:
如其他人所述,将亮度与色度分开是有益的。根据落在物体上的光量,场景中的亮度变化很大。另一方面,色度与物体的内在属性具有更好的关联,并且对于适当的白平衡图像而言,或多或少是不变的。
但是,我想补充一点,HSV,HSL或实际上任何具有色度平面极性参数化的色彩空间都是为此目的的不佳选择。这是因为它们在灰度线(哪个色调是灰色?)上引入了奇异性,使它们对噪声和白平衡非常敏感。此外,在极坐标系中比较两种颜色并不是那么简单。还应注意,HSV中的值或HSL中的亮度都不对应于人类感知的亮度或任何其他物理量度的能量。
有很多线性色彩空间可以提供相同的色度-色度分离,同时又能保持线性度(YCbCr,YUV)或正确模拟人类视觉(LUV,LAB)。使用这些颜色,您可以使用欧几里得L2范数在其色度上比较两种颜色,从而使算法总体上更可靠。
为什么那么频繁使用HSV / HSL?很难给出客观答案。根据我的经验,这主要是由于无知和RGB-> HSV转换例程的可用性。必须使用其作者不了解伽玛校正的代码,更不用说不同的色彩空间了。可见的代码将RGB转换为HSV,然后根据色相对图像进行了分割,而忽略了它是模块化数量的事实。我认为我们可以同意,这些不是出于任何原因支持的有意识的决定。