1

そこで、データと同じ形状の 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

誰かがエラーを特定して正しい道に導くのを手伝ってくれますか? 私は計算入門クラスにいて、上位レベルの計算技術を使用することは許可されていないため、可能であれば、この構造を維持したいと考えています。

4

0 に答える 0