【问题标题】:splitting hue and saturation from an image从图像中分离色调和饱和度
【发布时间】:2020-10-01 20:53:02
【问题描述】:

我遇到了一个函数的两个代码示例 sn-ps,它们声称分解图像并返回仅具有色调、仅饱和度和仅值的图像,具体取决于作为参数传递的颜色。

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

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

从逻辑上讲,例如,当我们只显示饱和度时会发生什么?如果 Hue 是图像的颜色分量,那么返回的图像应该是没有颜色的吧?

【问题讨论】:

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


    【解决方案1】:

    这并不是一个“正确”的问题,它只是您希望如何可视化数据的选择。

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

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

    【讨论】:

    • 如果我改写我的 qs,我基本上是在尝试创建一个函数,我可以在其中输入图像并分解它,这样我就可以返回仅带有 Hue 或只是饱和或只是 Vue。你能提出一个好的方法吗?
    • @Jbd 我在第三段中提出了一种可视化色调的方法。可以通过将其转换为灰度来完成值。但是,我对您想要/期望“刚刚饱和”的图像看起来像什么感到茫然?这就是为什么我说如何可视化它取决于您。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-12-31
    • 1970-01-01
    • 2011-05-17
    • 1970-01-01
    • 1970-01-01
    • 2014-07-05
    • 1970-01-01
    相关资源
    最近更新 更多