《傅里叶、小波变换.ppt》由会员分享,可在线阅读,更多相关《傅里叶、小波变换.ppt(40页珍藏版)》请在三一办公上搜索。
1、,4.4 图像傅里叶变换,傅里叶变换是数学上,特别是工程数学上常用的变换方法。Matlab中的二维快速傅里叶变换函数是fft2,该函数对应的逆傅里叶变换函数是ifft2。图像傅里叶变换函数在这一节中,还是通过Matlab中的傅里叶变换函数直观上理解分析傅里叶变换。,1.图像傅里叶变换函数fft2【例4-16】利用傅里叶变换函数变换图像,观察分析变换结果。A=imread(D:0371.bmp);B=imread(D:00.bmp);A1=fft2(A);B1=fft2(B);subplot(1,4,1);imshow(A)subplot(1,4,2);imshow(A1)subplot(1,4
2、,3);imshow(B)subplot(1,4,4);imshow(B1),设计左面程序进行傅里叶变换。程序的运行结果是图4-12所示。,(a)(b)(c)(d)(a)原图像0371,(b)图像0371变换结果,(c)图像00,(b)图像00变换结果 图4-12 图像傅里叶变换结果,由于图4-12中的原图像简单,所以能够看出变换后结果的一些特征。如果把上面程序中的原图像换为图4-13中的(a)与(c),那么得到的变换数据显示出来,视觉上觉得杂乱无章。,(a)(b)(c)(d)(a)原图像0010,(b)图像0010变换结果,(c)图像0041,(b)图像0041变换结果 图4-13 复杂图像
3、傅里叶变换结果,2.图像逆傅里叶变换函数ifft2【例4-17】利用傅里叶变换函数变换图像,然后用逆傅里叶变换函数复原图像,观察分析比较。设计如下程序:A=imread(D:0010.jpg);A=rgb2gray(A);B=imread(D:0041.jpg);B=rgb2gray(B);C=imread(D:0371.bmp);D=imread(D:00.bmp);A1=fft2(A);B1=fft2(B);C1=fft2(C);D1=fft2(D);A2=abs(ifft2(A1);B2=abs(ifft2(B1);C2=ifft2(C1);D2=ifft2(D1);subplot(2,
4、4,1);imshow(A);subplot(2,4,2);imshow(B)subplot(2,4,3);imshow(C);subplot(2,4,4);imshow(D)subplot(2,4,5);image(A2);subplot(2,4,6);image(B2)subplot(2,4,7);imshow(C2);subplot(2,4,8);imshow(D2),程序的运行结果为图4-14所示。,图4-14逆傅里叶变换复原图像,程序中首先进行傅里叶变换,然后进行逆傅里叶变换,对逆变换结果取模(因为傅里叶变换后一般是复数),然后重新绘制出来。从图像上看几乎看不出复原图像与原图像有区别
5、,但是由于机器计算精度有限,另外计算时必然要进行截断,所以原图像与复原图像之间是有细小差别的。,图像傅里叶变换的数学描述,1.图像傅里叶变换因为图像矩阵是离散的,所以图像处理时多使用二维离散傅里叶变换。二维离散傅里叶变换定义如下:,我们他门是要变换的函数或矩阵,作为矩阵大小为M N。为了剖析二维离散傅里叶变换定义式,更深刻的理解该变换的含义,根据式(4-5),设计了例4-19来实现图像的二维离散傅里叶变换。该例题中的程序实现了二维离散傅里叶变换,但是与fft2函数不同,fft2函数使用的是快速傅里叶变换变换算法,在算法的质量与运行速度上都优于该例题中的程序。,(4-5),【例4-19】编写程序
6、计算图像的二维离散傅里叶变换。A=imread(D:shizi1.bmp);B=rgb2gray(A);B=double(B);s=size(B);M=s(1);N=s(2);for u=0:M-1 for v=0:N-1 k=0;for x=0:M-1 for y=0:N-1 k=B(x+1,y+1)*exp(-j*2*pi*(u*x/M+v*y/N)+k;end end F(u+1,v+1)=k;endendC=fft2(B);subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(C)subplot(1,3,3);imshow(F),根据式(4-5)设
7、计左面程序,2.图像傅里叶变换的矩阵表示离散傅里叶变换表达式(4-5)也可以改写为下面(4-6)形式:,(4-6),改写后进一步可以把式(4-6)变成矩阵乘积的形式:,式(4-7)中的P与Q分别是式(4-8)与(4-9)所示矩阵。,(4-8),称P与Q为二维离散傅里叶变换的变换矩阵。【思考题】二维离散傅里叶变换的变换矩阵与离散余弦变换矩阵有什么区别?3.图像逆傅里叶变换图像二维逆离散傅里叶变换的定义式如下式所示:,(4-9),(4-10),例4-21A0=imread(D:0.bmp);A=double(A0);s=size(A);M=s(1);N=s(2);for u=0:M-1 for x
8、=0:M-1 P(u+1,x+1)=(1/M0.5)*exp(-j*2*pi*(u*x/M);endendfor v=0:N-1 for y=0:N-1 Q(v+1,y+1)=(1/N0.5)*exp(-j*2*pi*(v*y/N);endend C=fft2(A);F=P*A*Q;subplot(1,3,1);imshow(A)subplot(1,3,2);imshow(C)subplot(1,3,3);imshow(F),Matlab中有很多关于小波变换的函数,其中二维小波变换函数都可以用在图像处理、图像压缩等领域。另外Matlab也提供了许多小波函数专门用于图像处理。二维小波变换 1.二
9、维小波变换母小波函数是指满足式 的函数,二维母小波函数的构造可由一维母小波函数的张量积形成,也可以采用非张量积的方法构造。,4.5 图像小波变换,假定函数 为二维母小波函数。,令,(4-11),由(4-11)式定义的,产生于二维母小波函数,依赖于参数a、b、c的一组函数就是小波基函数。二维连续小波变换定义为:,(4-12),二维离散小波变换定义为:,(4-13),令式(4-13)中的,即得到常用的一种离散小波变换:,(4-14),【注】母小波函数与小波基函数都是小波函数。,2.小波函数Haar小波就是一个常用的小波函数。(1)Haar小波Haar小波是最早使用的、简单的紧支撑小波,Haar小波
10、实际上是Daubechies小波族中的一个特例。,(4-15),利用(4-15)可以构造出二维小波函数。,(2)Daubechies小波Daubechies小波也有相应的数学描述。其中在Matlab中称为db1 的Daubechies小波与Haar小波是相同的。下面不研究其数学描述,只通过图形显示一组二维Daubechies小波函数。,3.逆二维小波变换二维连续小波变换的逆小波变换定义为:,(4-17),其中,,二维离散小波变换的逆小波变换公式可以通过式(4-17)得到。假定对应于二维母小波 的对偶小波为:,则对应于式(4-12)至(4-14)有统一的逆小波变换(重构公式):,式(4-18)中
11、,表示内积。,Matlab图像小波变换函数,作为一种函数变换,小波变换也经常应用于图像处理中。1.小波变换函数的使用Matlab提供了相当多与图像处理相关的小波函数,下面介绍几个函数的使用。【例4-23】图像一层小波分解。设计下面程序:A0=imread(D:0011.jpg);A=rgb2gray(A0);CA1,CH1,CV1,CD1=dwt2(A,db1);subplot(1,5,1);imshow(A)subplot(1,5,2);image(CA1);axis offsubplot(1,5,3);imshow(CH1)subplot(1,5,4);imshow(CV1)subplot
12、(1,5,5);imshow(CD1),函数dwt2(A,db1)是对矩阵A进行一层小波变换,也称小波分解,db1指定使用的小波函数为一阶Daubechies小波。语句CA1,CH1,CV1,CD1=dwt2(A,db1)返回四个分解矩阵CA1,CH1,CV1,CD1,分别称为近似系数矩阵、水平细节系数矩阵、垂直细节系数矩阵、对角细节系数矩阵。该例题中A为480 640大小,CA1,CH1,CV1,CD1均为240 320大小。为了比较方便,把这些矩阵图形排成一行显示在一起,但实际上后面图形的大小是原图像大小的四分之一。,(a)原图像(b)近似CA1(c)水平细节CH1(d)垂直细节CV1(e
13、)对角细节CD1 图4-24 图像小波分解系数矩阵(1),从图4-24可以看出近似系数矩阵与原图像很接近,其他几个都是原图像的高频信息。,(a)原图像(b)近似(c)水平细节(d)垂直细节(e)对角细节 图4-27图像一阶小波重构(2),【例4-25】使用逆小波变换函数idwt2进行图像重构。A0=imread(D:0011.jpg);A=rgb2gray(A0);CA1,CH1,CV1,CD1=dwt2(A,db1);AA=idwt2(CA1,CH1,CV1,CD1,db1);B0=imread(D:3.jpg);B=rgb2gray(B0);CA2,CH2,CV2,CD2=dwt2(B,d
14、b1);BB=idwt2(CA2,CH2,CV2,CD2,db1);subplot(1,4,1);imshow(A)subplot(1,4,2);image(AA);axis offsubplot(1,4,3);imshow(B)subplot(1,4,4);image(BB);axis off,设计左面程序:,【例4-26】图像二层小波分解。A0=imread(D:3.jpg);A=rgb2gray(A0);C S=wavedec2(A,2,bior1.3);CA2=appcoef2(C,S,bior1.3,2);CH2=detcoef2(h,C,S,2);CV2=detcoef2(v,C,
15、S,2);CD2=detcoef2(d,C,S,2);CH1=detcoef2(h,C,S,1);CV1=detcoef2(v,C,S,1);CD1=detcoef2(d,C,S,1);subplot(2,4,1);imshow(A)subplot(2,4,5);image(CA2);axis off subplot(2,4,6);imshow(CH2)subplot(2,4,7);imshow(CV2)subplot(2,4,8);imshow(CD2)subplot(2,4,2);imshow(CH1)subplot(2,4,3);imshow(CV1)subplot(2,4,4);ims
16、how(CD1),设计右面程序:,程序的运行结果如图4-29所示。在显示二层分解系数的同时,为了比较,把一层小波分解系数也显示出来了。,(a)原图像(b)一层水平细节系数(c)一层垂直细节系数(d)一层对角细节系数,(e)二层近似系数(f)二层水平细节系数(g)二层垂直细节系数(h)二层对角细节系数 图4-29 二层小波分解系数示意图,3.小波变换函数wavedec2功能分析Matlab也提供了多层小波分解函数wavedec2,可以直接进行多层分解。【例4-31】函数wavedec2返回数据的结构分析。设计下面程序:A0=imread(D:3.jpg);A=rgb2gray(A0);C S=wavedec2(A,2,bior1.3);运行程序后得到了两个数组,一个是C,大小为1,24400;一个是S,大小为4,2,两个数组都是double型。C内存储内容为 CA(2)|CH(2)|CV(2)|CD(2)|CH(1)|CV(1)|CD(1),C内没有CA(1),是因为CA(1)可以用CA(2)、CH(2)、CV(2)与CD(2)相加得到,所以Matlab在开发函数wavedec2的时候,二层分解时返回的分解系数中没有CA(1)。三层分解时返回的分解系数中没有CA(1)、CA(2)。,