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??

Antworten auf die Frage(6)

Ihre Antwort auf die Frage