我看到了遍及整个地方的HSV色彩空间:用于跟踪,人体检测等...我想知道,为什么?与使用RGB相比,使它更好的色彩空间是什么?

评论

这个问题问得好。我认为,从细节上讲,它将受益:什么是HSV,什么是RGB。由于大多数答案都在比较HSV和RGB,因此可以改写标题以比较这两个颜色空间。

另一个好问题可能是:“为什么在各地都使用HSV而不是HSL?”

#1 楼

简单的答案是,与RGB不同,HSV将亮度或图像强度与色度或颜色信息分开。这在许多应用程序中非常有用。例如,如果要对彩色图像进行直方图均衡化,则可能只希望对强度分量进行处理,而不必对颜色分量进行处理。否则,您将获得非常奇怪的颜色。

在计算机视觉中,出于各种原因(例如对照明变化的鲁棒性或消除阴影),您通常希望将颜色分量与强度分开。

但是,请注意,HSV是将颜色与强度分开的许多颜色空间之一(请参见YCbCr,Lab等)。单纯使用HSV的原因很简单,因为RGB和HSV之间进行转换的代码已广泛使用并且也易于实现。例如,用于MATLAB的图像处理工具箱包含函数rgb2hsvhsv2rgb

#2 楼

颜色信息通常比HSV信息更嘈杂。存在咬合)。这是一个较大项目的一部分,因此使我们有时间尝试解决此特定问题的不同方法(并重用较旧的方法)。我自己没有尝试过基于颜色的方法,但是我记得一个有趣的信息:_STOP符号中的主要RGB成分通常不是红色! (主要是由于阴影)
您通常可以从HSV色彩空间中获得更好的信息。让我尝试再次给出一个个人经验的示例:尝试想象您的单色平面图像上有阴影。在RGB色彩空间中,阴影部分与没有阴影的部分很可能具有非常不同的特性。在HSV色彩空间中,两个色块的色相成分更可能相似:阴影将主要影响值或饱和度成分,而色相则指示主要的“颜色”(没有亮度和白色稀释度) / black)应该不会有太大变化。
如果您觉得这些解释听起来不直观,我建议:


尝试并更好地理解用于表示HSV中颜色的组件颜色空间,并让您重新了解RGB


,并尝试开发这种颜色表示形式的原因:它总是以某种方式,基于人类对颜色的解释的某种观点
例如孩子实际上并不喜欢高度着色的==有价值的对象,他们更喜欢高度饱和的对象,即颜色强烈且未稀释的对象。您应该使用图像:尝试分解其RGB和HSV分量中的各种图像
您的目标是查看和理解包含阴影,强烈照明,光反射的图像在这些分解中的区别。


如果您要播放特定类型的图像,请尝试分解它们:谁知道,也许RGB实际上比HSV更适合您的需求:)



评论


$ \ begingroup $
如果是阴影,则应仅更改亮度-而不更改饱和度。
$ \ endgroup $
–安德烈(Andrey Rubshtein)
2012年10月18日在16:02

$ \ begingroup $
@Andrey,正如我所说的,我自己并没有使用基于颜色的方法,但我可以推测,如果它不仅是阴影,可能是周围环境的间接照明或类似的作用。
$ \ endgroup $
–佩内洛普
2012年10月19日在8:24

$ \ begingroup $
你是对的。但是,在间接照明的情况下,色相也会改变。
$ \ endgroup $
–安德烈(Andrey Rubshtein)
2012年10月19日,9:09

$ \ begingroup $
@Andrey因此,我的措辞是:“更有可能”,“相似”,“主要影响”……毕竟,我并没有解释HSV,只是给出一些例子并根据经验进行有根据的猜测。而且,为任何应用程序选择最合适的色彩空间的最佳方法是使用图像数据库和不同的色彩空间
$ \ endgroup $
–佩内洛普
2012年10月19日9:46



$ \ begingroup $
阴影中的任何东西(因此没有被主光源(太阳)照亮)都被辅助光源(天空)照亮,天空是巨大,明亮且非常蓝的光。在人眼中,红色仍然看起来是红色的,因为我们的眼睛是通过相对颜色而不是绝对颜色进行测量的,这就是为什么您的室内非闪光照片看起来比您想象的要黄的原因。我绝对同意使用您的实际图像数据库。
$ \ endgroup $
–约翰·罗伯逊
2012年11月6日16:33

#3 楼

仅使用Hue组件会使算法对照明变化的敏感性降低(如果不是不变的话)。

另一个流行的选择是LAB色彩空间,其中AB通道代表AB空间中的色彩和欧氏距离更好地匹配人类对颜色的感知。同样,忽略L通道(亮度)会使算法对光照差异更加鲁棒。

#4 楼

我能想到的最佳答案是:RGB与RGB显示颜色的方式有关的“实现细节”,而HSV与“实际颜色”组件有关。表示RGB的另一种方式是计算机对待色彩的方式,而HSV尝试捕获人类感知色彩的方式。

