[SciPy-User] moving window (2D) correlation coefficient

Vincent Schut schut@sarvision...
Wed Feb 10 09:45:41 CST 2010


I need to calculate the correlation coefficient of a (simultaneously) 
moving window over 2 images, such that the resulting pixel x,y (center 
of the window) is the corrcoef((a 5x5 window around x,y for image A), (a 
5x5 window around x,y for image B)).
Currently, I just loop over y, x, and then call corrcoef for each x,y 
window. Would there be a better way, other than converting the loop to 

For clarity (or not), the relevant part from my code:

for y in range(d500shape[2]):
     for x in range(d500shape[3]):
         if valid500[d,y,x]:
             window = spectral500Bordered[d,:,y:y+5, x:x+5].reshape(7, -1)
             for b in range(5):
                 nonzeroMask = (window[0] > 0)
                 b01corr[0,b,y,x] = 
numpy.corrcoef(window[0][nonzeroMask], window[b+2][nonzeroMask])[0,1]
                 b01corr[1,b,y,x] = 
numpy.corrcoef(window[1][nonzeroMask], window[b+2][nonzeroMask])[0,1]

forget the 'if valid500' and 'nonzeroMask', those are to prevent 
calculating pixels that don't need to be calculated, and to feed only 
valid pixels from the window into corrcoef
spectral500Bordered is essentially a [d dates, 7 images, ysize, xsize] 
array. I work per date (d), then calculate the corrcoef for images[0] 
versus images[2:], and for images[1] versus images[2:]


More information about the SciPy-User mailing list