图像处理频域平滑(理想和巴特沃斯)

图像频域平滑(去噪):使用自生成图像(包含白色区域,黑色区域,并且部分区域添加椒盐噪声),然后进行傅里叶变换,并且分别使用理想低通滤波器、巴特沃斯低通滤波器、指数低通滤波器和梯形低通滤波器(至少使用两种低通滤波器),显示滤波前后的频域能量分布图,空间图像。

注意:uint8类型的,会认为是0到255之间    double类型的  会认为是0到1之间!!   复数类型时,显示时一般先取幅值real,再用   uint8(255.*矩阵)!!

%图像频域平滑    理想  和  巴特沃斯
%自制黑白灰度图像
for i=1:300
    for j =1:300
        I(i,j)=0;
    end
end
for i=1:30
    for j =1:50
        I(100+i,100+j)=255;
    end
end
A=I;
%椒盐噪声处理
AN = imnoise(A,'salt & pepper',0.04);
D0 = 20;%截止频率
subplot(331);
imshow(A);
title('原图');
subplot(332);
imshow(AN);
title('椒盐噪声处理');
AN= double(AN);
ADFT  =fft2(AN);%傅里叶变换后的矩阵
ADFT=fftshift(ADFT);%直流分量移到频谱中心
subplot(333);
imshow(ADFT);
title('滤波前频率能量分布');
[m,n] = size(ADFT);
A1 = double(zeros(m,n));
H = double(zeros(m,n));
for i = 1:m
    for j = 1:n
        d=sqrt((i-round(m/2))^2+(j-round(n/2))^2);
        if d<=D0
            H(i,j)=1;
        end
    end
end
AAA=uint8(255.*H);
subplot(334)
imshow(AAA);
title('理想低通滤波器')
 
AIDFT = ADFT.*H;
subplot(335);
imshow(AIDFT);
title('理想滤波后的频域能量分布')
AIDFT=ifftshift(AIDFT);%直流分量移回到左上角
AIDFT2 = ifft2(AIDFT);
AIDFT3=(real(AIDFT2));%取幅值并转换成8位无符号整数
AIDFT4 = uint8(255.*AIDFT3);
% uint8类型的,会认为是0到255之间    double类型的  会认为是0到1之间!!
subplot(336)
imshow(AIDFT4);
title('加上理想低通滤波器后')
 
AN= double(AN);
BDFT  =fft2(AN);%傅里叶变换后的矩阵
BDFT=fftshift(BDFT);%直流分量移到频谱中心
[m,n] = size(BDFT);
B1 = double(zeros(m,n));
H2 = double(zeros(m,n));
nn=2;%截止频率为50的二阶巴特沃斯低通滤波器
for i = 1:m
    for j = 1:n
         d=sqrt((i-round(m/2))^2+(j-round(n/2))^2);%计算频率平面原点到各点的距离
        H2(i,j)=1/(1+0.414*(d/D0)^(2*nn));%传递公式
    end
end
BBB=uint8(255.*H2);
subplot(337);
imshow(BBB);
title('巴特沃斯低通滤波器');
BIDFT = BDFT.*H2;
subplot(338);
imshow(BIDFT);
title('巴特沃斯滤波后的频域能量分布');
BIDFT=ifftshift(BIDFT);%直流分量移回到左上角
BIDFT2 = ifft2(BIDFT);
BIDFT3=(real(BIDFT2));%取幅值并转换成8位无符号整数
% uint8类型的,会认为是0到255之间    double类型的  会认为是0到1之间!!
BIDFT4 = uint8(255.*BIDFT3);
subplot(339);
imshow(BIDFT4);
title('加上巴特沃斯低通滤波器后');

图像处理频域平滑(理想和巴特沃斯)_第1张图片

你可能感兴趣的:(图像处理)