我将详细说明: >颜色是基于电磁波的感知。这些波的自然属性例如是强度和频率。如果我们将光波的频率从红外线扫描到紫外线,我们将在视觉上感知到沿彩虹色的颜色变化。彩虹色可以被认为是“纯色”,因为它们是由单频波表示的。和蓝色。事实是,这种响应是非线性的,因此视网膜可以通过三个颜色分量的组合响应来区分给定的纯色(并隐式地表示其“频率”)。它们的存在仅仅是为了模仿我们视网膜的内部运作,从而可以通过方便的(从计算机的角度)24位/像素的颜色编码在计算机显示器上显示绝大多数颜色。 RGB颜色空间与自然颜色特性没有内在联系,也与人类对颜色的解释没有任何关系。 )会给出非常粗略甚至明显的“错误”结果。这就是为什么建议通过将色标从RGB转换为其他色彩空间(HLS,Lab等)来创建色彩图,执行插值,然后将插值转换回RGB的原因。
希望这会有所帮助!

评论


$ \ begingroup $
我不同意。这里有三个领域,而不是两个领域:人,计算机和物理。 RGB模型来自人眼,具有三个颜色接收器。
$ \ endgroup $
– MSalters
2012年7月5日在15:40

$ \ begingroup $
@MSalters我认为我们在谈论同样的事情(尽管也许我还没有完全弄清楚自己)。 RGB显示器的制造符合我们的色彩感知系统。它们具有计算机对应部分,即(R,G,B)“坐标”。由于这些坐标映射到实现而不是颜色的物理“真实”属性,因此它们不适合执行某些数学处理,例如:感知线性梯度插值,色彩校正,亮度和饱和度运算等。
$ \ endgroup $
– heltonbiker
2012年7月5日在17:11

#5 楼

HSV代表色相饱和度值。它实际上是一种颜色平面表示形式(如RGB,YCbCr等)。

它是一种与设备无关的颜色表示格式:HSV颜色表示法可用于检测特定的颜色类型,例如:皮肤颜色,火焰色等。

Matlab用于将RGB图像转换为HSV平面的函数是rgb2hsv('/inputimage_name')

#6 楼

我会举一个例子供您理解。
就像我们的手有很多部位一样,手掌,后手掌以及下面的部分。我们可以在这些区域看到不同的颜色变化,但是所有这些区域的色相变化不大,因此色相值在手分割中很有用。

#7 楼

据我所知,与YUV或LAB相比,HSV特别好,因为它可以更好地进行特征提取和照明不变性或可视化。我猜HSV是更常用的一种,因为约定和连续性:如果您使用相同的色彩空间,则它更易于比较结果并相互交流。

也就是说,HSV(相对于RGB)之所以用于计算机视觉,有两个原因,我知道:可视化。




可视化。只要您在图像上密集地获得了方向信息,那么HSV就是一个很好的可视化色彩空间。可以在HSV上绘制颜色,而不是在图像上绘制很少的矢量(它们会使所有内容杂乱无章),方法是将方向矢量映射到H(矢量角度)和S(矢量幅度)。这留下了Value组件,可以根据需要实现的方式以多种方式进行设置。请参阅以下来自Middlebury光流数据集的示例。 HSV用于密集显示方向。





特征提取和照度不变,如其他答案所述。

#8 楼

如其他人所述,将亮度与色度分开是有益的。根据落在物体上的光量,场景中的亮度变化很大。另一方面,色度与物体的内在属性具有更好的关联,对于适当的白平衡图像而言,或多或少不变。或实际上,任何带有色度平面极性参数化的色彩空间,都不是实现此目的的明智选择。那是因为它们在灰度线上引入了奇异性(哪种色调是灰色?),使它们对噪声和白平衡非常敏感。此外,在极坐标系中比较两种颜色并不是那么简单。另请注意,HSV的值或HSL中的亮度都不与人类感知的亮度或任何其他物理能量度量相对应。

有很多线性色彩空间可以提供相同的色度-色度分离,而保持线性度(YCbCr,YUV)或正确建模人类视觉(LUV,LAB)。借助这些色标,您可以使用欧几里得L2范数比较两种颜色的色度,从而总体上使算法更可靠。

为什么那么频繁使用HSV / HSL?很难给出客观答案。根据我的经验,这主要是由于无知和RGB-> HSV转换例程的可用性。必须使用其作者不了解伽玛校正的代码,更不用说不同的色彩空间了。可见的代码将RGB转换为HSV,然后根据色相对图像进行了分割,而忽略了它是模块化数量的事实。我认为我们可以同意,这些出于任何原因都不是有意识的决定。

#9 楼

与RGB,YUV,Lab等相比,HSV颜色模型与人类如何看待彩色对象的相关性更强。以及有多少白光照射在上面(完整性)。