HSL优于HSI和HSV吗?

时间:2012-07-09 14:12:07

标签: image-processing colors computer-vision

HSL是否优于HSI和HSV,因为它考虑了人类的感知。 对于一些图像处理算法,他们说我可以使用这些颜色空间中的任何一个, 而且我不确定选哪一个。我的意思是,算法只关心你提供的 它们具有色调和饱和度通道,您可以选择要使用的颜色空间

6 个答案:

答案 0 :(得分:27)

哪一个最好取决于你使用它的目的。但根据我的经验,HSL(HLS)在亮度和饱和度之间存在不幸的相互作用。

以下是将图像亮度降低2的示例。最左边的图像是原始图像;接下来是使用RGB,HLS和HSV的结果:

RGB, HLS, HSV comparison

注意HLS蝴蝶边缘周围过于明亮和饱和的斑点,特别是底部的红点。这是我所指的饱和问题。

此示例是使用colorsys module进行转换在Python中创建的。

答案 1 :(得分:19)

由于尚未接受答案,而且由于我必须进一步研究以完全理解这一点,我将加上我的两分钱。

像其他人一样,HSL或HSV哪个更好的答案取决于你想要建模和操纵的内容。

tl; dr - HSV对于机器视觉而言只是“更好”而不是 HSL(有警告,请参阅下文)。 “实验室”和其他正式的颜色模型更准确(但计算成本昂贵),应该真正用于更严肃的工作。 HSL对于“油​​漆”应用程序或任何其他需要人类“设置”,“输入”或以其他方式理解/理解颜色值的应用程序来说是完全更好的。

详情请参阅以下内容:




如果你试图模拟颜色是如何生成的,最直观的模型是HSL,因为它几乎直接映射到你如何混合颜料来创建颜色。例如,要创建“深色”黄色,您可以将基础黄色涂料与一些黑色混合。然而,要创造一个更浅的黄色,你会混合一点白色。

HSL中“L”光谱中50和0之间的值映射到必须混合多少“黑色”(黑色从0增加到100%,L从50减小到0)。

50到100之间的值映射到“白色”必须混合多少(白色从0到100%变化,L从50增加到100%)。

50%“L”为您提供“最纯净”的颜色形式,没有任何白色或黑色的“污染”。


以下链接的见解:
1. http://forums.getpaint.net/index.php?/topic/22745-hsl-instead-of-hsv/ 那里的最后一篇文章 2. http://en.wikipedia.org/wiki/HSL_and_HSV 检查HSL的颜色空间圆柱体 - 它非常清楚我所谈论的分布类型。

另外,如果您在任何时候处理过油漆,上述说明(希望)会有意义。 :)


因此,HSL是一种非常直观的方式来理解如何“生成”一种颜色 - 因此它是一个很好的模型,用于绘画应用程序,或任何其他针对观众的应用程序,用于以“阴影”/“色调”术语来思考颜色。




现在,转到HSV。

这是一个危险的领域,因为我们进入一个空间,基于我已经制定的理论来理解HSV并且没有得到其他来源的验证或证实。

在我看来,HSV中的“V”映射到投射在物体上的光量,假设在零光线下,物体将是完全黑暗的,并且在100%光线下,它将是全部白色。

因此,在苹果的this图像中,直接面向光源的点全部为白色,并且很可能在100%处具有“V”而在底部处的点完全在阴影和光线未触及,值为“0”。 (我没有检查过这些值,只是认为它们对解释很有用)。

因此,HSV似乎模拟了物体的点亮方式(并因此考虑了您可能必须对机器视觉应用中的镜面高光或阴影执行的任何补偿)比HSL更好。




但是你可以从我所链接的维基百科文章中“缺点”部分的例子中清楚地看到,这些方法都不是完美的。 “实验室”和其他更正式(和计算上昂贵)的颜色模型做得更好。

P.S:希望这有助于某人。

答案 2 :(得分:9)

唯一具有优势并将人类感知考虑在内的色彩空间是LAB,因为其中的欧几里德度量与人类色彩差异相关。

直接来自维基百科:

  

与RGB和CMYK颜色模型不同,Lab颜色设计为   近似人类视觉。它渴望感性统一性及其   L分量与人类对亮度的感知紧密匹配

这就是许多计算机视觉算法利用LAB空间的原因

HSVHSBHSI没有此属性。所以答案是否定的,HSL在人类感知意义上并不比HSIHSV“优越”。

如果您想接近人类的感知,请尝试LAB色彩空间。

答案 3 :(得分:7)

我会说一个不比另一个好,每个只是另一个的数学转换。不同的表示可以操作图像,使您想要的效果更容易一些。每个人都会对图像的感知有所不同,使用HSI或HSV可能会对输出图像产生微小的差异。

