小编Shi*_*kur的帖子

在傅里叶域中使用内核卷积图像

我在我的图像和卷​​积核周围使用零填充,将它们转换为傅立叶域,然后将它们反转回来以获得卷积图像,请参见下面的代码。然而,结果是错误的。我期待一个模糊的图像,但输出是四个移位的四分之一。为什么输出错误,我该如何修复代码?

输入图像:

输入图像

卷积结果:

输出图像

from PIL import Image,ImageDraw,ImageOps,ImageFilter
import numpy as np 
from scipy import fftpack
from copy import deepcopy
import imageio
## STEP 1 ##
im1=Image.open("pika.jpeg")
im1=ImageOps.grayscale(im1)
im1.show()
print("s",im1.size)
## working on this image array
im_W=np.array(im1).T
print("before",im_W.shape)
if(im_W.shape[0]%2==0):
im_W=np.pad(im_W, ((1,0),(0,0)), 'constant')
if(im_W.shape[1]%2==0):
im_W=np.pad(im_W, ((0,0),(1,0)), 'constant')
print("after",im_W.shape)
Boxblur=np.array([[1/9,1/9,1/9],[1/9,1/9,1/9],[1/9,1/9,1/9]])
dim=Boxblur.shape[0]

##padding before frequency domain multipication
pad_size=(Boxblur.shape[0]-1)/2
pad_size=int(pad_size)
##padded the image(starts here)

p_im=np.pad(im_W, ((pad_size,pad_size),(pad_size,pad_size)), 'constant')
t_b=(p_im.shape[0]-dim)/2
l_r=(p_im.shape[1]-dim)/2
t_b=int(t_b)
l_r=int(l_r)

##padded the image(ends here)

## padded the kernel(starts here)
k_im=np.pad(Boxblur, ((t_b,t_b),(l_r,l_r)), 'constant')
print("hjhj",k_im)
print("kernel",k_im.shape) …
Run Code Online (Sandbox Code Playgroud)

python fft image-processing convolution scipy

3
推荐指数
1
解决办法
3362
查看次数

标签 统计

convolution ×1

fft ×1

image-processing ×1

python ×1

scipy ×1