如何绘制图像的色调分量
how to draw hue component of an image
我提取了图像的色相分量并需要对其进行渲染。色调是 angular 值范围 [0° - 360°],使用最小-最大归一化将其归一化为 [0 - 255] 是不合理的,如下所示:
值 = (色调 - 0) * 255 / (360 - 0)
知道如何将色调值标准化为 [0 - 255] 吗?
谢谢!
给定输入范围 [inp_min - inp_max] 和输出范围 [out_min - out_max] 从一个范围标准化到另一个范围的常用方法是采用
out = (inp - inp_min) / (inp_max - inp_min) * (out_max - out_min) + out_min
所以,使用:
值 = (色调-0) / (360-0) * (255-0) + 0
或者更简单地说:
值 = 色调 * 255 / 360
编辑
所以从下面的评论中,我现在明白了这个问题。真正要问的是如何将色调值转换为 RGB 三元组。使用 wikipedia page on HSL/HSV 作为参考:
h' = hue/60
x = (1 - |(h' mod 2) - 1|) * 255
if (h'<=1) RGB = (255, x, 0)
否则如果 (h'<=2) RGB = (x, 255, 0)
否则如果 (h'<=3) RGB = (0, 255, x)
否则如果 (h'<=4) RGB = (0, x, 255)
否则如果 (h'<=5) RGB = (x, 0, 255)
否则 RGB = (255, 0, x)
这本质上是S = 100%, L=50%的HSL计算
当然最简单的方法,如果你不需要自己计算,就是用this website.
之类的东西
我假设您从 RGB 开始,然后转换为 HSV 以获得 H 值。
显示此 H 值的最简单方法是为 S(最大饱和度)分配一个大值,为 V(不是最大强度,因为这会导致白色)分配一个中等值,然后应用逆变换 (HSV到 RGB)。这会产生具有 H 颜色表示的 RGB 图像。
通过使用逆变换(我假设它来自您用于 RGB 到 HSV 变换的同一个库),您确保使用相同的 H 定义。我见过许多不同的 HSV 定义(以及 HSI、HSL、ISH 等)——似乎每个人都使用自己的定义。
我提取了图像的色相分量并需要对其进行渲染。色调是 angular 值范围 [0° - 360°],使用最小-最大归一化将其归一化为 [0 - 255] 是不合理的,如下所示: 值 = (色调 - 0) * 255 / (360 - 0)
知道如何将色调值标准化为 [0 - 255] 吗? 谢谢!
给定输入范围 [inp_min - inp_max] 和输出范围 [out_min - out_max] 从一个范围标准化到另一个范围的常用方法是采用 out = (inp - inp_min) / (inp_max - inp_min) * (out_max - out_min) + out_min
所以,使用: 值 = (色调-0) / (360-0) * (255-0) + 0
或者更简单地说: 值 = 色调 * 255 / 360
编辑
所以从下面的评论中,我现在明白了这个问题。真正要问的是如何将色调值转换为 RGB 三元组。使用 wikipedia page on HSL/HSV 作为参考:
h' = hue/60
x = (1 - |(h' mod 2) - 1|) * 255
if (h'<=1) RGB = (255, x, 0)
否则如果 (h'<=2) RGB = (x, 255, 0)
否则如果 (h'<=3) RGB = (0, 255, x)
否则如果 (h'<=4) RGB = (0, x, 255)
否则如果 (h'<=5) RGB = (x, 0, 255)
否则 RGB = (255, 0, x)
这本质上是S = 100%, L=50%的HSL计算
当然最简单的方法,如果你不需要自己计算,就是用this website.
之类的东西我假设您从 RGB 开始,然后转换为 HSV 以获得 H 值。
显示此 H 值的最简单方法是为 S(最大饱和度)分配一个大值,为 V(不是最大强度,因为这会导致白色)分配一个中等值,然后应用逆变换 (HSV到 RGB)。这会产生具有 H 颜色表示的 RGB 图像。
通过使用逆变换(我假设它来自您用于 RGB 到 HSV 变换的同一个库),您确保使用相同的 H 定义。我见过许多不同的 HSV 定义(以及 HSI、HSL、ISH 等)——似乎每个人都使用自己的定义。