そこで、データと同じ形状の 2D Numpy 配列を返す 2D 画像データに 5 行 5 列のスムージング カーネルを適用する関数を作成しようとしています。これが私がこれまでに持っているものです。
def applyFilter( data, kernel ):
ret = np.zeros_like(data)
KI = kernel.shape[0]//2
KJ = kernel.shape[1]//2
d=np.zeros_like(kernel)
for i in range(KI, data.shape[0]-KI):
for j in range(KJ, data.shape[1]-KJ):
d=np.array(data[i-KI:i+KI+1,j-KJ:j+KJ+1])
d.shape=(1,25)
k=np.array(kernel)
k.shape=(1,25)
ret[i,j]=np.dot(d,k)
return ret
私がやろうとしているのは、それぞれの範囲内のすべての i と j について、すべての i と j の 5 行 5 列の隣接要素のドット積を見つけることによって、5 行 5 列の隣接要素の加重平均を見つけることです (I計算を簡単にするためにデータの形状を (1,25) に変更しました) 範囲とカーネルで (前の理由でカーネルの形状にも同じことを行いました)。ただし、次のようなエラーが表示されます。
Traceback (most recent call last):
File "/Users/jbunker7/Documents/Comp 116/M2_COMP116-003/P5.py", line 40, in <module>
result = applyFilter(data, kernel)
File "/Users/jbunker7/Documents/Comp 116/M2_COMP116-003/P5.py", line 30, in applyFilter
ret[i,j]=np.dot(d,k)
ValueError: matrices are not aligned
誰かがエラーを特定して正しい道に導くのを手伝ってくれますか? 私は計算入門クラスにいて、上位レベルの計算技術を使用することは許可されていないため、可能であれば、この構造を維持したいと考えています。