Varianz eines Bildpythons effizient berechnen
Ich arbeite an einem Projekt, in dem die Varianz eines Bildes ermittelt werden soll. Momentan gehe ich zwei Ansätze an (beide funktionieren, sind aber sehr langsam):
Berechnen Sie die Varianz für jedes Pixel einzeln:Dies ist der Code mit numpy, Varianzmatrix ist die Ausgabe
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
Verwenden einer vorhandenen Scipy-Funktion:Dies ist die Scipy-Funktion:
from scipy import ndimage
varianceMatrix = ndimage.generic_filter(im, np.var, size = 3)
Die Scipy-Funktion ist schneller, aber nicht so sehr. Ich suche eine bessere Alternative, um die Varianz zu berechnen.
Irgendwelche Ideen??