Pythonのconvolve2dについて
Pythonでconvolve2d
を使う下記のプログラムをかきました。
#coding:utf-8
import numpy as np
from scipy import signal
a = np.array([
[1,2,3,4,5,6],
[7,8,9,10,11,12],
[13,14,15,16,17,18],
[19,20,21,22,23,24],
[25,26,27,28,29,30],
[31,32,33,34,35,36]
])
f = np.array([
[0,1,0],
[0,0,0],
[0,0,0]
])
print a
print f
p = signal.convolve2d(a, f, 'valid')
print p
結果は
[[ 1 2 3 4 5 6]
[ 7 8 9 10 11 12]
[13 14 15 16 17 18]
[19 20 21 22 23 24]
[25 26 27 28 29 30]
[31 32 33 34 35 36]]
[[0 1 0]
[0 0 0]
[0 0 0]]
[[14 15 16 17]
[20 21 22 23]
[26 27 28 29]
[32 33 34 35]]
このようになりました。
このサイトを参考にすると畳み込み演算は元の行列の右上、左上、右下、左下を除くすべての点における近傍8ピクセルとフィルタの要素をそれぞれ掛けて足してその結果を新しい行列上のフィルタの中心座標にセットするようなので行列が1行下がると考えられましたが、結果を見ると上がっているように見えます。
更にvalid
をsame
にすると
[[ 7 8 9 10 11]
[13 14 15 16 17]
[19 20 21 22 23]
[25 26 27 28 29]
[ 0 0 0 0 0]]
このようになります。
これはどちらが正しいのでしょうか。