import numpy as np
import scipy
img = np.random.rand(64, 64, 54)#three dimensional image
k1 = np.array([0.114,0.141,0.161,0.168,0.161,0.141,0.114])#the kernel along the 1st dimension
k2 = k1#the kernel along the 2nd dimension
k3 = k1#the kernel along the 3nd dimension
#Convolve over all three axes in a for loop
for i in np.arange(img.shape[0]):
for j in np.arange(img.shape[1]):
oneline = img[i,j,:]
img[i,j,:] = np.convolve(oneline, k1, mode='same')
for i in np.arange(img.shape[1]):
for j in np.arange(img.shape[2]):
oneline = img[:,i,j]
img[:,i,j] = np.convolve(oneline, k2, mode='same')
for i in np.arange(img.shape[0]):
for j in np.arange(img.shape[2]):
oneline = img[i,:,j]
img[i,:,j]=np.convolve(oneline,k3,mode='same')
print(img.shape)
定义成函数如下:
improt numpy as np
def convolve3d(img,kernel,mode='same'):
for i in np.arange(img.shape[0]):
for j in np.arange(img.shape[1]):
oneline = img[i,j,:]
img[i,j,:] = np.convolve(oneline, kernel[0], mode='same')
for i in np.arange(img.shape[1]):
for j in np.arange(img.shape[2]):
oneline = img[:,i,j]
img[:,i,j] = np.convolve(oneline, kernel[1], mode='same')
for i in np.arange(img.shape[0]):
for j in np.arange(img.shape[2]):
oneline = img[i,:,j]
img[i,:,j]=np.convolve(oneline,kernel[2],mode='same')
return img
img = np.ones((4,4,4))
v = np.array([[1,2,3],[4,5,6],[7,8,9]])
print(v.shape)
a = convolve3d(img,kernel=v,mode='same')
print(a.shape)