Calcular a variação de um python de imagem com eficiência

Estou trabalhando em um projeto no qual precisamos obter a variação de uma imagem. Atualmente, estou adotando duas abordagens (ambas funcionam, mas são muito lentas):

Calculando a variação para cada pixel individualmente:

Este é o código usando numpy, varianceMatrix é a saída

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   
Usando uma função scipy existente:

Esta é a função scipy:

from scipy import ndimage

varianceMatrix = ndimage.generic_filter(im, np.var, size = 3)

A função scipy é mais rápida, mas não tanto. Estou procurando uma alternativa melhor para calcular a variação.

Alguma ideia???

questionAnswers(3)

yourAnswerToTheQuestion