当考虑系统(即具有像素阵列)时,甚至RGB也考虑到人类的感知。当成像仪(带有拜耳覆盖图)拍摄照片时,每1个红色和蓝色像素有2个绿色像素。监视器仍然以RGB输出(尽管大多数只有一个绿色像素用于每个红色和蓝色)。夏普制造的新型电视显示器现在有一个黄色输出像素。他们这样做的原因是由于实际频谱中存在黄色波段,因此为了更好地真实地表示颜色,他们添加了黄色波段(或像素)。

所有这些都是基于人眼对光谱中任何其他颜色的绿色敏感度更高。

无论您使用何种比例尺,图像都将转换回RGB以显示在屏幕上。

http://hyperphysics.phy-astr.gsu.edu/hbase/vision/colcon.html

http://www.physicsclassroom.com/class/light/u12l2b.cfm

简而言之,我不认为任何一个比另一个更好,只是不同的表现形式。

http://en.wikipedia.org/wiki/Color

答案 4 :(得分:6)

实际上,我必须认为HSV对人类视觉感知更好,只要您了解在HSV中,饱和度是颜色的纯度,而值是该颜色的强度,而不是整体的亮度。拍这张照片,例如...
Spectrum

这是HSL饱和度(左)和HSL亮度(右)的映射...
HSL saturation enter image description here
请注意,饱和度是100%,直到你突然下降到最顶端的白色。在查看原始图像时不会感知到该映射。亮度映射也是如此。虽然它是一个更清晰的渐变,但它只是在视觉上模糊地匹配。将其与HSV饱和度(左)和HSV值(右)进行比较...... HSV Saturation enter image description here
这里可以看到饱和度映射随着颜色变得更白而下降。同样,可以在原始图像中非常清楚地看到值映射。当查看原始图像的各个颜色通道的映射时,这一点变得更加明显(非黑色区域几乎完全匹配值映射,但是不能接近亮度映射)...
{{{ 3}} Red Channel Green Channel根据这些信息,我不得不说HSV更适合处理实际图像(尤其是照片),而HSL可能更适合选择颜色一个颜色选择器。

另一方面,HSV中的值是CMYK中黑色的倒数。

使用HSV而不是HSL的另一个论点是HSV具有更少的不同值的组合,这可以导致相同的颜色,因为HSL将其分辨率的一半损失到其顶部锥体。假设您使用字节来表示组件 - 从而为每个组件提供256个唯一级别。在HSL中将产生的唯一RGB输出的最大数量是4,372,984种颜色(可用RGB色域的26%)。在HSV中,这高达9,830,041(占RGB色域的59%)......超过两倍。允许范围为0到359的色调将为HSV产生11,780,015,而对于HSL仅产生5,518,160。

答案 5 :(得分:3)

Imma在这里投入我的两分钱,既是程序员也是艺术学校的色彩理论,然后明智地转向软件工程事业。

HSL / HSV非常适合轻松编写程序功能来处理颜色而无需处理大量边缘情况。它们很难准确地复制人类对颜色的感知。

CMYK非常适合渲染打印材料,因为它近似于打印机所依赖的颜料。准确地复制人类对色彩的感知也很糟糕(虽然不是因为它本身很糟糕,但更多因为计算机在屏幕上显示它真的很糟糕。更多内容在一分钟之内)

RGB是科技中唯一能够有效准确反映人类视觉的色彩效用。 LAB基本上只是解决了RGB问题。还值得考虑的是,屏幕上的文字像素是RGB的表示,这意味着您使用的任何其他颜色空间在实际显示时都会被解析回RGB。真的,最好只剪掉中间人并在几乎每一个案例中使用它。

编程意义上的RGB问题在于它在表示方面基本上是立方的,而HSL / HSV都在半径内解析,这使得创建一个"色轮更容易。编程。如果不编写大量代码来处理RGB,RGB就很难做到这一点,因为它在数据表示方面可以立即解析。然而,RGB可以很好地准确地反映人类的视觉,它也是监视器所包含的实际硬件的基础。

TLDR;如果你想要死色并且不介意额外的工作,那就一直使用RGB。如果你想要打出一个足够好的"颜色实用程序和可能的字段错误票,以后您无法真正做任何事情,使用HSL / HSV。如果您正在进行打印,请使用CMYK,不要因为它很好,而是因为如果您不使用它,打印机会窒息,即使它很糟糕。

顺便说一句,如果你像艺术家而不是程序员一样接近色彩理论,那么你会发现一种与任何关于色彩真正传授的技术规范截然不同的感知。请记住,任何使用您创建的颜色实用程序的人基本上都会按照这些思路进行思考,至少如果他们在颜色理论方面有扎实的基础教育。这基本上是艺术家如何接近颜色的概念:

从艺术角度来看,颜色基本上以五个平面的比例表示。

  • 颜料(或色调),这是你要追求的实际底色。
  • 色调,是与纯白色混合的色素。
  • 阴影,是与纯黑混合的颜料。
  • 色调(或#34; True Tone"),这是混合了不同程度灰色的颜料。
  • 富含色调(或#34; Earth Tones"),是与其互补色混合的色素。丰富的色调不会出现在色轮上,因为它们本质上是对立面的混合体,并且在视觉上反映出与“真实色调”#34;由于物理媒体中的微小差异,您无法在计算机上有效复制。

以编程方式表示这种范式的典型问题是,没有任何好方法来表示丰富的音调。材料艺术家在使用绘画时基本上没有问题,因为画笔笔划的微妙差异允许补色之间的基础差异反映在构图中。同样,数码摄影和视频都很难接受,但实际的模拟电影并没有像它那样糟糕。它在摄影和视频中的反映比计算机图形更多,因为相机视口中的所有内容的纹理都会吸收它的一部分,但仍然远远低于实际观看相同的东西(这就是为什么你永远不会真的没有大量后期制作的日落的好照片,例如,破坏它的文字外观。然而,计算机并不擅长复制这些差异,因为颜色基本上将解析为RGB像素映射的一致矩阵,其在视觉上看起来是平坦的规则色调。没有准确反映丰富色调的计算色彩空间,因为没有计算方法可以使色彩在空间上以漫反射,非重复随机的方式稍微变化,并且仍然具有单个唯一标识符,并且您不能很好地将它存储为没有唯一标识符的数据。

使用计算机可以做到的最佳近似是创建一种颜色与另一种颜色重叠的扩散,这种扩散不会解析为单个值,您可以将其表示为十六进制代码或单个数据库中的内容柱。即使这样,计算机也会固有地反映出一种统一的模式,其中真正丰富的音调依赖于随机性和非重复的纹理和方差,这是您无需花费太多精力就能在机器上完成的。真正使色彩流行的所有艺术品都依赖于这个原理,并且基本上无法进行计算表示而没有大量的工作来模仿它(这就是为什么我们有Photoshop和Corel Painter,因为他们可以很好地模仿这个东西有一点工作,但代价是执行大量过滤,这对运行时来说效率不高。)

从艺术角度来看,RGB非常接近其他四个特征。我们几乎得到它不会涵盖丰富的音调,我们将不得不破解设计实用程序并将这部分手工混合。然而,RGB编程的根本问题是它想要解析为三维空间(因为它是立方体),并且您试图在二维显示器上呈现它,这使得创建合理的UI变得非常困难直观,因为您无法以任何方式有效地在计算机显示器上有效地表示第3轴的深度,而这种方式对于最终用户来说是直观的。

您还需要考虑以光表示的颜色与以颜料表示的颜色之间的区别。 RGB是表示为光的颜色的表示,并且对应于用于混合光照以表示颜色的主要值,并且使用1:1映射来实现。 CMYK代表色素沉着谱。区别在于,当你以相同的方式混合光线时,你会变成白色,当你以相同的方式混合颜料时,你会变黑。如果您正在编程使用计算机的任何实用程序,那么您正在处理光,因为像素本身就是监视器上发出RGB光波的单个节点。我之所以说CMYK很糟糕的原因,并不是因为它不准确,而是因为当你试图将它表示为光时它不准确就是所有情况都是如此电脑显示器。如果你使用的是实际的油漆,标记,彩色铅笔等,它的效果很好。但是,在屏幕上表示CMYK仍然必须解析为RGB,因为这是计算机显示器的工作方式,所以它在显示方式上总是有点偏差。

不要在巨大的一面切线,因为这是一个编程论坛,你问这个问题是程序员。但是,如果你想要准确,那就有一个独特的"而不是技术"要考虑到你的工作在实现其预期目标方面的有效性,需要考虑的方面,即在大多数计算色彩空间中都不能很好地反映视觉感知。在一天结束时,任何颜色效用的目标是使其在人类对颜色的感知方面看起来正确。 HSL / HSV都惨遭失败。它们很突出,因为它们很容易编码,并且只是出于这个原因。如果您的截止日期很短,则可以接受答案。如果你想要一些真正有用的东西,那么你需要做大量的工作并考虑这些东西,这是你的观众在决定是否要使用你的工具时所考虑的。

一些参考点(我故意避免使用任何技术参考,因为它们只是指计算视角,而不是实际的颜色底层感,你可能已经读过了所有这些) :

Color Theory Wiki

Basic breakdown of hue, tint, tone, and shade

Earth Tones (or rich tones if you prefer)

Basic fundamentals of color schemes