[matlab数字图像处理6]对一副图像进行傅立叶变换,显示频谱,在频域处理图像

一、 问题描述

对一副图像进行傅立叶变换,显示频谱,取其5,50,80、150的像素半径,显示图像,加噪声(高斯,椒盐)进行频率域平滑,锐化,观察图像变化

二、 求解思路

利用matlab的imread函数和rgb2gray函数将图像灰度化,利用fft函数将原图像矩阵进行傅里叶变换,并将变化后的矩阵利用fftshift将频域图移动至正中央,利用Imshow,显示频域图,注意此时需要将图像的转化为log(|频域矩阵|+1),从而使频谱明显可见。对于不用像素半径的理想低通滤波器实现,需要先确定图像的中心,定义一个中心半径范围内全为1,外围全为0的矩阵,将此矩阵与频域图做卷积,然后将结果反中心,反傅里叶变换后,取其实部,再转化为uint8类型,显利用imshow显示变换后的图像。
对于加噪声(高斯,椒盐)进行频率域平滑,锐化,观察图像变化,先使用imnoise将图像加上噪声,然后利用前文中的同样的变换方法对图像进行变换,对图像锐化时,取像素半径外的频率(即理想高通滤波器),对图像平滑时,取像素半径内的频率(即理想低通滤波器),然后利用反变换,最后显示图像

三、 程序代码及实验结果

%对一副图像进行傅立叶变换,显示频谱,取其5,50,80、150的像素半径,显示图像,加噪声(高斯,椒盐)进行频率域平滑,锐化,观察图像变化;

clear;
clc;
close all
%显示原图
x=imread('2.jpeg');
x=rgb2gray(x);
figure(1)
imshow(x)

在这里插入图片描述

     
figure(2)
F=fft2(x);
F0=F;
%显示频域图
F0_sh=fftshift(F0);
F1=log(abs(F)+1);
F1_sh=fftshift(F1);
imshow(F1_sh,[]);
title('傅里叶变换后的频谱');

在这里插入图片描述

不同像素半径的理想低通滤波器

%显示不同像素半径的理想低通滤波器
row=size(F,1);
M0=round(row/2);
col=size(F,2);
N0=round(col/2);
D=zeros(row,col);
for i=1:row
    for j=1:col
        D(i,j)=sqrt((i-M0)^2+(j-N0)^2);
    end
end
figure(3)
subplot(2,2,1)
D0=5;
H=D<=D0;
G=uint8(real(ifft2(ifftshift(F0_sh.*H))));
imshow(G)
title('像素半径为5的理想低通滤波器');
subplot(2,2,2)
D0_1=50;
H_1=D<=D0_1;
G1=uint8(real(ifft2(ifftshift(H_1.*F0_sh))));
imshow(G1)
title('像素半径为50的理想低通滤波器');
subplot(2,2,3)
D0_2=80;
H_2=D<=D0_2;
G2=uint8(real(ifft2(ifftshift(H_1.*F0_sh))));
imshow(G2)
title('像素半径为80的理想低通滤波器');
subplot(2,2,4)
D0_3=150;
H_3=D<=D0_3;
G3=uint8(real(ifft2(ifftshift(H_1.*F0_sh))));
imshow(G3)
title('像素半径为150的理想低通滤波器');

在这里插入图片描述


%加噪声


figure(4)
%加椒盐噪声
F_jiaoyan=imnoise(x,'salt & pepper');
subplot(2,2,1)
imshow(F_jiaoyan)
title('加椒盐噪声后')
F_jy_DFT=fftshift(fft2(F_jiaoyan));
subplot(2,2,2)
imshow(log(abs(F_jy_DFT)+1),[]);
title('加椒盐噪声后的频域图')
subplot(2,2,3)
G_jy_l=uint8(real(ifft2(ifftshift((D<=15).*F_jy_DFT))));
imshow(G_jy_l)
title('利用理想低通滤波器平滑')

在这里插入图片描述

%加高斯噪声
F_gaosi=imnoise(x,'gaussian');
figure(5)
subplot(2,2,1)
imshow(F_gaosi)
title('加高斯噪声后')
F_gs_DFT=fftshift(fft2(F_gaosi));
subplot(2,2,2)
imshow(log(abs(F_gs_DFT)+1),[]);
title('加高斯噪声后的频域图')
subplot(2,2,3)
G_gs_l=uint8(real(ifft2(ifftshift((D<=15).*F_gs_DFT))));
imshow(G_gs_l)
title('利用理想低通滤波器平滑')

在这里插入图片描述

锐化

figure(6)
subplot(2,2,1)
G_gs_h=uint8(real(ifft2(ifftshift((D>5).*F0_sh))));
imshow(G_gs_h)
title('利用理想高通滤波器锐化,D>5')
subplot(2,2,2)
G_gs_h=uint8(real(ifft2(ifftshift((D>15).*F0_sh))));
imshow(G_gs_h)
title('利用理想高通滤波器锐化,D>15')
subplot(2,2,3)
G_gs_h=uint8(real(ifft2(ifftshift((D>25).*F0_sh))));
imshow(G_gs_h)
title('利用理想高通滤波器锐化,D>25')
subplot(2,2,4)
G_gs_h=uint8(real(ifft2(ifftshift((D>35).*F0_sh))));
imshow(G_gs_h)
title('利用理想高通滤波器锐化,D>35')

在这里插入图片描述

四、 实验心得

  1. 像素半径相当于理想低通滤波器的D0值
  2. 注意需要对傅里叶变换后的频域图进行中心操作,在频域图不够清晰时,可以使用log(|x|+1)进行变换操作
  3. 注意对图像进行傅里叶变换后,进行操作后若想转化回空域图,需要依次进行反中心变换,反傅里叶变换,取实部,取uint8整数的操作
  • 5
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值