生成代码:对受到高斯白噪声及椒盐噪声干扰的lotus图像在频域内分别采用理想低通和2阶butterworth滤波器进行平滑处理
时间: 2024-02-27 15:54:38 浏览: 87
下面是一个基于MATLAB的示例代码,用于对受到高斯白噪声和椒盐噪声干扰的lotus图像进行频域平滑处理,其中采用理想低通和2阶Butterworth滤波器:
```matlab
% 读取图像
I = imread('lotus.jpg');
% 将图像转换为灰度图像
Igray = rgb2gray(I);
% 添加高斯白噪声
Igauss = imnoise(Igray, 'gaussian', 0, 0.01);
% 添加椒盐噪声
Isalt = imnoise(Igray, 'salt & pepper', 0.1);
% 对高斯白噪声图像进行频域平滑处理
% 将图像转换为频域
F = fft2(Igauss);
Fshift = fftshift(F);
% 定义理想低通滤波器
D0 = 50;
H1 = zeros(size(F));
M = size(F, 1);
N = size(F, 2);
for i = 1:M
for j = 1:N
D = sqrt((i-M/2)^2 + (j-N/2)^2);
if D <= D0
H1(i, j) = 1;
end
end
end
% 定义2阶Butterworth滤波器
D0 = 50;
n = 2;
H2 = zeros(size(F));
for i = 1:M
for j = 1:N
D = sqrt((i-M/2)^2 + (j-N/2)^2);
H2(i,j) = 1/(1+(D/D0)^(2*n));
end
end
% 对频域图像进行滤波
G1 = Fshift .* H1;
G2 = Fshift .* H2;
% 将滤波后的频域图像转换回空域
J1 = ifft2(ifftshift(G1));
J2 = ifft2(ifftshift(G2));
% 显示结果
figure;
subplot(1, 3, 1);
imshow(Igauss);
title('原始图像');
subplot(1, 3, 2);
imshow(J1, []);
title('理想低通滤波器处理结果');
subplot(1, 3, 3);
imshow(J2, []);
title('2阶Butterworth滤波器处理结果');
% 对椒盐噪声图像进行频域平滑处理
% 将图像转换为频域
F = fft2(Isalt);
Fshift = fftshift(F);
% 定义理想低通滤波器
D0 = 50;
H1 = zeros(size(F));
M = size(F, 1);
N = size(F, 2);
for i = 1:M
for j = 1:N
D = sqrt((i-M/2)^2 + (j-N/2)^2);
if D <= D0
H1(i, j) = 1;
end
end
end
% 定义2阶Butterworth滤波器
D0 = 50;
n = 2;
H2 = zeros(size(F));
for i = 1:M
for j = 1:N
D = sqrt((i-M/2)^2 + (j-N/2)^2);
H2(i,j) = 1/(1+(D/D0)^(2*n));
end
end
% 对频域图像进行滤波
G1 = Fshift .* H1;
G2 = Fshift .* H2;
% 将滤波后的频域图像转换回空域
J1 = ifft2(ifftshift(G1));
J2 = ifft2(ifftshift(G2));
% 显示结果
figure;
subplot(1, 3, 1);
imshow(Isalt);
title('原始图像');
subplot(1, 3, 2);
imshow(J1, []);
title('理想低通滤波器处理结果');
subplot(1, 3, 3);
imshow(J2, []);
title('2阶Butterworth滤波器处理结果');
```
需要注意的是,在实际应用中,不同类型的频域滤波器可能会对图像产生不同的影响,需要根据实际情况进行选择。同时,滤波器的参数也需要根据实际情况进行调整,以达到最佳的处理效果。
阅读全文