2016-07-04 49 views
6

编辑:NumPy的最大汇集卷积

我其实想做的是找到当地的最大值,这将在下文好解释的,同样的解决方案还解释这里:

http://scikit-image.org/docs/dev/auto_examples/plot_peak_local_max.html




看来你可以在Numpy中做linear卷积。

是否有可能做非线性最大池卷积?使用NxM补丁并跨越输入图像,将当前像素置零,如果它不是附近的最大值?

所以非线性最大卷积是这样工作的,这里是我的形象

3 4 5 2 3 
    3 5 1 2 7 
    2 2 5 1 7 

,并给予2x2的最大池给出了这样的输出

0 0 5 0 0 
    0 5 0 0 7 
    0 0 5 0 7 

您必须跨过一个2x2的补丁图像,并将所有内容归零,只保留最大值。

+0

[窗最大的numpy的(可能的重复http://stackoverflow.com/questions/18645013/windowed-maximum -in-numpy) – Lanting

+0

增加了一个例子,@说明你引用的问题不是卷积 – user1506145

+1

输出'(2,2)'不应该为零,因为那个滑动补丁中有一个更大的'6'? – Divakar

回答

6

你可以使用Scipy's maximum_filer -

from scipy.ndimage.filters import maximum_filter 

arr*(arr == maximum_filter(arr,footprint=np.ones((3,3)))) 

采样运行 -

In [19]: arr 
Out[19]: 
array([[3, 4, 5, 2, 3], 
     [3, 5, 1, 2, 7], 
     [2, 2, 5, 6, 7]]) 

In [20]: arr*(arr == maximum_filter(arr,footprint=np.ones((3,3)))) 
Out[20]: 
array([[0, 0, 5, 0, 0], 
     [0, 5, 0, 0, 7], 
     [0, 0, 0, 0, 7]]) 
+0

完美!面具很聪明,否则图像将由高原组成。你的解决方案提取当地的最大值,正是我需要的:) – user1506145