Trying to understand masking
The ndimage filters do not respect masked arrays' masks. Instead, "mask" an ordinary NumPy array with nan
values, and then use ndimage.generic_filter
to call np.nanmedian
:
import scipy.ndimage as ndiimport matplotlib.pyplot as pltimport numpy as npnp.random.seed(seed=182)# h, w = 901, 877h, w = 10, 10mask = np.random.randint(2, size=(h, w))img = np.random.rand(h, w)img_masked = np.where(mask, img, np.nan)size = 3img_masked_median = ndi.generic_filter(img_masked, np.nanmedian, size=size)img_unmasked_median = ndi.median_filter(img, size=size)fig, ax = plt.subplots(nrows=2, ncols=2)ax[0,0].imshow(img)ax[0,0].set_title('img')ax[0,1].imshow(img_masked)ax[0,1].set_title('img_masked')ax[1,0].imshow(img_unmasked_median)ax[1,0].set_title('img_unmasked_median')ax[1,1].imshow(img_masked_median)ax[1,1].set_title('img_masked_median')plt.show()