图像去噪(高斯低通滤波器)

问题一:

  • 对给定图像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("噪声图傅里叶频谱图");
运行结果:

给图像添加高斯噪声 pytorch_给图像添加高斯噪声 pytorch

分析:
  • 相较于原图,噪声图像的噪声信息十分有规律,这个特点体现在频谱图上就是在原点周围有一圈亮点。

问题二:

  • 噪声图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
运行结果:

给图像添加高斯噪声 pytorch_给图像添加高斯噪声 pytorch_02

选择该频率域滤波器的原因:
  • 理想低通滤波器有明显的振铃现象,故弃之不用
  • 高斯低通滤波器和Butterworth滤波器差别不大,选用高斯低通滤波器,下面为二者对比图:

给图像添加高斯噪声 pytorch_opencv_03

lena.bmp

给图像添加高斯噪声 pytorch_opencv_04

lena_noise.bmp

给图像添加高斯噪声 pytorch_matlab_05