V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Alives
V2EX  ›  算法

请教哪位大佬知道 HSV(HSB)颜色模型如果某个量值超出了上限如何转化

  •  1
     
  •   Alives · 2019-10-10 10:21:03 +08:00 · 3816 次点击
    这是一个创建于 1862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    HSV(HSB)颜色模型如果某个量值超出了上限如何转化,举个🌰:

    一个 HSV 是(351, 120, 60), saturation 超出范围了(0-100),这样如何转换成正常的 HSV 范围。

    希望有大佬说下算法或者指条方向🙏。

    因为 V 站没有图像处理的节点,只能发在这里了。。。

    第 1 条附言  ·  2019-10-10 11:02:55 +08:00

    补充一下这个问题的背景,最近想做个东西,根据一张彩色图提取其中红色的深浅图,目前也就想出来一种实现方法,就是给定一个最浅的红色值 minRed,然后根据一个 标量minRed 来计算相应的颜色,于是使用了 HSV 颜色模型,这样起码都是红色色域,但是根据标量计算的时候仅仅更改饱和度和亮度会导致这两个值会超出100%...

    标量目前想了两种方法,一种是分离 RGB 通道,根据 R 通道的灰度去做;一种是归一化,取 R 值,不知道大佬有没有别的处理方法

    第 2 条附言  ·  2019-10-10 11:13:19 +08:00
    关于例子中色域不存在的疑问补充一下:
    在 Photoshop 有个机制,如果超出了打印色域,会更改 Hue, Saturation,Value(Brightness) 转化成可打印色,并且前后肉眼可见差别不大,所以才觉着既然打印色域可以这么转,HSV 应该也有相应近似的算法,所以来请教下大佬们。
    ep: PS 给出的是 HSV(354, 100, 68) => HSV(358, 81, 64)
    12 条回复    2019-10-10 13:06:09 +08:00
    Muniesa
        1
    Muniesa  
       2019-10-10 10:35:01 +08:00
    没懂什么意思,超出范围了这个颜色在 hsv 里不就不存在了吗
    blindie
        2
    blindie  
       2019-10-10 10:35:28 +08:00
    我以前做 cubic 插值,出的值是可能超范围的,行业里一般抹平就可以。
    饱和度定义就是 0-100%。你这个也超域了。最简单就抹平。如果你有做 hdr 之类的需求那另说,可以保留超域的数值,仅在显示的时候抹平。
    blindie
        3
    blindie  
       2019-10-10 10:36:19 +08:00
    抹平就是超过最大值的设为最大值,小于最小值的设为最小值
    Alives
        4
    Alives  
    OP
       2019-10-10 10:46:30 +08:00
    @Muniesa 理论上是的,但是 Photoshop 有个机制,如果超出了打印色域,会更改 Hue 转化成可打印色,并且前后肉眼可见差别不大,大佬可以试试。PS 给出的是 HSV(354, 100, 68) => HSV(358, 81, 64)。
    Alives
        5
    Alives  
    OP
       2019-10-10 10:54:46 +08:00
    @blindie 感谢回复,抹平的话有个问题就是没有颜色层次感了,我想自己做个东西,就是根据一张彩色图提取其中红色的深浅图,目前也就想出来一种实现方法,就是给定一个最浅的红色值 minRed,然后根据一个标量和 minRed 来计算相应的颜色,于是使用了 HSV 颜色模型,这样起码都是红色色域,但是根据标量计算的时候有些饱和度超出了 100%
    Alives
        6
    Alives  
    OP
       2019-10-10 10:56:11 +08:00
    @blindie 标量目前想了两种方法,一种是分离 RGB 通道,根据 R 通道的灰度去做,一种是归一化,取 R 值,不知道大佬有没有别的处理方法
    ldm0
        7
    ldm0  
       2019-10-10 11:02:57 +08:00
    @Alives
    是不是先映射到其它色彩空间上然后抹平然后再映射回来。
    maplerecall
        8
    maplerecall  
       2019-10-10 11:20:11 +08:00 via Android
    肉眼差距不大是因为非广色域显示器根本显示不出超过 srgb 范围的颜色,硬件上被抹平了,如果使用更高的目标色域比如 dci p3 和 adobe rgb,并且硬件支持,那是可以显示目标颜色的。不过这也很奇怪,按照标准 rgb 转 hue 不应该出现这种色域差距这么多的情况,是不是转的方法有问题…
    Alives
        9
    Alives  
    OP
       2019-10-10 11:28:21 +08:00
    @maplerecall 感谢回复,大佬说的更广色域上根据 PS 的转换确实是可以看到差距,但是并不影响在结果中有层次的显示,可以看看第一条附言的问题背景描述,不知道大佬对这种需求有没有其他的可行方法?
    blindie
        10
    blindie  
       2019-10-10 12:09:43 +08:00 via Android
    @Alives #5 你目标是颜色层次感的话那就是要做一次色彩映射 就把原图的 minmax 映射到 0-100
    blindie
        11
    blindie  
       2019-10-10 12:13:13 +08:00 via Android
    @Alives #6 你这个标量是做什么的我没理解 能说详细点吗
    Alives
        12
    Alives  
    OP
       2019-10-10 13:06:09 +08:00 via iPhone
    @blindie 补充在第二条附言里了,请大佬查看🥳。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1406 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 23:40 · PVG 07:40 · LAX 15:40 · JFK 18:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.