2017-06-06 109 views
-1

我有一個挑戰:寫作convolve函數圖像56x56參數作爲數組,第二個arg內核在我的情況下是1x3或3x1的矩陣。
要點是用使用只有numpy
我有一個使用convolvescipy HOG過濾器,但我需要convolve函數來工作。Python,從ndimage過濾器卷積功能

我不知道如何開始,有沒有人有信息如何輕鬆完成或有人有類似的東西寫在以前?

+0

你試過[numpy.convolve(https://開頭的文檔。 scipy.org/doc/numpy/reference/generated/numpy.convolve.html)? – mgamba

+1

當然,這是第一件事,我已經做了,np.convolve只適用於一個暗淡的數組,並不會與圖像 – Joshua

回答

0

如果你的過濾器是唯一1D(例如,1×3或3×1),可以使用一維卷積行或按逐列:

def my_conv(im2d, ker1d): 
    out = np.zeros(im2d.shape, dtype=im2d.dtype) # allocate output assuming mode='same' 
    if ker1d.shape[0] == 1: 
     # horizontal kernel 
     for row in xrange(im2d.shape[0]): 
      out[row,:] = np.convolve(im2d[row,:], ker1d.flatten(), mode='same') 
    elif ker1d.shape[1] == 1: 
     # vertical kernel 
     for col in xrange(im2d.shape[1]): 
      out[:,col] = np.convolve(im2d[:,col], ker1d.flatten(), mode='same') 
    else: 
     raise ValueError('input kernel is not 1D') 
    return out 
+0

我也試過,我不知道爲什麼,但對於np.convolve不接受我的內核並返回「ValueError:object too deep for desired array」。也許我的輸入是錯誤的?內核是:horizo​​ntal = np.array([[1,0,-1]]) vertical = np.array([[ - 1],[0],[1]])。 – Joshua

+0

@Joshua看起來'ker1d'需要'flatten()',請看我的編輯。 – Shai