图像处理第八周备课_第1页
图像处理第八周备课_第2页
图像处理第八周备课_第3页
图像处理第八周备课_第4页
图像处理第八周备课_第5页
已阅读5页,还剩82页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

图图 像像 处处 理理 第第4 4章章 图像变换图像变换 4.1 图像Radon变换 4.2 Hadamard变换 4.3 离散余弦变换 4.4 图像傅里叶变换 4.5 图像小波变换 4.6 其他图像变换 4.1 4.1 图像图像RadonRadon变换变换 X射线计算机层析摄影仪即CT扫描仪,它的问世是二十 世纪医学中的奇迹,其原理是基于不同的物质有不同的X射 线衰减系数。如果能够确定人体的衰减系数的分布,就能 重建其断层或三维图像。但通过X射线透视时,只能测量到 人体的直线上的X射线衰减系数的平均值(是一积分)。当 直线变化时,此平均值(依赖于某参数)也随之变化,能 否通过此平均值以求出整个衰减系数的分布呢? 人们利用数学中的拉东变换解决了此问题,拉东变换已成为 CT理论的核心。首创CT理论的A.M.Cormark(美)及第一台 CT制作者C.N.Hounsfield(英)因而荣获1979年诺贝尔医学和 生理学奖。 图像图像RadonRadon变换的基本原理变换的基本原理 二维函数f(x,y)的投影是其在确定方向上的线积分。 例如f(x,y)在垂直方向上的二维线积分为f(x,y)在X轴上的投 影。 例如f(x,y)在水平方向上的二维线积分为f(x,y)在Y轴上的投 影。 图像图像RadonRadon变换的基本原理(绪变换的基本原理(绪1 1 ) 可以在任意角度计算函数的投影,即任意角度上都存在 函数Radon变换,图像f(x,y)在任意一个角度上的Radon变 换的投影定义为: 图像图像RadonRadon变换的基本原理(绪变换的基本原理(绪2 2 ) Radon变换:指将计算图像上的变换为在某一种指定角度 射线方向上投影的变换方法。下图为Radon变换的几何关系 示意图。 图像图像RadonRadon变换应用变换应用 Matlab中提供了函数radon用来完成图像Radon变换,该 变换实质上是计算指定方向上图像矩阵的投影。 R=radon(I,theta):计算图像I在theta矢量指定的 方向上的Radon变换。 R,xp=radon():R的各行返回theta各方向上 Randon变换值,xp矢量表示沿X轴相应的坐 标值。图像I的中心在floor(size(I)+1)/2),在x 轴上对应为0。 例4-1】图像Radon变换。 设计下面程序进行图像的Radon变换。 A= imread(D:hehua.jpg); C,x1=radon(A,0); D,x2=radon(A,30); subplot(1,3,1); imshow(A) subplot(1,3,2); plot(x1,C) subplot(1,3,3); plot(x2,D) (a) 被变换的图像A (b) 0度方向投影 (c) 30度方向投影 读入图像,然后调用radon函数,变换后绘制出图4-1(a)- (c)所示图形。可以看到图像变换后得到的是一个线图,也就 是说Radon变换后变成了一维数组。变换的基本原理是在指定 方向进行灰度投影计算。 以图像中心作为原点,向水平方向投影,在区间-1500 1500上有颜色值(白色为1,黑色为0),颜色值和在9*104 左右,如图图4-1(b)所示。 以图像中心作为原点,向与水平成30度角的方向投影,在 稍大一些的区间上有颜色值,颜色值投影相加的情况显示在 图4-1(c)中。 (a) 被变换的图像A (b) 0度方向投影 (c) 30度方向投影 函数函数IradonIradon Matlab也提供了函数iradon用来进行逆Radon变换 。例题4-2先利用radon函数计算一组旋转角度下 的Radon变换R,R是二维数组,记载着对应于每个 角度的变换后的数据。然后利用R及旋转角度,使 用函数iradon重建图像。 【例4-2】利用逆Radon变换复原图像。 设计如下程序 B= imread(D:heye.jpg); T=0:10:180; C, x=radon(B,T); D=iradon(C,T); subplot(1,3,1); imshow(B) subplot(1,3,2); imagesc(T, x, C) subplot(1,3,3); image(D) (a) 原图像 (b) 变换曲线集合 (c) 复原图像 图4-2 图像逆radon变换复原图像(1) 程序中语句T=0:10:180定义了一个向量T,共有19个元素。调 用函数语句C, x=radon(B,T)中,如果角度T是一个向量,那 么C, x中的C就是一个二维数组,用来表示多条变换后的曲 线。 多条变换后的曲线绘制在一起,形成图4-2(b)所示图形,横轴 表示180度,纵轴表示每条曲线的高度。 从图4-2可以看出复原的结果与原图有些差别,这是由于在 Radon变换的过程中损失了一些数据等原因造成的。 4.2 4.2 HadamardHadamard变换变换 Hadamard变换与Radon变换有着本质的区别。 Hadamard变换,等价于把原图像矩阵左右分别 乘以一个矩阵。这两个矩阵都是正交矩阵,称为 Hadamard变换矩阵。 Hadamard变换矩阵元素都是1或-1,为正交矩 阵。 4.2 4.2 HadamardHadamard变换变换 Matlab没有提供图像Hadamard变换功能,不过提供了求 Hadamard变换矩阵的功能。例如使用命令hadamard(8)能够 得到下面8 8的Hadamard变换矩阵。 1 1 1 1 1 1 1 1 1 -1 1 -1 1 -1 1 -1 1 1 -1 -1 1 1 -1 -1 1 -1 -1 1 1 -1 -1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 -1 1 -1 1 1 1 -1 -1 -1 -1 1 1 1 -1 -1 1 -1 1 1 -1 【例4-4】图像Hadamard变换。 设计下面程序: A= imread(D:BC.jpg); B= imread(D:005.jpg); B=rgb2gray(B) A1=imresize(A,64 64); B1=imresize(B,64 64); s=size(A1); A1=double(A1); B1=double(B1); H1=hadamard(s(1); H2=hadamard(s(2); A2=H2*A1*H1/sqrt(s(1)*s(2); B2=H2*B1*H1/sqrt(s(1)*s(2); subplot(1,4,1);imshow(A1); subplot(1,4,2); imshow(A2) subplot(1,4,3);imshow(B1); subplot(1,4,4); imshow(B2) 可以使用下面例题程序 实现图像的Hadamard变 换。 程序的运行结果显示在图4-4中。 在这个例题中,因为A1与B1维数一样,都是方阵,所以H1与H2 也是维数一样的。在语句A2=H2*A1*H1/sqrt(s(1)*s(2)中,之 所以缩小sqrt(s(1)*s(2)倍,是因为乘积以后得到的矩阵数值 太大,缩小后便于绘制图形。 其实,从这个例题也可以得到启示,把图像看作函数(或矩 阵),那么数学上的函数(或矩阵)变换都可以用到图像上 来。 (a)原图像BC.jpg b) 图像BC.jpg变换结果 (c) 图像005.jpg (d) 图像005.jpg变换结果 图4-4 图像Hadamard变换 4.3 4.3 离散余弦变换离散余弦变换 离散余弦变换(DCT)将图像表示为具有不同振幅 和频率的余弦曲线的和。 Matlab提供了函数dct2来计算图像的二维离散余 弦变换。 一幅图像的大部分可视特征信息都可以用少量的 DCT系数来表示,图像的jpg压缩格式主要是基于 离散余弦变换方法。 离散余弦变换函数 在这一节中,先通过例题从直观上观察离散 余弦变换与反(逆)离散余弦变换的变换结 果,对这种变换的一些特性进行直观地分析 。同时学习使用Matlab提供的离散余弦变换 函数dct2与逆离散余弦变换函idct2 1.Dct2函数 【例4-5】利用函数dct2对图像进行离散余弦变换。 A= imread(D:6.bmp); A=rgb2gray(A) B= imread(D:7.jpg); B=rgb2gray(B) C= imread(D:a.bmp); C1=im2bw(C); A1=dct2(A); B1=dct2(B); C2=dct2(C1); subplot(1,6,1);imshow(A) subplot(1,6,2);imshow(A1) subplot(1,6,3);imshow(B) subplot(1,6,4);imshow(B1) subplot(1,6,5);imshow(C1) subplot(1,6,6);imshow(C2) 程序中调用的文件a.jpg不是灰度图像,所以使用函数 im2bw(C)直接把该图像化为二值图像。其他两个图象本来 就是二值图像,所以没有进行转换。使用函数dct2进行离 散余弦变换后得到的新矩阵维数不变。A大小为57 85,B 大小为73 91, C1大小为14 13,变换后得到的A1、B1 、C2大小与变换前一样。绘制出的图形如图4-5所示。 把变换后得到的矩阵称为系数阵。从图4-5可以看出, 变换后得到的系数阵的左上角白色成分比右下角多,说明 系数阵较大的值都集中在左上角。 图4-5 离散余弦变换的系数矩阵(1) 使用命令A1(1:8,1:8)能够得到矩阵A1左上角8 8大小子 块,下面是8 8子块内的数据。从数据上也可以看到左上 角数据比较大,另外左上角第一个元素与其他元素相比要 大很多。 ans = 1.0e+004 * 1.2177 -0.1828 0.2727 0.0043 0.0798 0.1704 0.0139 0.0232 0.1274 0.1328 0.0076 -0.0086 -0.0217 -0.1234 -0.0518 -0.0128 0.2169 0.1333 -0.0837 -0.0605 -0.0565 -0.0905 0.0131 0.0149 -0.0366 -0.0115 -0.0984 -0.1745 0.0623 0.1602 0.0065 0.0278 0.0858 -0.0607 -0.0592 0.1425 0.0311 -0.0454 -0.0019 -0.0309 -0.0003 -0.1039 -0.0027 0.1417 -0.0196 -0.0169 0.0463 -0.0100 0.1632 0.0170 -0.1038 0.0104 -0.0018 -0.0252 -0.0420 -0.0149 -0.1174 -0.0683 0.1254 0.0873 -0.0680 -0.0202 0.0045 -0.0158 从矩阵C2的数据可以看出,左上角数据也比较大,左上角第 一个元素与其他元素相比要大很多。 矩阵C2数据比较少,所以把矩阵C2显示在下面: 2.Idct2函数 逆离散余弦变换就是把一个系数矩阵变换成对应的图像。 【例4-7】利用函数idct2对图像进行逆离散余弦变换。 D= imread(D:00.jpg); D1=rgb2gray(D); s=size(D1); D2=dct2(D1); D3=idct2(D2); P=zeros(s);P1=P;P2=P;P3=P; P1(1:10,1:10)=D2(1:10,1:10); P2(1:30,1:30)=D2(1:30,1:30); P3(1:60,1:60)=D2(1:60,1:60); E1=idct2(P1); E2=idct2(P2); E3=idct2(P3); subplot(2,3,1); imshow(D1); subplot(2,3,2); imshow(D2); subplot(2,3,3);image(D3) subplot(2,3,4); image(E1); subplot(2,3,5); image(E2); subplot(2,3,6); image(E3) 程序运行结果显示在图4-7中。 图4-7 使用逆离散余弦变换复原图像 (a) (b) (c) (d) (e) (f) (a)为原图像,(b)离散余弦变换系数阵,(c)使用离散余弦变换系数矩阵D2复原出的图 像,(d) 使用矩阵P1复原出的图像,(e) 使用矩阵P2复原出的图像,(f) 使用矩阵P3复原 出的图像。 程序首先对灰度图像D1实行离散余弦变换,然后马上使 用语句D3=idct2(D2)进行逆变换,这次逆变换的结果显示在 图4-7(c)中。 为了研究离散余弦变换与逆变换,故对离散余弦变换系 数矩阵D2进行截取,截取不同的部位赋给了P1、P2、P3。 其中P1左上角10 10大小的块取自系数矩阵D2左上角10 10 区域,P1的其余元素都为0;P2左上角30 30大小的块取自 系数矩阵D2左上角30 30区域,其余元素都为0;P3左上角 60 60大小的块取自系数矩阵D2左上角60 60大小的块,其 余元素都为0;使用P1、P2、P3复原的图像分别显示在图4- 7(d)、(e)、(f)中。 观察图4-7(f),该图像已经接近原图像了。这个复原只使 用了系数矩阵D2 60 60大小的数据,与D2维数220 220比 较起来,显然小的多,大约1/40左右。事实上,这就是离散 余弦变换用于图像压缩的主要依据。 需要指出的是,把例4-7程序中语句 P3(1:60,1:60)=D2(1:60,1:60); 修改为 P3(5:s(1),10:s(2)=D2(5:s(1),10:s(2); 修改后只是让P3的左上角小部分为0,把D2的绝大部分都复 制给了P3。 但是,这样修改以后,复原出的图像几乎看 不见任何物体,这是因为能量主要集中在系 数矩阵的左上角的缘故。 其实,任何一个矩阵都可以当作离散余弦变 换系数矩阵,然后把这个变换系数矩阵还原 成图像,但是由于这个变换系数矩阵不是由 离散余弦变换而来,所以,一般复原后的图 像都没有实际意义。 离散余弦变换的数学表达离散余弦变换的数学表达 在数学上,离散余弦变换是这样定义的: 设A是一个M行N列的灰度图像(二维数组或矩阵),那 么对A实行离散余弦变换就是使用表达式(4-1)进行计算 ,得到新的M行N列矩阵B, 其中 , (4-1 ) 当矩阵A给定后,M与N便被固定,所以 也成为固定 的已知数, 不会随p、q的变化而改变。 在这一转化过程中,每计算得到矩阵B的一个元素, 就需要使用A中的所有元素参与进来,进行大量的计 算。在数学意义上是以m,n为变量嵌套求和,在计算 机上就是以m,n为变量进行嵌套循环。 上面表达式4-1只是计算矩阵B的一个元素,如果要把 矩阵B的所有元素都求出来,就还需要针对p,q进行 嵌套循环。 1.离散余弦变换的程序实现 【例4-10】自己制作函数,使其能够基本完成dct2函 数的功能。 设计下面程序: A= imread(D:6.bmp); s=size(A); M=s(1);N=s(2); ap0=sqrt(1/M); ap=sqrt(2/M); aq0=sqrt(1/N); aq=sqrt(2/N); for p=1:M-1 for q=1:N-1 k=0; for m=0:M-1 for n=0:N-1 k=A(m+1,n+1)*cos(pi*(2*m+1)*p/(2*M)*cos(pi*(2*n+1)*q/(2*N)+ k; end end B(p+1,q+1)=ap*aq*k; end end 程序就是依据式(4-1)编 制的,m与n的循环就是固定 p与q后计算两个求和式。为 了与公式中m与n相对应, m 与n都从0开始循环,这样才 与公式中的余弦函数中的m 与n一致。而A的下标却应 该变为A(m+1,n+1)。 应该注意重新赋值语句k=0 的位置。 【注】在Matlab中,一个字母的大写小写可以表示两个变量 ,如上面的m、n与M、N。 程序运行完以后,得到了变换后矩阵B。在命令窗口输入命 令:B(1:8,1:8) 运行后得到下面数据: 0 0 0 0 0 0 0 0 0 3.1966 0.4548 -1.0221 -2.3586 -3.5915 0.2820 -0.1867 0 3.2506 -0.7966 -2.3354 -2.6033 -1.6117 1.7294 -0.7727 0 2.8561 -3.6397 -5.7716 5.4701 2.2185 -0.4061 1.9407 0 0.6969 0.0161 0.0704 0.9009 -0.9455 -0.1281 -0.3589 0 -0.1388 0.0890 -0.0930 1.1784 1.0243 0.5744 -0.9208 0 0.2026 -4.4089 1.3351 2.0211 -2.0069 -0.4574 -0.2817 0 -1.2372 -0.2571 2.3764 1.1782 -1.7051 -0.8342 0.4443 与例题4-5列出的数据比较,除了第一行与第一列不同外,其 他都是一样的。说明了这个程序是可行的。因为第一行与第 一列使用的乘积系数 与其他位置不同,所以需要再另添 加程序,这个工作留为习题。 2.离散余弦变换的矩阵表示 一般来说,数学表达式(例如式(4-1)与程序(如例4-10 中的程序)都是比较难读的,可以根据自己的知识背景选择 其中一种方式理解离散余弦变换。 其实,还可以用矩阵运算方式表示离散余弦变换。 式(4-1)中的乘积求和计算式可以化为下面矩阵乘积表示形 式: (4-2) A是原图像,大小为M N。 这样(4-2)式与(4-1)式就是等价的,循环求和运算就可 以变成三个矩阵的乘法。 (4-2)式中的P与Q称为离散余弦变换矩阵,可以看出变换矩 阵P与Q是方阵,只决定于它们的维数M或N。 P为M M的正交矩阵,一般形式为: Q 是大小为N N的正交矩阵,一般形式为: 【例4-11】自己制作函数生成离散余弦变换的变换矩阵。 设计下面程序: M=14; for i=2:M for j=1:M P(i,j)=sqrt(2/M)*cos(i-1)*(2*j-1)*pi)/(2*M); end end P(1,:)=sqrt(1/M); P14=P 运行程序能够得到14 14大小的变换矩 阵P14。如果把程序语句M=14修改为 M=13,把P14=P修改为P13=P,那么就 能够得到13 13大小的变换矩阵P13。 使用P14与 P13计算例题4-5中 图像矩阵C1的离散余弦变换, 即使用表达式P14*C1*Q13进 行计算,得到的变换结果与例 题4-5中得到的C2是相同的。 3. 逆离散余弦变换定义如下面式(4-3)所示。 (4-3) 观察(4-3)中的表达式, 与离散余弦变换定义中的 深刻就是一样的。求和表达式中也有很多相同的成分,例如 ,余弦函数表达式是相同的。不同的是 与 互换了位 置,并且这回是先p与q在变化,求和得出A的一个元素后, 再循环m与n求A的所有元素。 离散余弦变换矩阵与基函数离散余弦变换矩阵与基函数 1.离散余弦变换矩阵生成函数dctmtx Matlab提供了函数dctmtx来生成离散余弦变换矩阵,相当于例 题4-11实现的功能。 【例4-13 】利用函数dctmtx生成离散余弦变换矩阵,然后使用 该变换矩阵对图像进行离散余弦变换。 设计下面程序: A0= imread(D:a.jpg); A=im2bw(B0); s=size(A); M=s(1);N=s(2); P=dctmtx(M); Q=dctmtx(N); B= P*A*Q; 该程序首先使用函数dctmtx生成两个离散余弦变换矩阵P与Q ,P与Q均为方阵,P的大小等于A的行数,Q的大小等于A的列 数。然后使用离散余弦变换的矩阵定义式计算,求出变换后 的矩阵。实验结果显示与例题4-5中得到的C2结果相同。 为了进一步验证,使用语句C5=imresize(A,12 12)把程序 中图像a.jpg变为12 12大小,然后使用函数T=dctmtx(12) 生成下面变换矩阵: 因为要变换的矩阵已经变为方阵,所以只需要左边乘以这 个矩阵,右边乘以这个变换矩阵的转置(也是该矩阵的逆) 就可以了。 使用了3种方法: 1)调用函数Dct2; 2)完善了例题4-10中的方法; 3)例题4-13中的方法。 最后得到的结果一样,都 是下面显示的结果,从而 验证了这几种方法的有效 性。 2.离散余弦变换矩阵与逆离散余弦变换矩阵的关系 【例4-14】做实验研究离散余弦变换矩阵与逆离散 余弦变换矩阵的关系。 设计下面程序: B0= imread(D:a.jpg); B=im2bw(B0); P=dctmtx(14); Q=dctmtx(13); C=dct2(B); D=P*C*Q; E=B-D; find(abs(E)0.000001) 程序运行的结果是: ans = Empty matrix: 0-by-1 说明B、D两个矩阵对应元素的差值的绝对值没有大于 0.000001的,也就是说B与D(基本)相同。语句 D=P*C*Q也说明P与Q就是逆变换矩阵。 结论就是:离散余弦变换矩阵与逆离散余弦变换矩阵 互为转置,离散余弦变换阵如果为P,那么它的逆离散 余弦变换矩阵就是P(离散余弦变换矩阵与逆离散余 弦变换矩阵都是正交矩阵,所以转置就是逆)。 事实上,可以用数学方法证明上面结论。 的含义与(4-1)式中定义的相同。 关于基函数,可以初步得到如下性质: 1)当p=0并且q=0时,得到的一个基函数是常数,一般称为 DC基函数。 2)对于其他基函数,固定p与q后,都可以看作是以m与n为 自变量的二元离散函数。 3)随着p、q的增加,基函数的自身频率也在增加。 3.离散余弦变换基函数 基函数是数学上一个非常重要的概念。1、x、x2、x3乘 以系数加到一起能够组合成任意的多项式,1、x、x2、x3 就是一组基函数。简单有规律的基函数可以构造出一个函数集 合或者函数空间。 离散余弦变换可以用它的基函数组合而成。 下面4-4式就表示离散余弦变换的基函数,一共M*N个。 (4-4) 4.4 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,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 复杂图像傅里叶变换结果 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,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逆傅里叶变换复原图像 程序中首先进行傅里叶变换,然后进行逆傅里叶变换,对逆 变换结果取模(因为傅里叶变换后一般是复数),然后重新 绘制出来。从图像上看几乎看不出复原图像与原图像有区别 ,但是由于机器计算精度有限,另外计算时必然要进行截断 ,所以原图像与复原图像之间是有细小差别的。 运行例4-17后,再使用下面命令段,就可以看出A与A2之间的 细微差别。 A2=double(A2); E=A-A2; E(55:60,70:80) ans = 1.0e-013 * 从上面数据可以看出复原后的图像与原图像还是有差别的, 虽然差别是在10的-13次幂级上。 3.利用傅里叶变换函数识别图像中物体 离散余弦变换与傅里叶变换都是非常重要的图像处理方 法,为了说明傅里叶变换的用处,下面给出了例4-18用来进 行对象识别。 【例4-18】利用图像傅里叶变换识别图像中物体。 设计下面程序: A0= imread(D:zifu.jpg); A=im2bw(A0); B0= imread(D:a.jpg); B=im2bw(B0); C=real(ifft2(fft2(A).*fft2(B,207,202); subplot(1,3,1) imshow(A) subplot(1,3,2) imshow(C, ) thresh=min(C(:)+10; subplot(1,3,3) imshow(C0.0001) 那么返回结果为: ans = Empty matrix: 0-by-1 说明A与A2是(基本)相同的。 使用图像3.jpg,得到了相同的结论,如图4-27所示。其中, 每个图象矩阵的维数都一样,为176 128。 (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,db1); BB=idwt2(CA2,CH2,CV2,CD2,db1); subplot(1,4,1); imshow(A) subplot(1,4,2); image(AA); axis off subplot(1,4,3); imshow(B) subplot(1,4,4); image(BB); axis off 设计左面程序: 程序运行结果如图4-28所示。 (a) 原图像 (b) 重构后 (c) 原图像 (d) 重构后 图4-28 逆小波变换进行图像的重构 原图像与重构后的图像是一样的,可以在例4-25程序后面 加入下面语句,来分析计算原图像与重构后的图像的差别。 A1=double(A); E=A-A1; E(55:60,70:80) Find(E Lo_D,Hi_D,Lo_R,Hi_R=orthfilt(db1) Lo_D = 0.2806 0.5611 0.5726 Hi_D = 0.5726 -0.5611 0.2806 Lo_R = 0.5726 0.5611 0.2806 Hi_R = 0.2806 -0.5611 0.5726 前两个滤波器是用于分解的低通滤波器Lo_D与用于分解 的高通滤波器Hi_D;后两个滤波器是用于重构的低通滤波 器Lo_R与用于重构的高通滤波器Hi_R。 把例4-28程序中语句: CA,CH,CV,CD = dwt2(A2,db1); 改为: CA,CH,CV,CD = dwt2(A2,Lo_D,Hi_D); 运行结果为图4-33所示。 图4-33 函数dwt2的 另外一种调用方法 事实上,CA,CH,CV,CD = dwt2(X,wname)与 CA,CH,CV,CD = dwt2(X,Lo_D,Hi_D),前者是使用指定 的小波进行变换,后者是按照指定的滤波器进行小波变换 ,两者的操作方法本质上是相同的。因为滤波时使用的边 界添加方式不同,所以得到的滤波结果与例4-29有些差别。 在使用函数dwt2时,可以指定边界添加方式。 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) 。 图像小波变换的应用图像小波变换的应用

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论