傅里叶变换高低通滤波
时间: 2023-08-26 17:04:22 浏览: 57
傅里叶变换是一种将信号从时域转换到频域的数学技术。在频域中,可以通过选择不同的频率范围来实现高通或低通滤波。
高通滤波器允许高频信号通过而抑制低频信号。在频域中,可以通过将低频部分设为零来实现高通滤波。具体而言,可以将信号的傅里叶变换结果与一个高通滤波器的频率响应进行卷积,然后进行逆傅里叶变换,得到在时域中进行高通滤波后的信号。
低通滤波器允许低频信号通过而抑制高频信号。在频域中,可以通过将高频部分设为零来实现低通滤波。具体而言,可以将信号的傅里叶变换结果与一个低通滤波器的频率响应进行点乘,然后进行逆傅里叶变换,得到在时域中进行低通滤波后的信号。
傅里叶变换的高低通滤波在信号处理中有广泛应用,例如音频处理、图像处理等领域。
相关问题
傅立叶变换低通滤波代码
以下是一个使用傅立叶变换实现低通滤波的 Python 代码示例:
```python
import numpy as np
import cv2
# 读取图像
img = cv2.imread('lena.png', 0)
# 傅立叶变换
f = np.fft.fft2(img)
fshift = np.fft.fftshift(f)
# 生成低通滤波器掩模
rows, cols = img.shape
crow, ccol = rows // 2, cols // 2
mask = np.zeros((rows, cols), np.uint8)
mask[crow - 30: crow + 30, ccol - 30: ccol + 30] = 1
# 低通滤波
fshift = fshift * mask
f_ishift = np.fft.ifftshift(fshift)
img_back = np.fft.ifft2(f_ishift)
img_back = np.abs(img_back)
# 显示结果
cv2.imshow('Original Image', img)
cv2.imshow('Low Pass Filtered Image', img_back)
cv2.waitKey(0)
cv2.destroyAllWindows()
```
其中,我们首先使用 `np.fft.fft2()` 函数对输入图像进行傅立叶变换,然后使用 `np.fft.fftshift()` 函数将频域图像中心移到图像的中心。
接着,我们生成一个大小与输入图像相同的掩模,将其中心为低频的部分设为 1,其余部分设为 0。这样,我们就得到了一个低通滤波器掩模。
将掩模与频域图像做点乘,然后使用 `np.fft.ifftshift()` 函数将处理后的频域图像中心移回到左上角,最后使用 `np.fft.ifft2()` 函数进行反傅立叶变换,得到滤波后的图像。
傅立叶变换低通滤波matlab代码
以下是在 MATLAB 中实现傅里叶变换低通滤波的示例代码:
```matlab
% 读取图像
img = imread('lena.jpg');
% 转换为灰度图像
img_gray = rgb2gray(img);
% 进行傅里叶变换
f = fft2(img_gray);
fshift = fftshift(f);
% 设置低通滤波的截止频率
d = 30;
% 创建圆形掩模
[M, N] = size(f);
mask = zeros(M, N);
center_x = floor(M/2)+1;
center_y = floor(N/2)+1;
for i = 1:M
for j = 1:N
dist = sqrt((i-center_x)^2 + (j-center_y)^2);
if dist <= d
mask(i, j) = 1;
end
end
end
% 进行低通滤波
fshift = fshift .* mask;
fshift = ifftshift(fshift);
img_back = ifft2(fshift);
% 显示原图和处理后的图像
subplot(1,2,1), imshow(img_gray), title('Original');
subplot(1,2,2), imshow(abs(img_back), []), title('Low Pass Filtered');
```
在这个代码示例中,我们首先读取了一张名为 "lena.jpg" 的图像,并使用 `rgb2gray` 函数将其转换为灰度图像。然后,我们使用 `fft2` 函数进行二维傅里叶变换,并使用 `fftshift` 函数将零频率分量移到频谱图的中心。接下来,我们设置了低通滤波的截止频率,并创建了一个圆形掩模。然后,我们将掩模与频谱图相乘,使用 `ifftshift` 函数将零频率分量移到频谱图的左上角,使用 `ifft2` 函数进行二维傅里叶逆变换,并得到处理后的图像。最后,我们使用 MATLAB 自带的 `imshow` 函数显示原图和处理后的图像。