傅里叶滤波mathlab代码
时间: 2023-05-14 17:01:56 浏览: 100
傅里叶滤波是一种在时域与频域之间转化的技术。它可以用于压缩图像或音频信号,也可以用于去噪。MATLAB中可以使用fft函数进行傅里叶变换,使用ifft函数进行傅里叶逆变换。
% 傅里叶滤波
% f: 输入信号
% fc: 截止频率
function [filt_sig] = fft_filter(f, fc)
n = length(f);
d = 1/n;
x = (0:n-1)*d;
% 傅里叶变换
F = fft(f);
% 构建频域滤波器
H = zeros(1, n);
for i = 1:n
if i <= n/2
H(i) = 1;
else
H(i) = 0;
end
end
% 应用滤波器
G = F .* H;
% 傅里叶逆变换得到滤波后的信号
filt_sig = ifft(G);
% 取实部
filt_sig = real(filt_sig);
end
上述代码中,输入信号f的长度为n,d是采样间隔。函数中首先进行傅里叶变换F,然后构建一个频域滤波器H,H的长度与输入信号相同,如果小于截止频率fc,将其对应的H元素设为1,否则设为0。最后将滤波器应用到信号F上,得到滤波后的信号G,并进行傅里叶逆变换得到filt_sig,取实部即得到傅里叶滤波后的信号。
相关问题
二维傅里叶滤波matlab代码
下面是一个基本的二维傅里叶滤波的Matlab代码示例:
```matlab
% 读取图像
image = imread('input_image.png');
image = rgb2gray(image); % 如果图像是彩色的,转换为灰度图像
% 对图像进行二维傅里叶变换
f = fft2(double(image));
% 构建滤波器(这里使用一个理想低通滤波器)
filter = zeros(size(image));
filter_radius = 50; % 滤波器半径
center_x = floor(size(filter,2)/2) + 1;
center_y = floor(size(filter,1)/2) + 1;
for i = 1:size(filter,1)
for j = 1:size(filter,2)
distance = sqrt((i-center_y)^2 + (j-center_x)^2);
if distance <= filter_radius
filter(i,j) = 1;
end
end
end
% 将滤波器应用于频域图像
filtered_image = f .* filter;
% 对滤波后的图像进行反傅里叶变换
result_image = ifft2(filtered_image);
% 显示原始图像和滤波结果
subplot(1,2,1), imshow(image), title('原始图像');
subplot(1,2,2), imshow(abs(result_image), []), title('滤波结果');
```
这段代码首先读取输入图像,然后对其进行二维傅里叶变换。接下来,根据需要构建一个滤波器(在这个示例中使用的是理想低通滤波器)。然后,将滤波器应用于频域图像,得到滤波后的图像。最后,对滤波后的图像进行反傅里叶变换,并显示原始图像和滤波结果。
请注意,这只是一个简单的示例,你可以根据需要调整滤波器类型、参数以及其他处理步骤。
傅立叶变换低通滤波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` 函数显示原图和处理后的图像。
阅读全文