Эффективный расчет дисперсии изображения Python
Я работаю над проектом, в котором нужно получить дисперсию изображения. В настоящее время я использую 2 подхода (оба работают, но работают очень медленно):
Вычисление дисперсии для каждого пикселя индивидуально:Это код, использующий NumPy, VarianceMatrix является выходной
varianceMatrix = np.zeros(im.shape,np.uint8)
w = 1 # the radius of pixels neighbors
ny = len(im)
nx = len(im[0])
for i in range(w,nx-w):
for j in range(w,ny-w):
sampleframe = im[j-w:j+w, i-w:i+w]
variance = np.var(sampleframe)
varianceMatrix[j][i] = int(variance)
return varianceMatrix
Используя существующую функцию scipy:Это функция scipy:
from scipy import ndimage
varianceMatrix = ndimage.generic_filter(im, np.var, size = 3)
Функция scipy работает быстрее, но не так сильно. Я ищу лучшую альтернативу для расчета дисперсии.
Есть идеи???