Применять медианный фильтр только к значениям, указанным в маске - PullRequest
0 голосов
/ 01 марта 2019

Учитывая двумерный массив и логическую маску, я хочу применить медианный фильтр к массиву, в котором обрабатываются только значения, указанные маской.

Запись этого с использованием итерации 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.

...