Учитывая двумерный массив и логическую маску, я хочу применить медианный фильтр к массиву, в котором обрабатываются только значения, указанные маской.
Запись этого с использованием итерации python очень медленная, чтобыть ожидаемым.Я попытался использовать generic_filter
от scipy вместе с nanmedian
от numpy, надеясь, что это будет более эффективный способ игнорирования значений, но он оказался медленнее.
from scipy.ndimage.filters import generic_filter
def median_filter(img, mask, size):
masked_img = img.copy()
masked_img[~mask] = np.nan
masked_img = generic_filter(masked_img, np.nanmedian, size, mode='reflect')
masked_img[~mask] = img[~mask]
return masked_img
skimage.filters.rank.median
- эффективная реализация, но, к сожалению, преобразует значения в диапазон uint8
, даже если входной массив равен float
.