所以我试图创建一个函数,将一个5乘5平滑内核应用于2D图像数据,这将返回一个与数据形状相同的2D Numpy数组。这是我到目前为止所拥有的。
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各自的范围,通过找到5-by-5的点积找到其5 x 5邻居的加权平均值每个i和j的5个邻居(我将数据的形状改为(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
有人可以帮我识别错误并引导我走上正确的道路吗?如果可能的话,我希望保留这种结构,因为我在介绍性计算课程中,并且我不允许使用高级计算技术。