【问题标题】:What does "FutureWarning: The behavior of rgb2gray will change in scikit-image 0.19" actually mean?“FutureWarning: The behavior of rgb2gray will change in scikit-image 0.19”究竟是什么意思?
【发布时间】:2021-10-02 05:13:00
【问题描述】:

我正在运行代码,并收到以下消息:

FutureWarning:rgb2gray 的行为将在 scikit-image 0.19 中发生变化。目前, rgb2gray 允许将 2D 灰度图像作为输入传递,而将它们作为输出保持不变。从 0.19 版本开始,二维数组将被视为具有 3 个通道的一维图像。

我不明白最后一句话:“2D 数组将被视为具有 3 个通道的 1D 图像”。你能举个例子吗?而且,这不会影响我在这个数组上做的数学运算吗?

【问题讨论】:

    标签: python scikit-image


    【解决方案1】:

    我想,在某些 1D 图像上调用 skimage.color.rgb2gray 应该会揭示发生了什么(将来输入 2D 图像时):

    from numpy import arange, uint8
    from skimage.color import rgb2gray
    
    # 2D input
    gray = (252 + arange(2 ** 2))[::-1].astype(uint8).reshape((2, 2))
    print(gray)
    # [[255 254]
    #  [253 252]]
    print(rgb2gray(gray))
    # [[255 254]
    #  [253 252]]
    
    # 1D input
    gray = gray.flatten()
    print(gray)
    # [255 254 253 252]
    print(rgb2gray(gray))
    # 0.9966290196078431
    print((0.2125 * gray[0] + 0.7154 * gray[1] + 0.0721 * gray[2]) / 255)
    # 0.9966290196078431
    

    基本上,(扁平化)输入的前三个值将被假定为单个 RGB 元组,因此用于计算该(假定)RGB 元组的亮度。

    而第一个 rgb2gray 调用给出了已经声明的警告

    FutureWarning:rgb2gray 的行为将在 scikit-image 0.19 中发生变化。目前, rgb2gray 允许将 2D 灰度图像作为输入传递,并且将它们作为输出保持不变。从 0.19 版本开始,二维数组将被视为具有 3 个通道的一维图像。

    第二个rgb2gray 调用产生另一个警告:

    FutureWarning:非 RGB 图像转换现已弃用。对于 RGBA 图像,请改用 rgb2gray(rgba2rgb(rgb))。在 0.19 版本中,如果输入图像最后一维长度不是 3,则会引发 ValueError。

    所以,看看如何准确地处理 2D 图像会很有趣——以防止引发第二个警告中提到的ValueError

    在应用rgb2gray 中提到的更改后,关于向后兼容性的skimage GitHub 问题跟踪器有几个讨论。是的,当您在输入一些灰度图像时依赖 rgb2gray 的“旧”输出时,您会遇到差异。

    ----------------------------------------
    System information
    ----------------------------------------
    Platform:      Windows-10-10.0.16299-SP0
    Python:        3.9.1
    PyCharm:       2021.1.1
    NumPy:         1.20.2
    scikit-image:  0.18.1
    ----------------------------------------
    

    【讨论】:

      【解决方案2】:

      虽然@HansHirse 已经非常详细地回答了这个问题,但我想我只是添加一个可行的二维数组示例,0.19 中的新 rgb2gray 方法可能会期望和处理:

      A = [[r0, g0, b0],[r1, g1, b1],.....[rn, gn, bn]]
      

      导致

      A_gray=[l0, l1, ..., ln]
      

      在哪里li = 0.2125 ri + 0.7154 gi + 0.0721 bi

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-03-12
        • 2014-10-29
        • 2016-01-27
        • 2014-12-05
        • 1970-01-01
        • 1970-01-01
        • 2022-12-12
        相关资源
        最近更新 更多