【问题标题】:Is HSL Superior over HSI and HSV Color Spaces?HSL 是否优于 HSI 和 HSV 颜色空间?
【发布时间】:2012-07-08 22:53:16
【问题描述】:

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

【问题讨论】:

  • 我一直以为都有相似的或者Lightness = Brightness = Value = Intensity。根据en.wikipedia.org/wiki/HSL_and_HSV 他们不是,但似乎在转换和使用方面存在混淆。也许那是我的错;)
  • 对于每一个“什么是优越”的问题,立即跟进是:“优越于什么目的?”
  • @SevaAlekseyev - 我的回答有点像我想说的!!!

标签: image-processing colors computer-vision color-space


【解决方案1】:

我既是一名程序员,又是一名在艺术学校取得了色彩理论专业的人,然后才开始明智地从事软件工程事业。

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

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

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

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

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


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

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

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

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

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

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


您还需要考虑表示为光的颜色与表示为颜料的颜色之间的区别。 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

【讨论】:

    【解决方案2】:

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

    这是 HSL 饱和度(左)和 HSL 亮度(右)的映射...

    请注意,饱和度为 100%,直到您碰到顶部突然下降的白色为止。在查看原始图像时不会感知到这种映射。亮度映射也是如此。虽然它是一个更清晰的渐变,但它只是在视觉上模糊地匹配。将其与下面的 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。

    【讨论】:

    • 关于您的第一个点(第一个图像中的渐变不平滑),请参阅:w.wiki/5s4 请注意,您可以生成您的第一个图像,同时完全保持在圆柱体的最右侧(完全饱和)边缘(即图像没有灰度/低饱和点)。所以从完全饱和到0的突然变化是一个编辑器实现细节。更重要的是,如果你看第一张图,我认为 HSL 映射没有显示饱和度梯度实际上是正确;图像没有灰色,因此 HSL 显示只有亮度从下到上变化,在我看来是正确的!
    【解决方案3】:

    由于还没有公认的答案,而且我必须进一步研究才能完全理解这一点,所以我会加两分钱。

    正如其他人所说,关于 HSL 或 HSV 哪个更好的答案取决于您尝试建模和操作的内容。

    tl;dr - HSV 仅在机器视觉方面“优于” HSL(注意事项,请阅读下文)。 “实验室”和其他正式的颜色模型要准确得多(但计算成本高),应该真正用于更严肃的工作。 HSL 更适合“绘制”应用程序或任何其他需要人工“设置”、“输入”或以其他方式理解/理解颜色值的应用程序。

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




    如果您尝试对颜色的生成方式进行建模,最直观的模型是 HSL,因为它几乎直接映射到您如何混合颜料来创建颜色。例如,要创建“深”黄色,您可以将基础黄色涂料与一点黑色混合。而要创建较浅的黄色阴影,您需要混合一点白色。

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

    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% 光下,一切都是白色的。

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

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




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

    P.S:希望这对某人有所帮助。

    【讨论】:

    • 谢谢,我在 hsv 和 hsl 之间选择一个颜色选择工具,这真的很有用。
    • 苹果是白色的,因为曝光过度。使用更强大的传感器,苹果会保持红色。
    • 但是您关于 HSV 如何更好地建模对象的照明方式的观点仍然有效。有人告诉我,由于这个原因,HSV 对摄影师更有用。
    • Posfan12,苹果上的红色区域是由于漫反射造成的。白点是由于苹果蜡质和光滑表面的镜面反射造成的。即使传感器没有过度曝光,苹果在该点也会显示为白色,因为光源可能会产生白光。
    • 我喜欢你的回答。我同意如果人类试图选择颜色,HSL 会更直观。你从色相(哪种颜色)开始。然后选择饱和度(强度)。然后调整亮度使其更亮或更暗。使用 HSB/HSV,您可以选择色调。但是饱和度和亮度之间有很多相互作用。挑选颜色不直观。正如 Mark 在另一个答案中的示例所示,HSB/HSV 可能更适合图像处理/计算机视觉。
    【解决方案4】:

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

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

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

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

    【讨论】:

    • 如何使用 RGB 降低亮度?您是否将 R、G 和 B 的强度降低了某个百分比?
    • @posfan12 对于此示例,它是一个简单的除以 2,在数学上与乘以 0.5 相同。您可以将 RGB 乘以任何常数,小于 1.0 会使其更暗,而更大会使其更亮。
    • 这是一个很好的例子,谢谢。 “根据我的经验,HSL (HLS) 在亮度和饱和度之间有一种不幸的相互作用。”这有点好笑,因为我使用 HSV/HSB 来挑选颜色,而且我也有同样的评论,即 HSB 在亮度和饱和度之间有太多的交互。我发现 HSL 在选择颜色时更容易分离饱和度和亮度。所以你是对的,这取决于你用它做什么。
    • 但这不只是 HSL 的情况吗?由于我们存储为 RGB,要转换为 HSL,我们必须根据有时很小的 RGB 差异“提取”饱和度,例如。要将 rgb 存储的 255,250,250 像素 (#1) 转换为 HSL,我们必须提取/猜测未保留在文件中的饱和度值(颜色 #1 可以由一系列 HSL 饱和度产生)。这有时会产生过高的饱和度——减半时会显示出来。如果存储为 HSL,我们将保留原始的“真实”饱和度,并且不会出现问题。 IE。 HSV 之所以能避免问题,只是因为它更接近当前的存储标准 RGB。
    • @Venryx 不,这是 HSL 和 HSV 定义中固有的问题。它们都是我们如何感知颜色的近似值,因为我们的眼睛/大脑如何区分没有物理模型。没有办法获得“真正的”饱和度。因此,最佳近似值确实取决于您的预期用途。
    【解决方案5】:

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

    直接取自维基百科:

    与 RGB 和 CMYK 颜色模型不同,Lab 颜色旨在 近似人类视觉。它渴望感知上的一致性,并且它的 L 分量与人类对亮度的感知非常匹配

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

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

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

    【讨论】:

    • 我不得不承认,在这种情况下,我不同意维基百科在您引用的声明中的观点。 RGB 传感器之所以成为今天的样子,是因为人类对绿色的自然敏感性高于光谱中的其他颜色。今天的颜色传感器仅在 RGB 中起作用,因此所有其他颜色模型都只是 RGB 的数学表示。即使是 CMYK(用于许多打印机)也会出现色彩再现错误,因为它首先必须经过转换!
    • @trumpetlicks,当然 LAB 是 RGB 的不同数学表示,但它更好,因为它很好地接近人类视觉,因为 LAB 中两点之间的距离与人类感知相关。而且与色彩还原误差无关。
    • @trumpetlicks,很多计算机视觉算法(可以承受 RGB->LAB 变换的代价),出于上述原因使用它。
    • 即便如此,图像开始为 RGB(来自成像仪),最终将在屏幕上显示为 RGB。所做的只是将其转换为以某种方式对其进行操作,然后将其转换回RGB。并不是说这对于他正在寻找的操纵可能是最好的。空间本身没有复制错误,很可能会转换为,而转换出(因为它必须转换为显示器的 RGB 或打印机的 CMYK)最有可能。不过 LAB 是一个不错的选择 :-)
    • Lab 并不是唯一考虑人类感知的色彩空间。还有CIELUV和CIECAM02。
    【解决方案6】:

    我会说一个并不比另一个好,每个都只是另一个的数学转换。不同的表示可以使您想要的效果更容易处理图像。每个人对图像的感知都会略有不同,使用 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

    【讨论】:

    • 当然,所有系统都试图与人类感知相关联。问题是他们做得如何。 LAB 色彩空间是唯一通过现实生活实验近似的(参见 McAdam 椭圆)。因此,它优于 RGB、HSV、HSI...,因为它与人类的颜色感知有很好的相关性。
    • 不确定我是否完全同意它是唯一的。如果您查看为什么传感器使用 RGB,它部分是工程设计(以及我们更容易过滤 RGB 中的颜色的能力),而且还因为我们的杆和锥体对色谱的响应位置。它也通过实验得到了验证。顺便说一句,我确实同意这一点。案例,您对 LAB 的建议是一个很好的建议 :-) 的确,我认为您的回答和我的回答都是有效的。
    • Munsell 系统也“通过现实生活实验进行了近似”。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-06-29
    • 1970-01-01
    • 2011-03-26
    • 1970-01-01
    • 2011-02-04
    • 2014-09-04
    • 2013-07-29
    相关资源
    最近更新 更多