MATLAB频域处理-傅里叶变换和滤波

主要demo:

二维傅立叶变换,二维FFT,频域低通滤波,高通滤波,拉普拉斯算子


      f=imread('你的图片');
      F=fft2(f);            %对图像f进行傅里叶变换
      S=abs(F);            %S是F的频谱
      imshow(S,[]);       %显示频谱,能量集中子在四个角
      FC=fftshift(F);       %频谱移动到中心
      figure,imshow(FC,[]);        %显示频谱,能量移动到中心
      S2=log(1+abs(FC));    %对频谱作对数变换,拓展其动态范围
      figure,imshow(S2,[]);        %显示变换后的频谱,频谱的细节部分也能清楚显示

f =imread('你的图'); 
imshow(f);
[M,N]=size(f);   % M,N分别是图像f的宽度和高度

%对f进行傅立叶变换,没有对f进行扩充填0操作
F=fft2(f);
sig=10;         % sig是高斯滤波器的方差

% lpfilter 产生一个频域低通滤波器
H =lpfilter('gaussian', M, N, sig);
G=H.*F;    % 频域滤波,将滤波器和F相乘
% 滤波结果进行傅立叶逆变换并取其实部,得到空间域的滤波结果
g =real(ifft2(G));
% 由于折叠效应,g的图像水平边缘有些模糊,但是垂直边缘并不模糊
figure, imshow (g,[]);
PQ=paddedsize (size(f));  %PQ是扩充后的图像尺寸,默认为(M*2, N*2)
Fp=fft2(f, PQ(1), PQ(2));   %傅立叶变换并扩充到指定尺寸
Hp=lpfilter('gaussian', PQ(1),PQ(2), 2*sig);  %Hp是指定尺寸的低通滤波器
Gp=Hp.*Fp;     %频域低通滤波
gp=real(ifft2(Gp));  % 傅立叶逆变换,得到滤波结果
figure, imshow(gp,[  ]);  % 傅立叶逆变换后的结果,原图像只占据左上角1/4
gpc=gp(1:size(f,1), 1:size(f,2));  %只取逆变换的左上角部分
figure, imshow(gpc, [  ]);  %可以看到图像的垂直和水平边缘都变模糊

f =imread('你的图');
imshow(f);
F=fft2(f);       %对f做傅立叶变频
% S是对数变换并移到中心的傅立频谱
S=fftshift(log(1+abs(F)));
S=gscale(S);      %将S归一化到[0,1]之间
figure, imshow(S,[ ]);  %显示傅立频谱

h=fspecial ('sobel')  %是3*3 垂直方向Sobel滤波器
freqz2(h)     %显示与h相应的频域滤波器的图形
PQ= paddedsize(size(f));  %填充大小
H=freqz2(h, PQ(1), PQ(2)); %生成与h相应的频域滤波器,并扩充到指定大小
H1=ifftshift(H);           %解除H的居中
figure, imshow(abs(H),[  ]);  %显示频域滤波器的频谱,能量集中在中心
figure, imshow(abs(H1),[  ]);  %解除居中操作后的频谱,能量集中在四个角上

gs=imfilter(double(f), h);    % 对f进行空间滤波操作,采取0填充边界
gf=dftfilt(f, H1);           %对f 进行频域滤波,dftfilt 函数见第4.6节
figure, imshow(gs, [ ]);   %显示空间滤波结果
figure, imshow(gf, [ ]);    %显示频域滤波结果

figure, imshow(abs(gs), [ ]);  %取gs的绝对值,消除负值
figure, imshow(abs(gs), [ ]);  %取gf的绝对值,消除负值

d=abs(gs-gf);     %对空间滤波结果和频域滤波结果取差值
max(d(:))               %打印差值的最大值
min(d(:))              %打印差值的最小值

f =imread('你的图');
imshow(f);
PQ=paddedsize(size(f));          %计算填充大小
%利用函数 dftuv 得到频域坐标网格
[U, V]=dftuv(PQ(1), PQ(2));
DO=0.05*PQ(2);               % DO是截至频率
F = fft2(f,PQ(1), PQ(2));        % 傅立叶变换
H=exp(-(U.^2+V.^2)/(2*(DO^2)));   % H是高斯低通滤波器
g =dftfilt(f,H);              % 高斯低通滤波的结果
figure, imshow(g,[]);
figure, imshow(fftshift (H), [ ] );  % 查看居中之后的低通滤波器
figure, imshow(log(1+abs(fftshift (F))), [ ] );  % 显示对数变换后的频谱
figure,mesh(fftshift(H(1:10:PQ(1), 1:10:PQ(2))));      % 以网格的形式显示低通滤波器
figure,surf(fftshift(H(1:10:PQ(1), 1:10:PQ(2))));       % 以表面图的形式显示低通滤波器

f =imread('你的图');
H=fftshift(hpfilter('ideal', 500, 500, 50));  % H是居中的高通滤波器
figure,mesh(H(1:10:500, 1 :10:500));          % 以网格的形式显示高通滤波器
figure,imshow(H, [ ]);                    % 以图像形式显示滤波器

PQ = paddedsize(size(f));  %填充大小
D0 = 0.05*PQ(1);          %截止频率
H = hpfilter('gaussian', PQ(1),PQ(2),D0);%高通滤波器
g = dftfilt(f, H);         %高通滤波
figure,imshow(g,[  ]);
%**********高频强调滤波***********************
f = imread('你的图');
figure,imshow(f);
PQ = paddedsize(size(f));
DO = 0.05 * PQ(1);
% HBW是巴特沃斯高通滤波器
HBW = hpfilter('btw',  PQ(1),  PQ(2),  DO,2);
H = 0.5+2 * HBW;           %H是高频强调滤波器
gbw = dftfilt(f,HBW);     %高通滤波
gbw=gscale(gbw);         %将值归一化到[o,1]
figure,imshow(gbw,[  ])  %显示高通滤波图像
ghf = dftfilt(f,H);          %高频强调滤波
ghf = gscale(ghf);           %值归一化
figure,imshow(ghf,[  ])   %显示高频强调滤波后的图像
ghe = histeq(ghf,256);     %直方图均衡化
figure,imshow(ghe,[  ])  %直方图均衡化后的图像

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值