Pracuję nad projektem, w którym trzeba uzyskać wariancję obrazu. Obecnie biorę 2 podejścia (zarówno pracę, ale są bardzo powolny):Obliczanie wariancji obrazu python sprawnie
- Obliczanie wariancji dla każdego piksela z osobna:
Jest to kod za pomocą numpy, varianceMatrix jest wyjście
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
- Stosując istniejące scipy funkcję:
To scipy funkcja:
from scipy import ndimage
varianceMatrix = ndimage.generic_filter(im, np.var, size = 3)
Funkcja scipy jest szybszy, ale nie tak dużo. Szukam lepszej alternatywy do obliczenia wariancji.
Jakieś pomysły ???
Oto ostatnia linia danych wyjściowych na moim komputerze, pokazująca przyspieszenie: 'duration: sliding: 0.00510311126709 s, looping: 0.955919027328 s'. –