HSL优于HSI和HSV吗?

use*_*260 23 colors image-processing computer-vision color-space

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

Mar*_*som 27

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

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

RGB,HLS,HSV比较

请注意HLS中蝴蝶边缘周围过于明亮和饱和的斑点,尤其是底部的红点.这是我所指的饱和问题.

此示例是使用colorsys模块在Python中创建的,用于转换.


Dev*_*hen 20

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

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

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

有关详细信息,请阅读以下内容:




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

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

50到100之间的值映射到必须混合多少"白色"(当L从50增加到100%时,白色从0到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%光线下,它将全部为白色.

因此,在苹果的这个图像中,直接面向光源的点全部是白色的,并且很可能在100%处具有"V"而在底部处完全处于阴影中并且未被光照射的点具有白色.值"0".(我没有检查过这些值,只是认为它们对解释有用).

因此,HSV似乎模拟了物体的点亮方式(因此可以说明您可能必须对机器视觉应用中的镜面反射高光或阴影进行的任何补偿)比HSL更好.




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

PS:希望这有助于某人.


And*_*ein 9

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

直接来自维基百科:

与RGB和CMYK颜色模型不同,Lab颜色设计用于近似人类视觉.它渴望感性均匀性,其L分量与人类对亮度的感知紧密相关

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

HSV,HSBHSI没有这个属性.因此,答案是否定的,HSL不是"优"了HSI,并HSV在人类感知的感觉.

如果你想接近人类的感知,试试LAB色彩空间.

  • 实验室并不是考虑人类感知的唯一色彩空间.还有CIELUV和CIECAM02. (3认同)

tru*_*cks 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


mop*_*syd 7

Imma 在这里投入了我的两分钱,他既是一名程序员,又是一名在进入软件工程职业生涯之前在艺术学校取得色彩理论优异成绩的人。

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

CMYK 非常适合渲染打印内容,因为它近似于打印机所依赖的颜料。它在准确复制人类对颜色的感知方面也很糟糕(虽然不是因为它本身不好,而是因为计算机在屏幕上显示它真的很糟糕。稍后会详细介绍)

RGB 是技术中唯一能准确反映人类视觉的颜色实用程序。LAB 本质上只是在引擎盖下解析为 RGB。还值得考虑的是,屏幕上的文字像素是 RGB 的表示,这意味着您使用的任何其他颜色空间在实际显示时都会被解析回 RGB。真的,最好去掉中间人,并在几乎所有情况下都使用它。

RGB 在编程意义上的问题在于,它在表示上本质上是三次方,而 HSL/HSV 都以半径解析,这使得以编程方式创建“色轮”变得更加容易。RGB 很难在不编写大量代码来处理的情况下做到这一点,因为它在数据表示方面是三次解析的。但是,RGB非常准确地反映了人类的视觉,它也是显示器构成实际硬件的基础。

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


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

从艺术角度来看,颜色基本上是在五个平面的比例尺上表现出来的。

  • 颜料(或色调),这是您要追求的实际基础颜色。
  • 色调,即与纯白色混合的颜料。
  • 色度,就是混合纯黑色的颜料。
  • 色调(或“True Tone”),它是混合了不同程度灰色的颜料。
  • 丰富的色调(或“大地色调”),这是颜料与其互补色混合的。丰富的色调不会出现在色轮上,因为它们本质上是对立面的混合,并且由于物理介质中的微小差异,您无法在机器上有效复制,因此在视觉上与“真实色调”略有不同。

以编程方式表示这种范式的典型问题是实际上没有任何好的方式来表示丰富的色调。材料艺术家用油漆做这件事基本上没有问题,因为笔触的细微差异允许补色之间的潜在差异反映在构图中。同样地,数码摄影和视频都很难捕捉到这一点,但实际的模拟胶片并没有那么糟糕。它更多地反映在摄影和视频中,而不是计算机图形中,因为相机视口中所有事物的纹理都会拾取其中的一部分,但仍然比实际观看同一事物要少得多(这就是为什么你永远不能真正例如,没有大量后期制作来破解它的字面外观的日落的好照片)。然而,计算机不擅长复制这些差异,因为颜色基本上会解析为一致的 RGB 像素映射矩阵,该矩阵在视觉上看起来是平坦的规则色调。没有计算色彩空间可以准确反映丰富的色调,因为没有计算方法可以使颜色在空间上以漫反射、非重复随机方式略有变化,并且仍然具有唯一的唯一标识符,并且您不能很好地将其存储为没有唯一标识符的数据。

您可以用计算机对此进行的最佳近似是创建一种颜色与另一种颜色重叠的某种扩散,这不会解析为您可以表示为单个数据库列中的十六进制代码或内容的单个值。即便如此,计算机也会固有地反映一个统一的模式,其中真正丰富的色调依赖于随机性和不重复的纹理和变化,如果不付出相当大的努力,你就无法在机器上做到这一点。所有真正让色彩流行的艺术作品都依赖于这个原则,如果没有大量的辅助工作来模拟它,计算表示基本上是无法访问的(这就是为什么我们有 Photoshop 和 Corel Painter,因为它们可以很好地模拟这些东西需要做一些工作,但代价是执行大量对运行时效率不高的过滤)。

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


您还需要考虑表示为光的颜色和表示为颜料的颜色之间的区别。RGB 是表示为光的颜色表示,对应于用于混合照明以表示颜色的主要值,并且使用 1:1 映射。CMYK 代表色素沉着光谱。区别在于,等量混合光时,会得到白色,而等量混合颜料时,会得到黑色。如果您正在编写任何使用计算机的实用程序,您就是在使用光,因为像素本质上是显示器上发出 RGB 光波的单个节点。我说 CMYK 糟糕的原因不是因为它不准确,而是因为当您尝试将其表示为光时它不准确,所有计算机显示器都是这种情况. 如果您使用的是实际油漆、记号笔、彩色铅笔等,则效果很好。然而,在屏幕上表示 CMYK 仍然必须解析为 RGB,因为这是计算机显示器的工作方式,所以它在显示中的外观总是有点偏差。


不要在一个巨大的边切线上离开,因为这是一个编程论坛,而您作为程序员提出了这个问题。但是,如果您追求准确性,就您的工作在实现其预期目标方面的有效性而言,需要考虑一个明显的“非技术性”方面,即很好地解决视觉感知问题,这在大多数计算颜色空间。归根结底,任何颜色实用程序的目标都是使其在人类对颜色的感知方面看起来正确。HSL/HSV 在这方面都惨遭失败。它们之所以突出,是因为它们易于编码,并且仅出于这个原因。如果您的截止日期很短,它们是可以接受的答案。如果你想要一些真正有效的东西,那么你需要做繁重的跑腿工作并考虑这些东西,


一些参考点(我故意避免任何技术参考,因为它们只涉及计算角度,而不是对颜色的实际潜在感知,无论如何你可能已经阅读了所有这些):

色彩理论维基

色调、色调、色调和阴影的基本分类

大地色调(或丰富的色调,如果您愿意)

配色方案的基本原理


dyn*_*ael 6

实际上,我必须认为HSV对人类视觉感知更好,只要你明白在HSV中,饱和度是颜色的纯度,而值是该颜色的强度,而不是整体的亮度.以此图片为例,......
光谱

这是HSL饱和度(左)和HSL亮度(右)的映射...
HSL饱和度在此输入图像描述
请注意,饱和度是100%,直到你突然下降到最顶端的白色.在查看原始图像时不会感知到该映射.亮度映射也是如此.虽然它是一个更清晰的渐变,但它只是在视觉上模糊地匹配.将其与下面的HSV饱和度(左)和HSV值(右)进行比较......
HSV饱和度在此输入图像描述
这里可以看到饱和度映射随着颜色变得更白而下降.同样,可以在原始图像中非常清楚地看到值映射.当查看原始图像的各个颜色通道的映射时,这一点变得更加明显(非黑色区域几乎完全匹配值映射,但是远不及亮度映射)...
红色通道绿色通道蓝色通道
根据这些信息,我不得不说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.