1、实验三 图像变换一、实验目的1、结合实例学习几种常见的图像变换,并通过实验体会图像变换的效果;2、理解和掌握图像旋转、缩放、离散傅里叶变换和离散余弦变换的原理和应用,掌握利用MATLAB 编程实现图像变换的方法。二、实验内容1、图像的几何变换,主要实现图像的缩放与旋转,要求变换中用最近邻插值算法实现,或用双线性变换法实现并比较;2、图像的正交变换,主要实现离散傅里叶变换(DFT)与离散余弦变换(DCT)。三、实验要求 1、独立完成;2、编写 MATLAB 程序,并对程序中所调用函数的功能进行必要的说明(可用“help 函数名”进行查询);3、调试运行后保存实验结果(注意保存的文件格式);4、完
2、成实验报告。四、实验原理(一)图像的几何运算(变换)1、比例缩放比例缩放是指将给定的图像在x 轴方向按比例缩放fx 倍,在y 轴方向按比例缩放fy 倍,从而获得一副新的图像。在MATLAB 中,进行图像比例缩放的函数是 imresize,它的常见调用方法如下:B=imresize(A,scale) B=imresize(A,mrowsncols) B=imresize(A,scale,method)其中,A 是要进行缩放的图像矩阵,scale 是进行缩放的倍数,如果scale 小于 1,则进行缩小操作,如果scale 大于 1,则进行放大操作。 mrowsncols用于指定缩放后图像的行数和列
3、数, 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 是指旋转后的显示方式
4、,有两种选择,一种是 crop,旋转后的图像效果跟原图像一样大小,一种是loose,旋转后的图像包含原图。(二)图像的正交变换1、离散傅里叶变换(DFT)设 f(x,y)是在空间域上等间隔采样得到的 MN 的二维离散信号,x 和y 是离散实变量,u 和 v 为离散频率变量,则二维离散傅里叶变换对一般地定义为:1𝑀1𝑁1𝑥𝑢𝑦𝑣𝐹(𝑢, 𝑣) =𝑀𝑁 𝑓(𝑥, 𝑦)exp &
5、#119895;2𝜋( 𝑀 +𝑥=0 𝑦=0𝑁 )1𝑀1𝑁1(u=0,1,M-1;v=0,1,N-1)𝑥𝑢𝑦𝑣𝑓(𝑥, 𝑦) =𝑀𝑁 𝐹(𝑢, 𝑣)exp 𝑗2𝜋 ( 𝑀 +𝑢=0 𝑣=0𝑁 )(x=
6、0,1,M-1;y=0,1,N-1)傅里叶变换有快速算法FFT,使用 FFT 可以快速提高傅里叶变换的速度。MATLAB 工具箱中有常见的傅里叶变换函数和反变换函数。𝑌 = 𝑓𝑓𝑡2(𝑋)𝑌 = 𝑓𝑓𝑡2(𝑋, 𝑚, 𝑛)𝑌 = 𝑖𝑓𝑓𝑡2(𝑋)𝑌 = 𝑖𝑓
7、19891;𝑡2(𝑋, 𝑚, 𝑛)以正变换为例,X 是要进行二维傅里叶变换的矩阵,m、n 是返回的变换矩阵Y 的行数和列数,如果m、n 大于X 的维数,则在Y 相应的位置补 0。𝑌 = 𝑓𝑓𝑡𝑠𝑖𝑓𝑡(𝑋)把傅里叶变换操作得到的结果中零频率成分移到矩阵的中心,这有利于观察频谱。2、离散余弦变换(DCT)二维正DCT 表示形式为:1 𝑁1𝑁1𝐹
8、(0,0) = 𝑁 𝑓(𝑥, 𝑦)𝑥=0 𝑦=02 𝑁1𝑁1𝜋(2𝑥 + 1)𝑢𝐹(𝑢, 0) =𝑁 𝑓(𝑥, 𝑦) cos 𝑥=0 𝑦=02𝑁(𝑢 0)2 𝑁1𝑁1𝜋(2𝑥 + 1)𝑣
9、;𝐹(0, 𝑣) =𝑁 𝑓(𝑥, 𝑦) cos 𝑥=0 𝑦=02𝑁(𝑣 0)2 𝑁1𝑁1𝜋(2𝑥 + 1)𝑢𝜋(2𝑥 + 1)𝑣𝐹(𝑢, 𝑣) = 𝑁 𝑓(𝑥, 𝑦) cos 𝑥=0
10、𝑦=02𝑁 cos 2𝑁其中,f(x,y)是二维空间向量元素,F(u,v)是变换系数矩阵之元素。在MATLAB 中,提供两种进行图像处理的DCT 变换函数:B=dct2(A) B=dct2(A,m,n)B=dct2(A,mn)其中,A 是输入的图像,B 是返回的DCT 的变换系数,m、n 分别是返回的DCT 变换系数B 的行数和列数。B=idct2(A)idct2 用于计算二维离散余弦逆变换,是dct2 的逆变换,其调用格式与dct2 函数相同。五、实验步骤(一)图像的几何变换1、编写MATLAB 文件,读取索引图像文件“rice.png”,分别
11、执行以下操作:(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) 补
12、零后的离散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) 频率原点平
13、移后的FT;(4) 用巴特沃斯滤波器去除椒盐噪声;(5) 在一幅图上显示(1)(4)的结果图像。六、实验结果与分析(一)图像的几何变换1、图像的缩放与插值通过放大 0.2 倍(缩小)的图像可以看到因为丢点操作在显示时大小不变导致图像模糊,像素分块明显。在使用最近邻插值算法进行插值放大 8 倍后,因为每个原像素原封不动地复制映射到对应的像素中,虽然在放大图像的同时保留了所有的原图像信息,但是产生了锯齿现象。在使用双线性变换法进行插值放大 8 倍的图像中,相较于上一张更加平滑,但是图像变得有些模糊,细节方面不明显了。2、图像旋转通过两种方式旋转后的图像可以看到,crop 方式是对旋转后的图像进行了
14、裁剪,保持输出图像与输入图像的尺寸一致,loose 方式保证了旋转之后得到的图片还是完整。(二)图像的正交变换1、编写 MATLAB 文件,生成一个矩形函数,并对该函数进行正交变换:傅里叶变换的物理意义是将图像的灰度分布函数变换为频率分布函数,通过二维快速傅里叶变换后的图像的四个角对应低频成分,中央对应的是高频成分,能量沿着垂直和水平分布对应的是图像中的矩形窗;补零变换后的图像克服了栅栏效应和频率泄露带来的频率辨认困难问题;离散傅里叶变换变换结果是关于原点对称的两个半周期, 通过中心频移显示完全的周期。2、编写MATLAB 文件,读取图像文件并对该函数进行正交变换:通过离散余弦变换可以看到图像的重要可是信息都集中在DCT 变换的左上角一小部分系数中,其余大部分接近零,将幅值小于 10 的DCT 系数置为零后进行反DCT 得到的压缩的图像,比较变换前后的图像,可以发现视觉效果相差很小,压缩的效果比较理想。(三)选做实验:频域滤波因为 Butterworth 低通滤波器在带通和带阻之间有平滑的过渡带,高频信号没有完全滤除,在抑噪效果良好的同时,图像变得更加模糊了。