分解图像的色相和饱和度

问题描述

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

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[:,1] = 0

    return out

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

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

解决方法

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

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

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

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...