多媒体与数字图像处理第三次实验.docx
《多媒体与数字图像处理第三次实验.docx》由会员分享,可在线阅读,更多相关《多媒体与数字图像处理第三次实验.docx(46页珍藏版)》请在冰点文库上搜索。
![多媒体与数字图像处理第三次实验.docx](https://file1.bingdoc.com/fileroot1/2023-6/8/dafcc5e2-be4a-46e5-932f-ef30acc36b0a/dafcc5e2-be4a-46e5-932f-ef30acc36b0a1.gif)
多媒体与数字图像处理第三次实验
多媒体与数字图像处理第三次实验
注意提交实验报告的文件名格式(姓名+学号+实验报告三.doc)
图像变换与滤波器设计
一、实验目的
1.了解傅立叶变换、离散余弦变换及Radon变换在图像处理中的应用
2.了解Matlab线性滤波器的设计方法
二、实验内容
1.傅立叶变换
A)傅里叶变换基本操作
I=imread('at3_1m4_04.tif');
imshow(I);
title('源图像');
J=fft2(I);
figure,imshow(J);
title('傅立叶变换');
%频移
JSh=fftshift(J);
figure,imshow(JSh);
title('傅立叶变换频移');
%直接傅立叶反变换
Ji=ifft2(J);
figure,imshow(Ji/256);
title('直接傅立叶变换');
%幅度
JA=abs(J);
iJA=ifft2(JA);
figure,imshow(iJA/256);
title('幅度傅立叶反变换');
%相位
JP=angle(J);
iJP=ifft2(JP);
figure,imshow(abs(iJP)*100);
title('相位傅立叶反变换');
B)利用MATLAB软件实现数字图像傅立叶变换的程序
I=imread(‘at3_1m4_04.tif');%读入原图像文件
imshow(I);%显示原图像
fftI=fft2(I);%二维离散傅立叶变换
sfftI=fftshift(fftI);%直流分量移到频谱中心
RR=real(sfftI);%取傅立叶变换的实部
II=imag(sfftI);%取傅立叶变换的虚部
A=sqrt(RR.^2+II.^2);%计算频谱幅值
A=(A-min(min(A)))/(max(max(A))-min(min(A)))*225;
%归一化
figure;%设定窗口
imshow(A);%显示原图像的频谱
C)绘制一个二值图像矩阵,并将其傅立叶函数可视化。
f=zeros(30,30);
f(5:
24,13:
17)=1;
imshow(f,'notruesize')
F=fft2(f);
F2=log(abs(F));
figure,imshow(F2,[-15],'notruesize');colormap(jet);
F=fft2(f,256,256);%零填充为256×256矩阵
figure,imshow(log(abs(F)),[-15],'notruesize');colormap(jet);
F2=fftshift(log(1+abs(F)));%将图像频谱中心由矩阵原点移至矩阵中心
figure,imshow(log(abs(F2)),[-15],'notruesize');colormap(jet);
D)利用傅立叶变换分析两幅图像的相关性,定位图像特征。
读入图像‘eurotext.tif’,抽取其中的字母‘a’。
bw=imread('eurotext.tif');
a=bw(177:
203,424:
444);
imshow(bw);
figure,imshow(a);
C=real(ifft2(fft2(bw).*fft2(rot90(a,2),800,1024)));%求相关性
figure,imshow(C,[]);
thresh=max(C(:
));
figure,imshow(C>thresh-10)
figure,imshow(C>thresh-15)
请分析改程序显示图的含义。
先读取图片,然后取出x=177:
203,y=424:
444之间的图片,在求原图和a的相关性,然后檫黑
2.离散余弦变换(DCT)
A)使用dct2对图像‘autumn.tif’进行DCT变换。
RGB=imread('autumn.tif');
imshow(RGB)
I=rgb2gray(RGB);%转换为灰度图像
figure,imshow(I)
J=dct2(I);
figure,imshow(log(abs(J)),[]),colormap(jet(64));colorbar;
B)将上述DCT变换结果中绝对值小于10的系数舍弃,使用idct2重构图像并与原图像比较。
RGB=imread('autumn.tif');
I=rgb2gray(RGB);%转换为灰度图像
J=dct2(I);
figure,imshow(I)
K=idct2(J);
figure,imshow(K,[0255])
J(abs(J)<10)=0;%舍弃系数
K2=idct2(J);
figure,imshow(K2,[0255])
C)利用DCT变换进行图像压缩。
I=imread('cameraman.tif');
I=im2double(I);
T=dctmtx(8);
B=blkproc(I,[8,8],'P1*x*P2',T,T');
mask=[11110000
11100000
11000000
10000000
00000000
00000000
00000000
00000000];
B2=blkproc(B,[88],'P1.*x',mask);
I2=blkproc(B2,[88],'P1*x*P2',T',T);
imshow(I)
figure,imshow(I2)
3.*Matlab线形滤波器设计
采用频率变换方式,通过一维最优波纹FIR滤波器创建二维FIR滤波器)。
b=remez(10,[00.40.61],[1100]);
%阶次,频率向量,对应的理想幅频响应
h=ftrans2(b);
[H,w]=freqz(b,1,64,'whole');
colormap(jet(64))
plot(w/pi-1,fftshift(abs(H)));%使x轴取值0处对应曲线中心
figure,freqz2(h,[3232])
三、思考题
1.傅里叶变换有哪些重要的性质?
线性性质、尺度变换性质、对偶性、平移性质
2.简述傅立叶频谱搬移的原理
将信号乘以所谓的载频信号
或
3.简述Fourier系数幅度、相位的物理意义。
对幅度谱,是对信号轮廓和形状的描述;对相位谱,是对信号位置的描述
4.图像的二维频谱在显示和处理时应注意什么?
运用对数形式能增加显示细节,为了便于分析,使用fftshift函数将频谱的零频分量移至频谱的中心。
进行傅里叶变换的图像应该是灰度图形,原rgb彩色图像无法进行相应变换。
5.简述离散余弦变换(DCT)的原理。
DCT变换利用傅立叶变换的性质。
采用图像边界褶翻将像变换为偶函数形式,然后对图像进行二维傅立叶变换,变换后仅包含余弦项,所以称之为离散余弦变换。
形态学操作
一、实验目的
1.了解膨胀和腐蚀的Matlab实现方法
2.掌握图像膨胀、腐蚀、开启、闭合等形态学操作函数的使用方法
3.了解二进制图像的形态学应用
二、实验内容
1.图像膨胀
A)对包含矩形对象的二进制图像进行膨胀操作。
BW=zeros(9,10);
BW(4:
6,4:
7)=1;
imshow(BW,'notruesize')
se=strel('square',3);%3x3正方形结构元素
BW2=imdilate(BW,se);%膨胀操作
figure,imshow(BW2,'notruesize')
B)改变上述结构元素类型(如:
line,diamond,disk等),重新进行膨胀操作。
Disk,3:
BW=zeros(9,10);
BW(4:
6,4:
7)=1;
imshow(BW,'notruesize')
%se=strel('square',3);%3x3正方形结构元素
se=strel('disk',3);
BW2=imdilate(BW,se);%膨胀操作
figure,imshow(BW2,'notruesize')
C)对图像‘eurotext.tif’进行上述操作,观察不同结构元素膨胀的效果。
BW3=imread('eurotext.tif');
imshow(BW3)
se2=strel(‘line’,11,90);%11x90线型结构元素
BW4=imdilate(BW3,se2);%膨胀操作
figure,imshow(BW4)
2.图像腐蚀
A)对图像‘circbw.tif’进行腐蚀操作。
BW1=imread('circbw.tif');
se=strel('arbitrary',eye(5));
BW2=imerode(BW1,se,’same’);%腐蚀操作
imshow(BW1)
figure,imshow(BW2)
B)对图像‘eurotext.tif’进行腐蚀操作。
BW=imread('eurotext.tif');
se=strel(‘line’,8,80);%8x80线型结构元素
BW2=imerode(BW,se,’same’);%腐蚀操作
imshow(BW)
figure,imshow(BW2)
3.膨胀与腐蚀的综合使用
A)从原始图像‘circbw.tif’中删除电流线,仅保留芯片对象。
方法一:
先腐蚀(imerode),再膨胀(imdilate);
BW1=imread('circbw.tif');
imshow(BW1)
se=strel('rectangle',[4030]);%选择适当大小的矩形结构元素
BW2=imerode(BW1,se,'same');%先腐蚀,删除较细的直线
figure,imshow(BW2)
BW3=imdilate(BW2,se);%再膨胀,恢复矩形的大小
figure,imshow(BW3)
方法二:
使用形态开启函数(imopen)。
BW1=imread('circbw.tif');
imshow(BW1)
se=strel('rectangle',[4030]);
BW2=imopen(BW1,se);%开启操作
figure,imshow(BW2)
B)改变结构元素的大小,重新进行开启操作,观察处理结果。
se=strel(‘rectangle’,[2010]);
se=strel(‘rectangle’,[5040]);
C)置结构元素大小为[43],同时观察形态开启(imopen)与闭合(imclose)的效果,总结形态开启与闭合在图像处理中的作用。
I=imread('circbw.tif');
imshow(I)
se=strel('rectangle',[43]);
I1=imopen(I,se);%开启操作
I2=imclose(I,se);%闭合操作
figure,imshow(I1)
figure,imshow(I2)
D)综合实例
I=imread('aeroplane2.jpg');
level=graythresh(I);%得到合适的阈值
bw=im2bw(I,level);%二值化
SE=strel('square',3);%设置膨胀结构元素
BW1=imdilate(bw,SE);%膨胀
SE1=strel('arbitrary',eye(5));%设置腐蚀结构元素
BW2=imerode(bw,SE1);%腐蚀
BW3=bwmorph(bw,'open');%开运算
BW4=bwmorph(bw,'close');%闭运算
imshow(I);
figure,imshow(bw);
figure,imshow(BW1);
figure,imshow(BW2);
figure,imshow(BW3);
figure,imshow(BW4);
三、思考题
1.结合实验内容,评价腐蚀运算与膨胀运算的效果。
腐蚀:
是一种消除边界点,使边界向内部收缩的过程。
可以用来消除小且无意义的物体。
膨胀:
是将与物体接触的所有背景点合并到该物体中,使边界向外部扩张的过程。
可以用来填补物体中的空洞。
2.结合实验内容,评价开运算与闭运算的效果。
开运算:
先腐蚀后膨胀的过程开运算。
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
开运算通常是在需要去除小颗粒噪声,以及断开目标物之间粘连时使用。
其主要作用与腐蚀相似,与腐蚀操作相比,具有可以基本保持目标原有大小不变的优点。
闭运算:
先膨胀后腐蚀的过程称为闭运算。
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积。
3.腐蚀、膨胀、开、闭运算的适用条件是什么?
腐蚀:
可以用来消除小且无意义的物体。
膨胀:
可以用来填补物体中的空洞。
开运算:
用来消除小物体、在纤细点处分离物体、平滑较大物体的边界的同时并不明显改变其面积。
闭运算:
用来填充物体内细小空洞、连接邻近物体、平滑其边界的同时并不明显改变其面积