2017-07-23 33 views
3

我有一個圖像作爲numpy數組。我試圖通過將與其相鄰的任何像素設置爲相同的特定顏色來放大具有特定顏色的對象。Numpy - 修改匹配值旁邊的值

但是,我找不到辦法。任何建議如何做到這一點?

下面是我的問題的一個簡單的例子。 如何找到並更新下面數組中12的值?

In[1]:import numpy as np 
In[2]:z = np.arange(25).reshape(5,5) 
In[3]: z 
Out[4]: 
array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 11, 12, 13, 14], 
    [15, 16, 17, 18, 19], 
    [20, 21, 22, 23, 24]]) 

從而產生更新的陣列,其看起來像這樣(更新值沿z [2,1]和z [2,3]):

array([[ 0, 1, 2, 3, 4], 
    [ 5, 6, 7, 8, 9], 
    [10, 12, 12, 12, 14], 
    [15, 16, 17, 18, 19], 
    [20, 21, 22, 23, 24]]) 

非常感謝的任何建議!

回答

2

在匹配的蒙版上使用Scipy's binary dilation來創建擴展蒙板,其可以用於boolean-indexing將包括匹配元素自身的所有相鄰元素更改爲匹配數。

因此,實現起來 -

from scipy.ndimage.morphology import binary_dilation 

mask = binary_dilation(z==12,[[1,1,1]]) # create dilated mask 
z[mask] = 12 # use dilated mask to change elements 

採樣運行 -

In [42]: z # Input array 
Out[42]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]]) 

In [43]: from scipy.ndimage.morphology import binary_dilation 

In [44]: mask = binary_dilation(z==12,[[1,1,1]]) 

In [45]: z[mask] = 12 

In [46]: z # Input array modified 
Out[46]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 12, 12, 12, 14], 
     [15, 16, 17, 18, 19], 
     [20, 21, 22, 23, 24]])