分解图像的色相和饱和度

时间:2020-10-01 20:53:02

标签: python machine-learning computer-vision rgb hsv

我遇到了一个函数的两个代码示例片段,这些片段声称分解图像并返回仅具有色相,饱和度和正确值的图像,具体取决于将什么颜色作为参数传递。

def break_down(image, channel):

    hsv = color.rgb2hsv(image)

    if (channel == "H"):
        out = hsv[:, :, 0].copy()
    if (channel == "S"):
        out = hsv[:, :, 1].copy()
    if (channel == "V"):
        out = hsv[:, :, 2].copy()

    return out
def break_down(image, channel):

    hsv = color.rgb2hsv(image)

    out = hsv.copy()
    if (channel == "H"):
        out[:, :, 1] = 0
        out[:, :, 2] = 0
    if (channel == "S"):
        out[:, :, 0] = 0
        out[:, :, 2] = 0
    if (channel == "V"):
        out[:, :, 0] = 0
        out[:, :, 1] = 0

    return out

第一个输出为彩色图像(红色/绿色/蓝色)。但是,第二个以黑色/白色/灰色阴影给出输出。我无法理解哪个是正确的代码。可能它们都不准确。

从逻辑上讲,例如当我们仅显示饱和时会发生什么?如果色相是图像的颜色成分,那么返回的图像应该没有颜色,对吗?

1 个答案:

答案 0 :(得分:0)

这实际上不是一个“正确”的问题,它只是您要如何可视化数据的一种选择。

饱和度是[0,1]值,表示颜色与灰色的距离。您可以将[0,1]值可视化为灰度图像,原始图像较灰暗的地方将变暗,而原始图像具有高度饱和的颜色则将变白。这是有用的可视化吗?由您决定。

也许您会发现更直观的方法是通过将S和V强制为1并将图像转换回RGB以显示来可视化H。这样可以显示每个像素的纯色(饱和度和值均为100%)。然后,您可以通过将V强制为1并转换回RGB来一起可视化H,S。这样可以显示每个像素的色相和饱和度(即色度)。如果将其与色相可视化进行比较,则可以开始了解饱和度的含义。