HSL是否优于HSI和HSV色彩空间?
computer-vision
image-processing
4
0

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

参考资料:
Stack Overflow
收藏
评论
共 6 个回答
高赞 时间 活跃

唯一具有优势并考虑到人类感知的色彩空间是LAB ,从这个意义上来说,欧几里得度量与人类色彩分化相关。

直接取自维基百科:

与RGB和CMYK颜色模型不同,Lab颜色旨在逼近人类视觉。它渴望感知均匀性,其L分量与人类对亮度的感知紧密匹配

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

HSVHSBHSI没有此属性。因此,答案是否定的,就人类的感知而言, HSL并不比HSIHSV “优越”。

如果要接近人类的感知,请尝试LAB颜色空间。

收藏
评论

我想说的是,没有一个比另一个更好,每个只是另一个的数学转换。不同的表示形式可以使图像处理更轻松,以获得您希望的效果。每个人对图像的感知会有所不同,并且使用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/颜色

收藏
评论

Imma在这里花了我两分钱,既是程序员又是在艺术学校获得色彩理论学位的人,然后又继续从事软件工程职业。

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

CMYK非常适合渲染打印内容,因为它可以近似打印机所依赖的颜料。在准确地复制人类对颜色的感知方面也很糟糕(尽管不是因为它本身是不好的,而是因为计算机真的很不擅长在屏幕上显示颜色,而在一分钟内会更多)

RGB是技术中代表的唯一一种色彩实用程序,可以准确有效地反映人的视觉。 LAB本质上只是在引擎盖下解析为RGB。还值得考虑的是,屏幕上的文字像素是RGB的表示形式,这意味着您实际使用的任何其他颜色空间都将在实际显示时解析为RGB。确实,最好是切掉中间人并在几乎每种情况下都使用它。

RGB在编程意义上的问题在于,它在表示上本质上是立方的,而HSL / HSV都在半径内分解,这使得以编程方式创建“色轮”变得更加容易。如果不编写大量代码来处理,RGB很难做到这一点,因为RGB会根据其数据表示形式进行三次解析。但是,RGB可以很好地准确反映人的视觉,它也是监视器组成的实际硬件的基础。

TLDR;如果您想保留色彩,又不介意额外的工作,请始终使用RGB。如果您想推出一个“足够好”的颜色实用程序,并可能在以后查看现场的故障单,而您实际上无能为力,请使用HSL / HSV。如果要进行打印,请使用CMYK,不是因为它很好,而是因为如果不使用它,打印机可能会窒息,即使它会很烂。


顺便说一句,如果您要像艺术家而不是程序员那样对待色彩理论,您会发现与色彩真正赋予的任何技术规范截然不同的理解。请记住,使用您创建的色彩实用程序的任何人基本上都将遵循这些思路,至少如果他们对色彩理论有扎实的基础知识。基本上,这是艺术家处理色彩概念的方式:

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

  • 颜料(或色相),这是您要使用的实际基础颜色。
  • 淡色,是与纯白色混合的颜料。
  • 阴影,是与纯黑色混合的颜料。
  • 色调(或“ True Tone”),是与不同程度的灰色混合的颜料。
  • 丰富的色调(或“地球色调”),是与互补色混合的颜料。丰富的色调不会出现在色轮上,因为它们本质上是相反的混合,并且由于物理介质上的细微差异(您无法在机器上有效复制)而在视觉上与“真实色调”略有不同。

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

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

从艺术的角度来看,RGB非常好地近似了其他四个特征。我们几乎得到了它不会覆盖丰富的色调的信息,我们将不得不破解设计实用程序并将其手工混搭。但是,使用RGB编程的基本问题是它想解析到三维空间(因为它是立方的),并且您试图将其显示在二维显示器上,这使得创建合理的UI变得非常困难。直观,因为您缺乏以任何直观的方式来有效地表示最终用户的能力,无法在计算机监视器上有效地表示第三轴的深度。


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


不要无休止地切线,因为这是一个编程论坛,您以程序员的身份提出了问题。但是,如果您要追求准确性,则有一个明显的“非技术性”方面需要考虑,您的工作将如何有效地实现其期望的目标,即很好地解决视觉感知问题,而视觉感知并不能很好地体现这一点。大多数计算色彩空间。归根结底,任何色彩实用程序的目标都是使色彩看起来更符合人类对色彩的感知。 HSL / HSV都失败了。它们之所以突出,是因为它们易于编码,并且仅出于此原因。如果您的期限很短,则可以接受。如果您想要某种确实可以很好地工作的东西,那么您就需要做繁重的工作并考虑这些内容,这是听众在决定是否要使用您的工具时要考虑的问题。


为您提供一些参考点(我有意避免使用任何技术参考,因为它们仅涉及计算角度,而不是实际的颜色基础理解,并且您可能已经阅读了所有这些内容):

颜色理论维基

色相,色调,色调和阴影的基本分类

大地色调(或您喜欢的丰富色调)

配色方案的基本原理

收藏
评论

哪一个最好取决于您的用途。但是以我的经验,HSL(HLS)在亮度和饱和度之间存在不幸的相互作用。

这是一个将图像亮度降低2的示例。接下来是使用RGB,HLS和HSV的结果:

RGB,HLS,HSV比较

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

该示例是使用colorsys模块进行转换的Python创建的。

收藏
评论

实际上,我不得不说,只要您了解HSV中的饱和度是颜色的纯度,值是该颜色的强度而不是整体的亮度,那么HSV可以更好地解释人的视觉感受。以这张图片为例...
光谱

这是HSL饱和度(左)和HSL亮度(右)的映射...
HSL饱和 在此处输入图片说明
请注意,饱和度是100%,直到您在顶部突然击中白色为止。当查看原始图像时,不会看到此映射。亮度映射也是如此。虽然它是一个更清晰的渐变,但它只能在视觉上进行模糊匹配。将其与下面的HSV饱和度(左)和HSV值(右)进行比较...
HSV饱和度 在此处输入图片说明
在这里,随着颜色变得更白,可以看到饱和度映射下降。同样,可以在原始图像中非常清楚地看到值映射。当查看原始图像的各个颜色通道的映射时,这一点变得更加明显(非黑色区域几乎与值映射完全匹配,但与亮度映射相距甚远)...
红色通道 绿色通道 蓝色通道
根据这些信息,我不得不说HSV更适合处理实际图像(尤其是照片),而HSL可能仅适合于在颜色选择器中选择颜色。

另外,HSV中的值是CMYK中黑色的倒数。

在HSL上使用HSV的另一个论据是,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。

收藏
评论

由于目前尚无公认的答案,并且由于必须进一步研究才能完全理解这一点,因此我将加两分钱。

就像其他人所说的那样,究竟哪种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更好地模拟了对象的照明方式(并因此考虑了您可能需要对机器视觉应用程序中的镜面高光或阴影执行的任何补偿)。




但是,正如您从我链接到的Wikipedia文章的“缺点”部分中的示例中清楚地看到的那样,这两种方法都不是完美的。 “实验室”和其他更正式的(且计算量较大)的颜色模型做得更好。

PS:希望这对某人有帮助。

收藏
评论
新手导航
  • 社区规范
  • 提出问题
  • 进行投票
  • 个人资料
  • 优化问题
  • 回答问题

关于我们

常见问题

内容许可

联系我们

@2020 AskGo
京ICP备20001863号