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

2019-10-10 10:21:03 +08:00
 Alives

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

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

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

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

3676 次点击
所在节点    算法
12 条回复
Muniesa
2019-10-10 10:35:01 +08:00
没懂什么意思,超出范围了这个颜色在 hsv 里不就不存在了吗
blindie
2019-10-10 10:35:28 +08:00
我以前做 cubic 插值,出的值是可能超范围的,行业里一般抹平就可以。
饱和度定义就是 0-100%。你这个也超域了。最简单就抹平。如果你有做 hdr 之类的需求那另说,可以保留超域的数值,仅在显示的时候抹平。
blindie
2019-10-10 10:36:19 +08:00
抹平就是超过最大值的设为最大值,小于最小值的设为最小值
Alives
2019-10-10 10:46:30 +08:00
@Muniesa 理论上是的,但是 Photoshop 有个机制,如果超出了打印色域,会更改 Hue 转化成可打印色,并且前后肉眼可见差别不大,大佬可以试试。PS 给出的是 HSV(354, 100, 68) => HSV(358, 81, 64)。
Alives
2019-10-10 10:54:46 +08:00
@blindie 感谢回复,抹平的话有个问题就是没有颜色层次感了,我想自己做个东西,就是根据一张彩色图提取其中红色的深浅图,目前也就想出来一种实现方法,就是给定一个最浅的红色值 minRed,然后根据一个标量和 minRed 来计算相应的颜色,于是使用了 HSV 颜色模型,这样起码都是红色色域,但是根据标量计算的时候有些饱和度超出了 100%
Alives
2019-10-10 10:56:11 +08:00
@blindie 标量目前想了两种方法,一种是分离 RGB 通道,根据 R 通道的灰度去做,一种是归一化,取 R 值,不知道大佬有没有别的处理方法
ldm0
2019-10-10 11:02:57 +08:00
@Alives
是不是先映射到其它色彩空间上然后抹平然后再映射回来。
maplerecall
2019-10-10 11:20:11 +08:00
肉眼差距不大是因为非广色域显示器根本显示不出超过 srgb 范围的颜色,硬件上被抹平了,如果使用更高的目标色域比如 dci p3 和 adobe rgb,并且硬件支持,那是可以显示目标颜色的。不过这也很奇怪,按照标准 rgb 转 hue 不应该出现这种色域差距这么多的情况,是不是转的方法有问题…
Alives
2019-10-10 11:28:21 +08:00
@maplerecall 感谢回复,大佬说的更广色域上根据 PS 的转换确实是可以看到差距,但是并不影响在结果中有层次的显示,可以看看第一条附言的问题背景描述,不知道大佬对这种需求有没有其他的可行方法?
blindie
2019-10-10 12:09:43 +08:00
@Alives #5 你目标是颜色层次感的话那就是要做一次色彩映射 就把原图的 minmax 映射到 0-100
blindie
2019-10-10 12:13:13 +08:00
@Alives #6 你这个标量是做什么的我没理解 能说详细点吗
Alives
2019-10-10 13:06:09 +08:00
@blindie 补充在第二条附言里了,请大佬查看🥳。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/607750

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX