Расчет эксцесса по изображению - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть этот код:

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

Правильно ли возвращать все эти значения? В моих мыслях это якобы возвращает единственное значение, потому что когда я запускаю kurtosis в matlab, он возвращает 1.8561

1 Ответ

0 голосов
/ 01 ноября 2018

Вы вызываете kurtosis на axis=0 по умолчанию ( см. Документы ), но похоже, что вы пытаетесь запустить его для всего массива. Так что вы можете попробовать 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

[Edit # 2] : По-видимому, * * * * * * * * * * * * * * * Scipy по умолчанию Pearson's по умолчанию *1029*. +1 к scipy за то, что он более гибкий, чем MATLAB! Таким образом, вы можете использовать:

kurtosis(im, None, fisher=False)

Чтобы получить те же результаты:

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

s =

    1.6031
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...