图像变换实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
图像变换实验报告
实验三图像变换
⼀、实验⽬的
1、结合实例学习⼏种常见的图像变换,并通过实验体会图像变换的效果;
2、理解和掌握图像旋转、缩放、离散傅⾥叶变换和离散余弦变换的原理和应⽤,掌握利⽤MATLAB编程实现图像变换的⽅法。
⼆、实验内容
1、图像的⼏何变换,主要实现图像的缩放与旋转,要求变换中⽤最近邻插值算法实现,或⽤双线性变换法实现并⽐较;
2、图像的正交变换,主要实现离散傅⾥叶变换(DFT)与离散余弦变换(DCT)。
三、实验要求
1、独⽴完成;
2、编写MATLAB程序,并对程序中所调⽤函数的功能进⾏必要的说明(可⽤“help 函数名”进⾏查询);
3、调试运⾏后保存实验结果(注意保存的⽂件格式);
4、完成实验报告。
四、实验原理
(⼀)图像的⼏何运算(变换)
1、⽐例缩放
⽐例缩放是指将给定的图像在x轴⽅向按⽐例缩放fx倍,在y轴⽅向按⽐例缩放fy倍,从⽽获得⼀副新的图像。
在MATLAB中,进⾏图像⽐例缩放的函数是imresize,它的常见调⽤⽅法如下:
B=imresize(A,scale)
B=imresize(A,[mrows ncols])
B=imresize(A,scale,method)
其中,A是要进⾏缩放的图像矩阵,scale是进⾏缩放的倍数,如果scale⼩于1,则进⾏缩⼩操作,如果scale⼤于1,则进⾏放⼤操作。
[mrows ncols]⽤于指定缩放后图像的⾏数和列数,method ⽤于指定的图像插值⽅法,有nearest、bilinear、bicubic 等算法。
2、图像旋转
⼀般的旋转是以图像的中⼼为原点,将图像上的所有像素都旋转⼀个相同的⾓度。
在MATLAB中,进⾏图像旋转的函数是imrotate,它的常见调⽤⽅法如下:
B=imrotate(A,angle)
B=imrotate(A,angle,method)
B=imrotate(A,angle,method,bbox)
其中,A是要旋转的图像,angle是旋转的⾓度;method是插值⽅法,可以为nearest、bilinear、bicublic等;bbox是指旋转后的显⽰⽅式,有两种选择,⼀种是crop,旋转后的图像效果跟原图像⼀样⼤⼩,⼀种是loose,旋转后的图像包含原图。
(⼆)图像的正交变换
1、离散傅⾥叶变换(DFT)
设f(x,y)是在空间域上等间隔采样得到的M×N的⼆维离散信号,x和y是离散实变量,u和v为离散频率变量,则⼆维离散傅⾥叶变换对⼀般地定义为:
F u,v=
1
MN
f x,y exp
N?1
y=0
M?1
x=0
j2π
xu
M
+
yv
N
(u=0,1,…,M-1;v=0,1,…,N-1)
f x,y=
1
MN
F u,v exp
N?1
v=0
M?1
u=0
j2π
xu
M
+
yv
N
(x=0,1,…,M-1;y=0,1,…,N-1)
傅⾥叶变换有快速算法FFT,使⽤FFT可以快速提⾼傅⾥叶变换的速度。
MATLAB⼯具箱中有常见的傅⾥叶变换函数和反变换函
数。
Y=fft2(X)Y=fft2(X,m,n)
Y=ifft2(X)Y=ifft2(X,m,n)
以正变换为例,X是要进⾏⼆维傅⾥叶变换的矩阵,m、n是返回的变换矩阵Y的⾏数和列数,如果m、n⼤于X的维数,则在Y
相应的位置补0。
Y=ffts?ift(X)
把傅⾥叶变换操作得到的结果中零频率成分移到矩阵的中⼼,这有利于观察频谱。
2、离散余弦变换(DCT)
⼆维正DCT表⽰形式为:
F0,0=1
f(x,y)
N?1
y=0
N?1
x=0
F u,0=
2
N
f(x,y)cos
π2x+1u
2N
(u≠0) N?1
y=0
N?1
x=0
F0,v=
2
N
f(x,y)cos
π2x+1v
2N
(v≠0) N?1
y=0
N?1
x=0
F u,v=2
N
f(x,y)cos
π2x+1u
2N
cos
π2x+1v
2N N?1
y=0
N?1
x=0
其中,f(x,y)是⼆维空间向量元素,F(u,v)是变换系数矩阵之元素。
在MATLAB中,提供两种进⾏图像处理的DCT变换函数:
B=dct2(A)
B=dct2(A,[m,n])
B=dct2(A,[m n])
其中,A是输⼊的图像,B是返回的DCT的变换系数,m、n分别是返回的DCT变换系数B的⾏数和列数。
B=idct2(A)
idct2⽤于计算⼆维离散余弦逆变换,是dct2的逆变换,其调⽤格式与dct2函数相同。
五、实验步骤
(⼀)图像的⼏何变换
1、编写MATLAB⽂件,读取索引图像⽂件“rice.png”,分别执⾏以下操作:
(1)放⼤0.2倍;
(2)放⼤8倍,并⽤最近邻插值算法进⾏插值;
(3)放⼤8倍,并⽤双线性变换法进⾏插值;
(4)在⼀幅图上显⽰原图、以及(1)~(3)的结果图像。
2、编写MATLAB⽂件,读取索引图像⽂件“cameraman.tif”,分别执⾏以下操作:
(1)顺时针旋转45°;(注意⾓度正负)
(2)使⽤crop⽅式显⽰旋转后的图像;
(3)使⽤loose⽅式显⽰旋转后的图像;
(4)在⼀幅图上显⽰原图、以及(1)~(3)的结果图像。
(⼆)图像的正交变换
1、编写MATLAB⽂件,⽣成⼀个矩形函数,并对该函数进⾏正交变换,
(1)⼀般离散FT;
(2)补零后的离散FT;
(3)频率原点平移后的FT;
(4)在⼀幅图上显⽰原图、以及(1)~(3)的结果图像。
2、编写MATLAB⽂件,读取图像⽂件“autumn.tif”,并对该函数进⾏正交变换,
(1)将彩⾊图像转变为灰度图像;
(2)离散DCT;
(3)将幅值⼩于10的DCT系数置为零后进⾏反DCT;
(4)在⼀幅图上显⽰原图、以及(1)~(3)的结果图像。
并给
DCT结果添加颜⾊条。
(三)选做实验:频域滤波
1、编写MATLAB⽂件,读取数字图像“saturn.tif”,⽤巴特沃斯滤波器去除图像中的椒盐噪声。
(1)添加椒盐噪声imnoise(I);
(2)傅⾥叶变换;
(3)频率原点平移后的FT;
(4)⽤巴特沃斯滤波器去除椒盐噪声;
(5)在⼀幅图上显⽰(1)~(4)的结果图像。
六、实验结果与分析
(⼀)图像的⼏何变换
1、图像的缩放与插值
通过放⼤0.2倍(缩⼩)的图像可以看到因为丢点操作在显⽰时⼤⼩不变导致图像模糊,像素分块明显。
在使⽤最近邻插值算法进⾏插值放⼤8倍后,因为每个原像素原封不动地复制映射到对应的像素中,虽然在放⼤图像的同时保留了所有的原图像信息,但是产⽣了锯齿现象。
在使⽤双线性变换法进⾏插值放⼤8倍的图像中,相较于上⼀张更加平滑,但是图像变得有些模糊,细节⽅⾯不明显了。
2、图像旋转
通过两种⽅式旋转后的图像可以看到,crop⽅式是对旋转后的图像进⾏了裁剪,保持输出图像与输⼊图像的尺⼨⼀致,loose ⽅式保证了旋转之后得到的图⽚还是完整。
(⼆)图像的正交变换
1、编写MATLAB⽂件,⽣成⼀个矩形函数,并对该函数进⾏正交变换:
傅⾥叶变换的物理意义是将图像的灰度分布函数变换为频率分布函数,通过⼆维快速傅⾥叶变换后的图像的四个⾓对应低频成分,中央对应的是⾼频成分,能量沿着垂直和⽔平分布对应的是图像中的矩形窗;补零变换后的图像克服了栅栏效应和频率泄露带来的频率辨认困难问题;离散傅⾥叶变换变换结果是关于原点对称的两个半周期,通过中⼼频移显⽰完全的周期。
2、编写MATLAB⽂件,读取图像⽂件并对该函数进⾏正交变换:
通过离散余弦变换可以看到图像的重要可是信息都集中在DCT 变换的左上⾓⼀⼩部分系数中,其余⼤部分接近零,将幅值⼩于10的DCT 系数置为零后进⾏反DCT 得到的压缩的图像,⽐较变换前后的图像,可以发现视觉效果相差很⼩,压缩的效果⽐较理想。
(三)选做实验:频域滤波
因为Butterworth低通滤波器在带通和带阻之间有平滑的过渡带,⾼频信号没有完全滤除,在抑噪效果良好的同时,图像变得更加模糊了。