I'm trying to implement a convolution operation for a RGB image by applying the 2D convolution to each channel independently. Following is my code:
kernel = np.array(
[
[1,0,1],
[0,0,0],
[1,0,0]
])
image=images[1]
Hi, Wi, Ci= image.shape
Hk, Wk = kernel.shape
paddingHk = Hk//2
paddingWk = Wk//2
new_img = np.pad(image, [(paddingHk, paddingWk),(paddingHk, paddingWk),(0,0)], 'constant', \
constant_values=[(0, 0),(0,0),(0,0)])
pHi, pWi, cWi= new_img.shape
flipkernel = np.flip(kernel)
out = np.zeros((Hi, Wi, Ci))
for k in range(Ci):
for i in range(paddingHk, pHi-paddingHk):
for j in range(paddingWk, pWi-paddingWk):
b = new_img[i-paddingHk:i+paddingHk+1, j-paddingWk:j+paddingWk+1,:]
out[i-paddingHk][j-paddingWk][k] = np.sum(b[:,:,k]*flipkernel)
out = np.clip(out, 0, 1)
display(out)
The result looks weird:3d conv This is the original image:original
Thanks!