gpt4 book ai didi

python - 从图像计算峰度

转载 作者:行者123 更新时间:2023-11-28 21:34:37 25 4
gpt4 key购买 nike

我有这个代码:

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)}')

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

enter image description here

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

最佳答案

默认情况下,您在 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

[编辑]:根据您的评论,您正在尝试计算偏度,而不是峰度。为此,使用:

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

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

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 的,而 ScipyFisher 的。为 scipy +1,因为它比 MATLAB 更灵活!所以你可以使用:

kurtosis(im, None, fisher=False)

要获得相同的结果:

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

s =

1.6031

关于python - 从图像计算峰度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53092196/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com