【问题标题】:Calculating kurtosis from an image从图像计算峰度
【发布时间】:2019-04-05 03:23:27
【问题描述】:

我有这个代码:

import cv2
from scipy.stats import kurtosis, skew

def main():
    img1 = 'lenna.jpg'
    gray_img = cv2.imread(img1, cv2.IMREAD_GRAYSCALE)

    print(f'Kurtosis: {kurtosis(gray_img)}')

我想计算给定图像的峰度,但是当我运行此代码时,它显示如下:

返回所有这些值是否正确?在我看来,它应该返回一个值,因为当我在 matlab 中运行峰度时,它返回 1.8561

【问题讨论】:

    标签: python python-3.x numpy scipy


    【解决方案1】:

    默认情况下,您在 axis=0 上调用 kurtosis (see docs),但您似乎正试图在整个阵列上运行它。所以你可以试试axis=None

    kurtosis(gray_img, axis=None)
    

    示例

    im = np.random.randint(0,256,(5,5))
    
    >>> im
    array([[104, 125,  26, 194,  47],
           [198,  46, 105,  38, 241],
           [211, 115,  62, 196, 169],
           [ 92, 184, 212, 100, 117],
           [212,  35, 208,  52,   3]])
    
    >>> kurtosis(im)
    array([-1.78890733, -1.32154862, -1.66900354, -1.74522902, -1.30434102])
    
    >>> kurtosis(im, axis=None)
    -1.3968689968948007
    

    [编辑]:从您的 cmets,您正在尝试计算偏度,而不是峰度。为此,请使用:

    from scipy.stats import kurtosis,skew
    skew(gray_img, axis=None)
    

    在 matlab 中,在上面的数组中,您的代码(直接取自您的 cmets)给出:

    im =
    
       104   125    26   194    47
       198    46   105    38   241
       211   115    62   196   169
        92   184   212   100   117
       212    35   208    52     3
    
    >> I2 = im2double(im); 
    >> s=skewness(I2(:))
    
    s =
    
        0.0118
    

    scipy,它给出:

    >>> skew(im,axis=None)
    0.011819746815198935
    

    [编辑#2]:似乎MATLAB 的默认峰度定义是Pearson's,而Scipy 的默认峰度定义是Fisher's。 +1 到scipyMATLAB 更灵活!所以你可以使用:

    kurtosis(im, None, fisher=False)
    

    要获得相同的结果:

    # Scipy:
    >>> kurtosis(im,None, fisher=False)
    1.6031310031051993
    # Matlab:
    >>  s=kurtosis(I2(:))
    
    s =
    
        1.6031
    

    【讨论】:

    • 谢谢,但我仍然从 matlab 得到不同的值,是不是有什么错误?
    • >> I=imread('lenna.jpg'); >> I2 = im2double(I); >> s=kurtosis(I2(:); 我在matlab中是这样运行的
    • 查看我的编辑,您正在尝试获取偏度而不是峰度
    • 查看我的第二次编辑,它再现了与MATLAB 相同的峰度:) 希望对您有所帮助!
    猜你喜欢
    • 2019-04-01
    • 1970-01-01
    • 2014-12-10
    • 2019-05-31
    • 2020-06-21
    • 2020-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多