【问题标题】:Trying to understand masking试图理解掩蔽
【发布时间】:2018-02-04 01:23:16
【问题描述】:

我一直在尝试了解遮罩以及它如何与图像过滤器一起使用。我正在使用以下代码来加深我的理解。

import scipy.ndimage as ndi
import matplotlib.pyplot as plt
import numpy as np

#   Generate a random binary mask
np.random.seed(seed=182)
mask = np.random.randint(2, size=(901, 877))

img = np.random.rand(901, 877)

img_masked = np.ma.masked_array(img, mask = mask)
img_masked_filtered = ndi.median_filter(img_masked, size=10)
img_unmasked_filtered = ndi.median_filter(img, size=10)

median_masked = np.ma.median(img_masked)
median_unmasked = np.ma.median(img)

在结果中,如我所料,median_unmasked != median_masked,但我不想要 img_masked_filtered == img_unmasked_filtered。 scipy.ndimage.median_filter 正是我需要的工作,但它不适用于蒙版图像。我可以使用什么来做与中值过滤器相同的事情,但它可以在蒙版图像上工作?

我对数组使用的奇怪大小是因为这是我最终要过滤的图像的大小。

【问题讨论】:

    标签: python image numpy scipy mask


    【解决方案1】:

    ndimage 过滤器不考虑掩码数组的掩码。而是用nan 值“屏蔽”一个普通的NumPy 数组,然后使用ndimage.generic_filter 调用np.nanmedian

    import scipy.ndimage as ndi
    import matplotlib.pyplot as plt
    import numpy as np
    
    np.random.seed(seed=182)
    # h, w = 901, 877
    h, w = 10, 10
    mask = np.random.randint(2, size=(h, w))
    img = np.random.rand(h, w)
    img_masked = np.where(mask, img, np.nan)
    
    size = 3
    img_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()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-14
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2012-09-18
      • 2018-07-29
      • 2017-12-07
      • 2017-02-23
      相关资源
      最近更新 更多