Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 掩蔽阵列的中值滤波_Python_Numpy_Filtering_Median - Fatal编程技术网

Python 掩蔽阵列的中值滤波

Python 掩蔽阵列的中值滤波,python,numpy,filtering,median,Python,Numpy,Filtering,Median,我在这个论坛上看到了一些关于计算掩蔽阵列(如图像)中值的讨论。我想要的是稍微微妙一点,就是在我的图像上应用一个中值滤波器。我知道一种方法,但是太慢了,我希望能加快这个过程 例如,假设我有一个掩蔽的形状数组(10,10),我想应用一个中值滤波器,其中一个框(3,3)不使用那些被掩蔽的元素。我的目标是将图像中每个像素的值替换为框的遮罩中值的值 假设情况非常简单,我们可以将“图像”和遮罩构建为: im = numpy.random.uniform(size=(10,10)) mask = nump

我在这个论坛上看到了一些关于计算掩蔽阵列(如图像)中值的讨论。我想要的是稍微微妙一点,就是在我的图像上应用一个中值滤波器。我知道一种方法,但是太慢了,我希望能加快这个过程

例如,假设我有一个掩蔽的形状数组(10,10),我想应用一个中值滤波器,其中一个框(3,3)不使用那些被掩蔽的元素。我的目标是将图像中每个像素的值替换为框的遮罩中值的值

假设情况非常简单,我们可以将“图像”和遮罩构建为:

 im = numpy.random.uniform(size=(10,10))
 mask = numpy.zeros_like(im)
 mask[1:3,:] = 1
 masked_im = numpy.ma.array(im, mask=mask)
现在,为了实际制作中值滤波器,我们可以通过以下方法进行强力操作:

 lx, ly = im.shape
 side = 3
 im_filt = numpy.zeros_like(im)
 for jj in range(ly):
     for ii in range(lx):
         minx, maxx = max([ii-side/2,0]), min([ii+side/2+1,lx])
         miny, maxy = max([jj-side/2,0]), min([jj+side/2+1,ly])
         im_filt[ii,jj] = numpy.ma.median(masked_im[minx:maxx, miny:maxy])
这解决了问题,并给出了一个很好的结果,但正如我所说的,速度非常慢。一种(对我来说,令人惊讶的)稍微加快处理速度的方法是分别使用遮罩和图像,如:

 im_filt2 = numpy.zeros_like(im)
 for jj in range(ly):
     for ii in range(lx):
         minx, maxx = max([ii-side/2,0]), min([ii+side/2+1,lx])
         miny, maxy = max([jj-side/2,0]), min([jj+side/2+1,ly])
         zoom_im = im[minx:maxx, miny:maxy]
         zoom_msk = mask[minx:maxx, miny:maxy]
         im_filt2[ii,jj] = numpy.median(zoom_im[zoom_msk == 0]) 
这将执行时间从0.018增加到0.002,如果不是我所寻找的因数~50,这显然更好(为什么??)


有输入吗?

我想差异主要是由于访问MaskedArray对象(这是ndarray的一种包装器)的开销造成的


对于numpy中的高效中值滤波器,您也可以尝试。它还接受一个掩码参数。

它现在在包中。上面的两个链接似乎不再起作用了,知道它现在在哪里吗?谢谢报道。以下是一个新链接: