仅将中值过滤器应用于掩码指定的值

时间:2019-03-01 18:22:47

标签: python numpy image-processing scipy scikit-image

给定一个2D数组和一个布尔掩码,我想将中值过滤器应用于仅处理由掩码指定的值的数组。

使用python的迭代编写此代码非常慢,这是可以预期的。我尝试将scipy的generic_filter与numpy的nanmedian结合使用,希望这是一种更有效的忽略值的方法,但事实证明它更慢。

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范围。

0 个答案:

没有答案