数字图像处理上机实习频域处理.docx
《数字图像处理上机实习频域处理.docx》由会员分享,可在线阅读,更多相关《数字图像处理上机实习频域处理.docx(12页珍藏版)》请在冰豆网上搜索。
数字图像处理上机实习频域处理
数字图像处理上机实习
(第三专题——频域处理)
学生姓名:
XX
班级:
XXX
学号:
XXXXXXX
指导老师:
XXXXX
一、计算图象的傅氏变换频谱函数
要求:
设计图象f2(x,y)为30*256/256*256,居中垂直排列;
算法设计:
程序设计:
f=zeros(256,256);
f(1:
256,113:
143)=1;
subplot(211);imshow(f);title('图像f2(x,y)');
F=fft2(f);
subplot(212);imshow(fftshift(uint8(F)));title('频谱图');
figure;
mesh(fftshift(abs(F)));
title('傅氏变换频谱函数');
程序运行结果:
二、计算显示图象的频谱函数
要求:
对p03-02的离散余弦变换,显示其频谱函数
算法设计:
程序设计:
M=imread('D:
\matlab2011\图片\p03-02.tif');
subplot(211);imshow(M);title('原图像');
M1=dct2(M);
subplot(212);imshow(abs(M1));title('二维离散余弦变换结果');
程序运行结果:
3、设计图象的频域滤波
要求:
根据频率采样法设计一个高通滤波器,对图象f2(x,y)进行高通滤波,观察分析空域图象和频谱分布的变化(设计2个截止频率)。
算法设计:
程序设计:
%%%%%%%%%%%%%%%%%%%?
?
?
%%%%%%%%%%%%%%%%%%%%%%%%%
function[G,g]=imhp(f,D1)
%?
?
?
?
%f?
?
?
?
?
G?
?
?
?
g?
?
?
?
?
F=fftshift(fft2(f));
[m,n]=size(F);
G=F;
u0=floor(m/2);
v0=floor(n/2);
foru=1:
m
forv=1:
n
if(sqrt((u-u0).^2+(v-v0).^2))>=D1
H=1;
else
H=0;
end
G(u,v)=F(u,v)*H;
end
End
g=ifft2(G);
%%%%%%%%%%%%%%%%%%%主?
?
%%%%%%%%%%%%%%%%%%%%%%%%%
f=zeros(256,256);
f(80:
173,113:
143)=1;
subplot(231);imshow(f);title('?
?
?
');
F1=fft2(f);
F1_shift=fftshift(F1);
subplot(2,3,4);imshow(uint8(F1_shift));title('?
?
?
')
%?
?
?
?
[F2,j]=imhp(f,50);
g=abs(j);
subplot(2,3,2);imshow(g);title('?
?
?
?
?
?
?
D1=50')
subplot(2,3,5);imshow(uint8(F2));title('?
?
?
?
?
?
')
[F2,j]=imhp(f,100);
g=abs(j);
subplot(2,3,3);imshow(g);title('?
?
?
?
?
?
?
D1=100')
subplot(2,3,6);imshow(uint8(F2));title('?
?
?
?
?
?
')
程序运行结果:
四、实际图象的频域滤波
要求:
根据频率采样法设计一个高通滤波器,对图象p03-02进行高通滤波,观察分析空域图象和频谱分布的变化(设计2个截止频率)。
算法设计:
程序设计:
%%%%%%%%%%%%%%%%%%%?
?
?
%%%%%%%%%%%%%%%%%%%%%%%%%
function[G,g]=imhp(f,D1)
%?
?
?
?
%f?
?
?
?
?
G?
?
?
?
g?
?
?
?
?
F=fftshift(fft2(f));
[m,n]=size(F);
G=F;
u0=floor(m/2);
v0=floor(n/2);%?
?
?
?
?
foru=1:
m
forv=1:
n
if(sqrt((u-u0).^2+(v-v0).^2))>=D1
H=1;
else
H=0;
end
G(u,v)=F(u,v)*H;
end
end
g=ifft2(G);
%%%%%%%%%%%%%?
?
?
%%%%%%%%%%%%%%%%%
A=imread('D:
\matlab2011\?
?
\p03-02.tif');
subplot(2,3,1),imshow(A);title('?
?
?
');
f=double(A);
F1=fftshift(fft2(f));
subplot(2,3,4);imshow(uint8(F1));title('?
?
?
')
%?
?
?
?
[F2,j]=imhp(f,50);
g=abs(j);
subplot(2,3,2);imshow(g);title('?
?
?
?
?
?
?
D1=50')
subplot(2,3,5);imshow(uint8(F2));title('?
?
?
?
?
?
')
[F2,j]=imhp(f,200);
g=abs(j);
subplot(2,3,3);imshow(g);title('?
?
?
?
?
?
?
D1=200')
subplot(2,3,6);imshow(uint8(F2));title('?
?
?
?
?
?
')
程序运行结果:
五、专题小结
1.知识点小结
u0=floor(m/2):
floor()返回小于或者等于指定表达式的最大整数;
fftshift():
的作用正是让正半轴部分和负半轴部分的图像分别关于各自的中心对称;
F=fft2(f):
fft2()对f进行二维傅里叶变换;
g=abs(j):
abs()对j取绝对值;
M1=dct2(M):
dat2()对M进行二维离散余弦变换;
g=ifft2(G):
ifft2()对G进行二维傅里叶反变换;
2.心得体会
第三次上机实习,感觉题目比前两次的难了一些,想要自己设计出函数来实现题目的要求,也不能一次就达到想要的目的,总是要经过不断的算法改进和试验,才能达到最终的结果;其中不乏和同学的交流和讨论,经验的交流,让问题处理起来顺畅了很多,所以遇到问题多思考、多讨论非常有助于问题的解决。
但是任然感觉上机实验和课本知识的联系不太多,有可能是我自己对书本的理解不够通透,以后还要继续努力。