【发布时间】:2021-04-05 13:01:12
【问题描述】:
所以我想计算傅里叶变换图像和掩码之间的卷积。
from scipy import fftpack
import numpy as np
import imageio
from PIL import Image, ImageDraw
import cv2
import matplotlib.pyplot as plt
import math
from scipy.ndimage.filters import convolve
input_image = Image.open('....image....')
input_image=np.array(input_image)
M,N = input_image.shape[0],input_image.shape[1]
FT_img = fftpack.fftshift(fftpack.fft2(input_image))
n = 2; # order value can change this value accordingly
D0 = 60; # cut-off frequency can change this value accordingly
# Designing filter
u = np.arange(0, M)
idx = u > M/2
u[idx] = u[idx] - M
v = np.arange(0, N)
idy = v > N/2
v[idy] = v[idy] - N
V,U = np.meshgrid(v,u)
# Calculating Euclidean Distance
D=np.linalg.norm(V-U)
# determining the filtering mask
H = 1/(1 + (D0/D)**(2*n));
# Convolution between the Fourier Transformed image and the mask
G = convolve(H, FT_img)
当我运行此代码 sn-p 时,最后一行出现“运行时错误:过滤器权重数组的形状不正确。”错误。我的理解是H 是浮点数,FT_img 是数组,所以我不能对这些进行卷积。但我不知道如何解决。
我该如何解决这个问题?
【问题讨论】:
-
时域的卷积变成频域的矩阵乘法,那么你应该在哪个域做卷积??
-
@Bilal,我应该执行高通巴特沃斯滤波器,所以我假设它在频域中?
-
@Bilal,感谢您的回答,但老实说,我不知道如何为 (u,v) 计算它们以创建数组。
标签: python arrays numpy image-processing convolution