【问题标题】:Why Microsoft rescaled their HSL ranges to [0-240]?为什么 Microsoft 将其 HSL 范围重新调整为 [0-240]?
【发布时间】:2021-09-28 04:48:12
【问题描述】:

我在大学学习数字图像处理,现在我们正在做一项工作,我们必须将 RGB 值转换为 HSL,它必须等于 Microsoft Paint。完成实现后发现它不等于Paint,搜索发现他们没有使用[0-360]范围,作为通常的实现方式,而是[0-240]范围。

Source

但即使阅读它,我也不知道为什么要这样做。

【问题讨论】:

  • 因为一个字节(按照惯例)具有从 0 到 255 的值,并且在任何情况下只有 256 个值。将字节用于图像(对于每个通道)是内存效率高的。否则你将不得不使用双内存(两个字节,直到 65535 的值)。
  • 并非没有先例。 OpenCV 将色调缩放到 0..180 的范围,360 度圆的分辨率为 2 度。实际上,考虑到日期,这可能不是先例——有人知道 “precedent” 的反义词吗?后续?
  • 您不能在一个字节中存储大于 255 的值,因此必须重新缩放(存储在两个字节上将是不可接受的浪费)。
  • @PeterO。它确实回答了我的问题,但我认为 Giacomo 的答案更加完整,所以我应该将我的问题标记为重复,还是不? (我是新来的,所以我还不知道一切)

标签: image-processing colors hsl


【解决方案1】:

有几个原因。

我们真的更喜欢只有 256 个值的范围。在这种情况下,我们可以将数据存储在一个字节中。我们可能会使用两个字节,但是我们将使用双倍的内存。或者只是使用超过 8 位,但是我们必须在做任何有趣的事情之前对每个像素进行位操作,所以效率非常低。注意:对于两个字节,我们可以使用半浮点数,这在某些情况下非常有用,但浮点数在各种计算上也效率低下(但你可以使用过滤器和图层组合)。

问题中包含的链接中说明了第二个原因,但它可能需要更多信息:在许多格式(尤其是视频或电视)中,我们的范围有限(不是 0 到 255,而是 16 到235 或 16 至 240)。有几个原因:模拟信号的黑比黑多(这可能是不可能的),白比白多(现实的)。我们刚刚校准了电视,以便定义白点和黑点(并且可能广播公司会过滤掉低于黑色的点。出于某些原因,这很有用(转换模拟数据,白色多于白色是我们经常体验的颜色)。随着数字化,电视需要模数转换器(反之亦然)。这些转换器成本(以及更多位:更多成本),我们已经使用“可见颜色”范围之外的数据(在模拟信号中)出于其他原因,外部颜色。因此,要根据数据类型(或转换器上的更多位)进行不同的转换,我们只是保持有限的范围)。

对于每个颜色操作,都应该检查范围(以及颜色空间的定义)。量化可能也是个问题(很多专业软件使用浮点数,所以我们对范围的限制较少(但浮点数还有其他原因,例如在线性空间工作时的精度和效率[没有伽马校正])。注意:您应该只关心与最大值的比值。角度有各种测量值:360 度、400 度或 2 Pi(最常见的,有时,尤其是在过去,您可能会写成十进制度(或其他因素,例如3600、36000 或 21600 [度数分钟])。用户界面可能只是显示不同的约定(对用户来说更方便)。

更复杂的是,HSL 转换并不是那么精确,如果您想要精确的 H、S 和 L(更严格的定义),只需一个快捷方式即可。

【讨论】:

  • 您应该将此答案添加到重复的问题中:stackoverflow.com/questions/1290190/…
  • 我还应该指出,该约定至少可以追溯到 Windows 3.1 或更早版本,当时系统的“颜色”对话框的色调范围高达 240。
【解决方案2】:

简答

色调为 240 的原因只是关于使用单个 int(8 位整数)作为值,这是过去时代的残余。

更长的答案

关于公认的答案:它与数字视频代码值无关,与 AtoD 转换器无关,也与视频范围的其他 cmet 无关,等等。

使用 240 值而不是 360 值的色调可以追溯到计算机没有数学协处理器的时候(即可能在 OP 诞生之前,考虑到他现在在大学,但我和自己约会 LOL)时间>。如果没有数学协处理器,在浮点中做任何事情都是一个重大的性能瓶颈。此外,低 CPU 速度、有限的 RAM 等等……当时为了提高效率做了很多工作,而今天可能没有意义。

请记住,我们谈论的是在 几十年 之前,有可能将一台手持电脑连接到世界上所有的知识,而这也恰好可以兼作电话、相机、地图与您当前的位置,音乐播放器、语音到文本翻译器、视频制作系统和亮度可调手电筒......

哈哈 ?

早在 80 年代末/90 年代初,8 位整数数学几乎是所有事情的完成方式,而走出 8 位整数区域是......是上坡......双向!! ....

将 360 减少到 240 使该值保持在 8 位,并具有正好是 360 的 2/3 的优势。

由于 RGB 显示器中有三个基色,因此 HSL 会相应地分解。如果您将 sRGB 视为一个“立方体”,一个角为黑色,一个角为白色,那么您有 6 个角作为完全饱和度的最大值,例如红色的 #f00 和浅绿色的 #0ff。

HSL 不是一个感知统一的颜色模型——它只是一种让用户“直观”地进行颜色调整的低技术方法。

旁注

颜色(色调)不作为“角度”存在。颜色实际上并不真实,只是可见光的波长,从长于 700nm(红色)到短于 400nm(蓝色)。颜色的感觉只是一种感知;您的神经系统的功能。

尽管如此,将它们编码成一个圆圈使其相当直观。因此,在任何将颜色值定义为角度的应用中,这纯粹是一种方便的构造。

说到方便,我连接世界所有知识的手持电脑正在向我发出哔哔声,提醒我该喂我的猫了。 它甚至不像我们在 80 年代那样发出哔哔声。这是一种立体声竖琴声,背景中有一些管状铃铛......

编辑添加:

“双向上坡”是一个在美国很常见的老人笑话,而且我发现自己在我这个年纪越来越频繁地开玩笑,哈哈……我不知道怎么做好吧,它转化为欧盟是诚实的......

【讨论】:

    猜你喜欢
    • 2021-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    • 1970-01-01
    相关资源
    最近更新 更多