数字图像处理频域滤波

    xiaoxiao2021-03-25  131

    第一部分:三种低通滤波器 实验一:理想低通滤波 1.1实验原理 高通滤波是常见的频域增强的方法之一,因为图像的边缘对应于高频分量,所以 要锐化图像可以使用高通滤波器。 二维理想高通滤波器的传递函数为:

    1.2实验程序

    %理想高通滤波器 clc; clear all; close all; RGB=imread('方块.jpg'); %读取图片 I_0=rgb2gray(RGB); %确保图片转换为灰度图 subplot(2,3,1),imshow(I_0);title('原图');%显示原图片 I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声 subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片 s=fftshift(fft2(I_1)); subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心 [M N]=size(s); % 将图片的大小复制给[M N] d0=15; %初始化d0 n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if d<=d0 %点(i,j)在通带内的情况 h(i,j)=0; %通带变换函数 else %点(i,j)在阻带内的情况 h(i,j)=1; %阻带变换函数 end s(i,j)=h(i,j)*s(i,j); %理想低通滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数 s=uint8(real(ifft2(s))); subplot(2,3,4),imshow(h);title('传递函数'); %显示理想低通滤波器的传递函数 subplot(2,3,5),imshow(s);title('理想高通滤波(d0=15)'); %显示理想低通滤波处理后的图像

    1.3实验结果

    实验二:巴特列低通滤波器 2.1实验原理 巴特沃斯低通滤波器

    2.2实验程序

    clc; clear all; I=imread('斑马.jpg'); imshow(I); J1=imnoise(I,'salt & pepper'); % 叠加椒盐噪声 figure,imshow(J1); f=double(J1); % 数据类型转换,MATLAB不支持图像的无符号整型的计算 g=fft2(f); % 傅立叶变换 g=fftshift(g); % 转换数据矩阵 [M,N]=size(g); nn=2; % 二阶巴特沃斯(Butterworth)低通滤波器 d0=50; m=fix(M/2); n=fix(N/2);取整函数 for i=1:M for j=1:N d=sqrt((i-m)^2+(j-n)^2); h=1/(1+0.414*(d/d0)^(2*nn)); % 计算低通滤波器传递函数 result(i,j)=h*g(i,j); end end result=ifftshift(result); J2=ifft2(result); J3=uint8(real(J2)); figure,imshow(J3); % 显示滤波处理后的图像

    2.3.处理结果

    实验三:gaussian低通滤波器GLHF 3.1实验原理 高斯低通滤波器

    3.2实验程序

    %gaussian低通滤波GLHF clc; clear all; close all; RGB=imread('方块.jpg'); %读取图片 I_0=rgb2gray(RGB); %确保图片转换为灰度图 subplot(2,3,1),imshow(I_0);title('原图');%显示原图片 I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声 subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片 s=fftshift(fft2(I_1)); subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心 [M N]=size(s); % 将图片的大小复制给[M N] d0=50; %初始化d0 n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2);%计算点(i,j)距离频谱图中心距离 h=1*exp(-1/2*(d^2/d0^2));%计算高斯滤波函数 H(i,j)=h ; %记录传递函数 picture(i,j)=h*s(i,j); %用高斯滤波器处理频谱图 end end picture=ifftshift(picture); J2=ifft2(picture); J3=uint8(real(J2)); subplot(234),imshow(H);title('传递函数'); %显示GHPF滤波器的传递函数 subplot(2,3,5),imshow(J3);title('处理后的图像'); %显示处理后的图像

    3.3实验结果

    第二部分:高通滤波器 实验四:理想高通滤波 4.1实验原理 理想高通滤波器

    这里的D0是滤波器的阻带半径,而D(u,v)是点到滤波器中央的距离。

    4.2实验程序

    %理想高通滤波器 clc; clear all; close all; RGB=imread('方块.jpg'); %读取图片 I_0=rgb2gray(RGB); %确保图片转换为灰度图 subplot(2,3,1),imshow(I_0);title('原图'); %显示原图片 I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声 subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片 s=fftshift(fft2(I_1)); subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心 [M N]=size(s); % 将图片的大小复制给[M N] d0=15; %初始化d0 n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 if d<=d0 %点(i,j)在通带内的情况 h(i,j)=0; %通带变换函数 else %点(i,j)在阻带内的情况 h(i,j)=1; %阻带变换函数 end s(i,j)=h(i,j)*s(i,j); %理想高通滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数 s=uint8(real(ifft2(s))); subplot(2,3,4),imshow(h);title('传递函数'); %显示理想高通滤波器的传递函数 subplot(2,3,5),imshow(s);title('理想高通滤波(d0=15)'); %显示理想高通滤波处理后的图像

    4.3实验结果

    实验五:高斯高通滤波 5.1实验原理 高斯高通滤波器

    5.2实验程序

    %高斯高通滤波 clc; clear all; close all; RGB=imread('方块.jpg'); %读取图片 I_0=rgb2gray(RGB); %确保图片转换为灰度图 subplot(2,3,1),imshow(I_0);title('原图');%显示原图片 I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声 subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片 s=fftshift(fft2(I_1)); subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心 [M N]=size(s); % 将图片的大小复制给[M N] d0=15; %初始化d0 n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h(i,j)=1-1*exp(-1/2*(d^2/d0^2)); %GHPF滤波函数 s(i,j)=h(i,j)*s(i,j); %GHPF滤波后的频域表示 end end s=ifftshift(s); %对s进行反FFT移动 %对s进行二维反离散的Fourier变换后,取复数的实部转化为无符号8位整数 s=uint8(real(ifft2(s))); subplot(2,3,4),imshow(h);title('传递函数'); %显示GHPF滤波器的传递函数 subplot(2,3,5),imshow(s);title('GHPF滤波(d0=15)'); %显示GHPF滤波处理后的图像

    5.3实验结果

    实验六:巴特沃斯高通滤波 6.1实验原理 巴特沃斯高通滤波器

    6.2实验程序

    %Butterworth高通滤波 clc; clear all; close all; RGB=imread('方块.jpg'); %读取图片 I_0=rgb2gray(RGB); %确保图片转换为灰度图 subplot(2,3,1),imshow(I_0);title('原图');%显示原图片 I_1=imnoise(I_0,'gaussian'); %对图像加gaussian噪声 subplot(2,3,2),imshow(I_1);title('增加gaussian噪声后');%显示增加噪声的图片 s=fftshift(fft2(I_1)); subplot(2,3,3),imshow(log(1+abs(s)),[]);title('fftshift'); %将灰度图像的二维不连续Fourier 变换的零频率成分移到频谱的中心 [M N]=size(s); % 将图片的大小复制给[M N] d0=15; %初始化d0 n1=floor(M/2); %对M/2进行取整 n2=floor(N/2); %对N/2进行取整 nn=2; for i=1:M for j=1:N d=sqrt((i-n1)^2+(j-n2)^2); %点(i,j)到傅立叶变换中心的距离 h=1/(1+(d0/d)^(2*nn)); %计算butterworth传递函数 H(i,j)=h ; %记录传递函数 picture(i,j)=h*s(i,j); %用高斯滤波器处理频谱图 end end picture=ifftshift(picture); J2=ifft2(picture); J3=uint8(real(J2)); subplot(234),imshow(H);title('传递函数'); %显示GHPF滤波器的传递函数 subplot(2,3,5),imshow(J3);title('BHHF处理后的图'); % 显示滤波处理后的图像

    6.3实验结果

    实验小结: 本次实验我总共做了六个实验,分别是三个低通滤波器和三个高通滤波器,通过实验我发现,低通滤波器能够有效保留图片细节,能够有效去除图片的噪声,而高通滤波器能够提取图片的边缘轮廓信息,可以使图片锐化。 另外我发现使用不同的程序处理图片,计算机的计算量也是不同的,比如巴特沃斯滤波器,阶数n取得值越大,则滤波特器特征函数越接近理想滤波器,但随着阶数n的增加,计算机的计算量也在不停的增加,所以我们在设计程序的时候不光要考虑滤波效果还要考虑计算量的大小。 通过本次实验我掌握了几种滤波器的原理和算法 ,也大大熟悉了matlab编程工作,通过本次实验我使用matlab的技能得到极大提升,这也是是收益匪浅的。

    转载请注明原文地址: https://ju.6miu.com/read-24472.html

    最新回复(0)