图像去噪(高斯低通滤波器)
问题一:
- 对给定图像lena_noise.bmp进行图像的频率域去噪处理,期望去噪后的输出结果尽量接近无噪声的原图lena.bmp。画出原图及有噪声图像的傅里叶谱图像F(需要中心化以及对数变换),分析两幅图像傅里叶谱图像F的不同(显示时建议使用imshow(I,[])命令,I为要显示的图像)。
代码:
clear all;
close all;
clc;
image1 = imread('lena.bmp');
img1 = im2double(image1);
%傅里叶变换
img1 = fft2(img1);
%中心化
img1 = fftshift(img1);
%对数变换
img1 = log(1+abs(img1));
image2 = imread('lena_noise.bmp');
img2 = im2double(image2);
img2 = fft2(img2);
img2 = fftshift(img2);
img2 = log(1+abs(img2));
subplot(221); imshow(image1);title("原图");
subplot(223); imshow(img1,[]);title("原图傅里叶频谱图");
subplot(222); imshow(image2);title("噪声图");
subplot(224); imshow(img2,[]);title("噪声图傅里叶频谱图");
运行结果:
分析:
- 相较于原图,噪声图像的噪声信息十分有规律,这个特点体现在频谱图上就是在原点周围有一圈亮点。
问题二:
- 噪声图lena_noise.bmp 的傅里叶谱图像中的高亮点对应着噪声,选择合适的频率域滤波器进行操作,给出选择频率域滤波器类型的原因。画出频率域滤波器H,以及H*F。频率域操作后,进行傅里叶反变换(记得去中心化和取实部),画出滤波后空域图的效果(去噪以后的图像)。
代码(选用高斯低通滤波器):
clear all;
close all;
clc;
img = imread("lena_noise.bmp");
subplot(221);imshow(img);title("噪声图");
img1 = im2double(img);
F = fsd(img1);
H = GaussianLowpass(img1,80);
subplot(222);imshow(H);title("频域滤波器");
G = F.*H;
subplot(223);imshow(G);title("H*F");
G = real(ifft2(ifftshift(G)));
G = G(1:size(img,1),1:size(img,2));
subplot(224); imshow(G);title("去噪后图像,D0=80");
%傅里叶频谱
function F = fsd(img)
[m,n] = size(img);
%傅里叶变换
F = fft2(img,m*2,n*2);
%中心化
F = fftshift(F);
end
% Butterworth滤波器
function H = Bfilter(img, D0)
N = 2;
[m,n] = size(img);
P = m*2;
Q = n*2;
H = zeros(P, Q);
a = D0^(2 * N);
for u = 1 : P
for v = 1 : Q
d = (u-m)^2 + (v-n)^2;
H(u, v) = 1 / (1 + (d^N) / a);
end
end
end
%高斯低通滤波器
function H = GaussianLowpass(img,D0)
[M,N] = size(img);
H = zeros(2*M,2*N);
for u = 1:2*M
for v = 1:2*N
D_square = (u-M) * (u-M) + (v-N) * (v-N);
H(u,v) = exp(-D_square/(2*D0*D0));
end
end
end
%理想低通滤波器函数
function H = ILPF(img,D0)
[m,n]=size(img);
P = 2*m;
Q = 2*n;
H = zeros(P,Q);
for u = 1:P
for v = 1:Q
D = ((u-m) * (u-m) + (v-n) * (v-n))^0.5;
if D <= D0
H(u,v) = 1;
else
H(u,v) = 0;
end
end
end
end
运行结果:
选择该频率域滤波器的原因:
- 理想低通滤波器有明显的振铃现象,故弃之不用
- 高斯低通滤波器和Butterworth滤波器差别不大,选用高斯低通滤波器,下面为二者对比图:
lena.bmp
lena_noise.bmp