1.什么是峰度?
峰度:峰度是衡量一组数据分布曲线的陡峭程度。定义公式如下,但一般使用时不会使用定义式: 其中μ为均值, σ为标准差, μ4为四阶中心距。实际应用一般使用如下公式: 若峰度大于0,则说明该组数据的分布曲线相较于正态分布更加陡峭;若峰度小于0,则说明该组数据的分布曲线相较于正态分布更加平缓。换言之,峰度越大,则数据在靠近均值的部分分布得越多,在距离均值较远的部分分布得较少。
2.python 如何计算峰度?
import cv2 as cv
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt
import os,time
from functools import wraps
def timeCount(func):
'''
函数耗时计时装饰器
'''
@wraps(func)
def wrapper(*args, **kwargs):
timeA = time.time()
result = func(*args, **kwargs)
print('耗时:{:6.3} 秒, {}'.format(time.time()-timeA, func.__name__))
return result
return wrapper
#1.通过pandas实现
y=[]
s=pd.Series(y) #转为series
print('峰度:',s.kurt())
#2.依据公式手动实现
def GetHist_kurt(hist):
'''
计算灰度直方图峰度方法
等价于pandas:pd.Series(data).kurt()
'''
m4,m2= 0,0
n = len(hist)
avg = np.mean(hist)
Func1 = n*(n+1)*(n-1)/(n-2)/(n-3)
Func2 = 3*(n-1)**2/(n-2)/(n-3)
for i in hist:
m4+=(i-avg)**4
m2+=(i-avg)**2
kurt_Value=Func1*m4/m2**2-Func2
return kurt_Value
#运用
@timeCount
def Hist_Kurt(src,name):
'''
src:原图
name:图片名称
该函数作用:求图像直方图的峰度,判断高亮度的图像被遮挡程度.
'''
if len(src.shape) == 2:
gray = src
else:
gray = cv.cvtColor(src, cv.COLOR_BGR2GRAY)
#获取直方图
hist = cv.calcHist([gray], [0], None, [256], [0,256]).ravel()
x = np.arange(0,256,1)
y = hist[:]
s=pd.Series(y) #list转为series
KurtValue = s.kurt()
plt.plot(x,y,'-',label = 'original values')
plt.xlabel('hist')
plt.ylabel('count')
plt.title('Hist-View')
plt.show()
if abs(255-KurtValue) |