《小波图像分解与合成的设计报告内容(共15页).doc》由会员分享,可在线阅读,更多相关《小波图像分解与合成的设计报告内容(共15页).doc(15页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、精选优质文档-倾情为你奉上小波图像分解与合成的设计报告内容小波图像分解与合成的设计报告内容 一、小波图像分解与合成及阈值测试概述(一)、haar小波与Daubechies小波分解与重构概述 根据haar函数定义,可得出当N=2时,哈尔(haar)正规化变换矩阵为 ,因为haar矩阵是正交矩阵,具可分离变换性质,对二维的像素矩阵,可由连续2次运用一维的haar小波变换来实现,如对图像像素矩阵的每一行求变换后,再对其每一列求变换可得二维haar小波变换,这叫标准分解,如果交替地对每一行和每一列像素值进行变换,则为非标准分解。并且可利用矩阵形式的优点,对1N的像素矩阵分解成若干个12的矩阵与上述N=
2、2的haar正规化变换矩阵作一维的haar小波变换,减少计算量,实现haar小波分解。因为正规化的haar变换矩阵为对称变换矩阵,其逆变换矩阵和正变换的相同,只要把原来每次变换后得到的矩阵数值再作一次变换,则可以实现重构。Haar小波在时域上是不连续的,因此分析性能并不很好,但它的计算简单。这里程序采用非标准分解方法。在变换矩阵中,第一列变换得到图像像素均值,为图像像素低频分量,第二列得到图像像素差值,为高频分量,原像素值第i对像素分解的低频和高频分量值分别存在矩阵的i和N/2+i处。重构时取回这两个数值,再与逆变换矩阵相乘存回原处,则实现重构。 根据Daubechies小波的定义,可设计出一
3、组满足正交化要求的滤波器,利用卷积模板实现低通和高通功能,主要步骤为: 1利用Matlab中的Daubechies小波滤波器计算函数dbaux求出滤波器作模板系数,对dbN,滤波器长度为2N,这里求db9,其滤波器长度为18。2由于图像像素只有有限的2N个非零值,就需要解决边界问题。Matlab软件里缺省的分解模式sym采用对称周期化扩展技术。也就是将图像的四个边界先做对称处理的矩阵拓展,避免了边界的不连续性。如图(这里以256256为例,即从标号0到255): _|_|_|2 |1 |0 |0 |1 |2 |3 |.|252 |253 |254 |255 |255 |254 |253 |_|
4、_|_对1M的矩阵像数值,其dbN一次变换(低通、高通)后输出的总长度为M+2(N-1),矩阵拓展长度为M+4(N-1)。如对1256,一次变换后低通、高通系数总长度为272,则矩阵需对称拓展至288再作卷积运算。3将模板上系数与矩阵(一维)对应象素相乘再求和(卷积运算)。4将所得数存到相应位置。5模板右移两个像素,再做同样计算,直至计算完最后2N个像素为止。分解(正变换)与重构(逆变换)的滤波器可在MATLAB中用以下命令得到:逆变换的低通滤波器rh=dbaux(N)逆变换的高通滤波器rg(n)=(1)nrh(2Nn+1); (n=1,2,.,2N)正变换的低通滤波器h=rh(2N:1:1)
5、;正变换的高通滤波器g(n)=(1)nrh(n) ; (n=1,2,2N)重构过程为高低频滤波器与各个矩阵卷积后再相加来恢复图像数据的,卷积解释与分解类似,但要根据分解时扩展矩阵方式,重构时对矩阵向前或向后插入零,保证输出的矩阵长度为原矩阵长度。从定义可以知道,db1变换即为haar小波变换,所以对像素矩阵长度不为2的倍数的图像,haar小波变换也可以用同样方法作分解与重构(低通为0.5 0.5,高通为0.5 0.5)。如要正规化,分解与重构滤波器乘以 即可。这里的三级非标准小波分解与重构采用八带分解方法,即每级对低频部分分解,对每一级分解的高频部分不再进一步分解。(二)、关于阈值测试 小波变
6、换对图像压缩可以分为以下几个主要步骤:1.利用离散小波变换将图像分解成为低频分量,高频的水平边缘分量,垂直边缘分量和对角边缘分量。2.对低频和高频的图像根据人类的视觉生理和心理特点作不同的量化和编码处理,进行压缩。3.利用小波逆变换还原出原来的图像。其中量化工作有很多方式,这里采用阈值的设置,对采用不同小波变换后得到的低频和高频图像设置不同阈值后得到的分解图像的含“0”数目及重构产生的不同图像文件大小作分析,即为本次报告阈值测试的目的。程序用Matlab中小波函数分解图像,设置阈值后再重构保存图像,比较不同阈值设置的测试结果。这里要做一些补充说明:因为并没有要求对分解图像作进一步的量化及编码处
7、理后压缩存放,而是重构后存放,所以并不能对不同小波的压缩率好坏作出结论。只能根据测试结果及小波定义作一些概括性的分析。并且由于Matlab中保存PNG格式的图像文件,与其他程序(如photoshop 6.0)保存的PNG文件有偏差,这里为保证对比的一致性,对真彩色图像先用Matlab对图像文件读入后保存,再作测试,保证原始图像与重构图像存放条件的一致性。对索引图像,因为其读入图像矩阵数值并不是图像颜色值,对其作测试后重构的图像,失真程度厉害,不具有实际意义,最终还是转换为真彩色图像作比较,这里不作讨论。 二、源程序(程序注释中已含程序的使用方法) (1).3级非标准小波分解与重构程序 多级非标
8、准haar小波分解程序 l源程序: 多级非标准haar小波重构程序 l源程序: 多级非标准小波分解程序 l源程序: 多级非标准小波重构程序 l源程序: (2).haar小波3级非标准规格化分解和重构过程的演示程序 (使用自定义的haar函数,可自选图像文件,真彩色或索引色,但限于像素为2倍数的对称图像) l源程序1:l对不同图像格式的处理说明:如输入的是彩色真彩图片,要做如下处理: 装载入的图像数值矩阵X为三维矩阵,有R、G、B三个分量的二维数值,须分别对每一维的数据都做分解与重构,再转换为uint8数据类型显示其彩色图像。 如输入的是黑白图片,即输入的矩阵X为二维矩阵,只对其作分解与重构即可
9、。 (3)使用小波变换在不同阈值下压缩图像的测试程序(使用Matlab函数,可自选图像文件(真彩色或索引图)、小波函数、分解级数及阈值的增加值) l源程序:(4)不同小波在不同分解模式下3级分解与重构图像演示程序(课程设计内容外补充) l源程序:一:引言 本文从二维小波理论出发,对其在图像处理的应用上进行了一些分析和处理,力图反映出小波分析在图像处理方面有着其独特的特点。本文就以下几点进行阐述:小波基本概念图像压缩图像消噪图象增强图象平滑处理 二:小波基本概念 小波定义:设 ,其傅立叶变换为 ,当 满足允许条件,即完全重构条件或恒等分辨条件. 时,我们称 为一个基本小波或母小波,将母函数 经伸
10、缩和平移后,得 。 我们称其为一个小波序列。其中a为伸缩因子,b为平移因子。小波变换是一种信号的时间尺度分析方法,他具有多分辨率分析的特点,而且在时频两域都具有表征信号局部特征的能力,是一种窗口大小固定不变但其形状可变,时间窗和频率窗都可变的时频局部化分析方法。即再低频部分具有较高的频率分辨率和时间分辨率,在高频部分具有较高的时间分辨率和较低的频率分辨率,很适合探测正常信号中夹带的瞬态反常现象并展示其成分,所以被誉为分析信号的显微镜。波分析是把信号分解成低频al和高频dl两部分,在分解中,低频al中失去的信息由高频dl捕获。在下一层的分解中,又将al分解成低频a2和高频d2两部分,低频a2中失
11、去的信息由高频d2捕获,如此类推下去,可以进行更深层次的分解。二维小波函数是通过一维小波函数经过张量积变换得到的,二维小波函数分解是把尺度j的低频部分分解成四部分:尺度j+1的低频部分和三个方向(水平、垂直、斜线)的高频部分。三:图像压缩对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩。在同样的通信容量下,如果图像数据压缩后在传输,就可以传输更多的图像信息。例如,用普通的电话线传输图像信息。图像压缩研究的就是寻找高压缩比的方法且压缩后的图像要有合适的信噪比,在压缩传输后还要恢复原信号,斌且在压缩、传输、恢复的过程中,还要求图像的失真度小。这就是图像压缩的研究问题。
12、 图像数据往往存在各种信息的冗余、如空间冗余、信息熵冗余 、视觉冗余 和结构冗余等等。所谓压缩就是去掉各种冗余,保留对我们有用的信息。图像压缩的过程常称为编码。相对的,图像的恢复当然就是解码了。 图像压缩的方法通常可分为有失真编码和无失真编码两大类: 无失真编码方法如改进的霍夫曼编码。 有失真编码方法的还原图像较之原始图像存在着一些误差,但视觉效果是可以接受的。常见的方法有预测编码、变换编码、量化编码、信息熵编码、分频带编码和结构编码等等。 而将小波分析引入图像压缩的范畴也是一个重要的手段,并且有着它自己的特点。它的特点在于压缩比高、压缩速度快,压缩后能保持信号与图像的特征基本不变,且在传递过
13、程中可以抗干扰等等。 下面我们就举一个粒子来说明怎样用小波分析进行图像压缩。 例如现在有一个二维图像(文件名为),我们利用二维小波分析来进行图像压缩。由原理可知,一个图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的。高分辨率(高频)子图像上大部分点的数值都接近于0,越是高就越是明显。而对于一个图像来说,表现一个图像的最主要的部分是低频部分,所以最简单的压缩方法是利用小波分解去掉图像的高频部分而只保留低频部分。程序大致如下:clear%装入图像load wbarb;%显示图像syms X;subplot(221);image(coast);colormap
14、(map)title(原始图像);axis squaredisp(压缩前图像X的大小);whos(coast)%对图像用小波进行层小波分解c,s=wavedec2(X,2,bior3.7);%提取小波分解结构中的一层的低频系数和高频系数cal=appcoef2(c,s,bior3.7,1);%水平方向ch1=detcoef2(h,c,s,1);%垂直方向cv1=detcoef2(v,c,s,1);%斜线方向cd1=detcoef2(d,c,s,1);%各频率成份重构a1=wrcoef2(a,c,s,bior3.7,1);h1=wrcoef2(h,c,s,bior3.7,1);v1=wrcoef
15、2(v,c,s,bior3.7,1);d1=wrcoef2(d,c,s,bior3.7,1);c1=a1,h1;v1,d1;%显示分频信息subplot(222);image(c1);axis square;title (分解后低频和高频信息);%进行图像压缩%保留小波分解第一层低频信息%首先对第一层信息进行量化编码ca1=appcoef(c,s,bior3.7,1);ca1=wcodemat(ca1,440,mat,0);%改变图像高度并显示ca1=0.5*ca1;subplot(223);image(ca1);colormap(map);axis square;title(第一次压缩图像)
16、;disp(第一次压缩图像的大小为:);whos(ca1)%保留小波分解第二层低频信息进行压缩ca2=appcoef2(c,s,bior3.7,2);%首先对第二层信息进行量化编码ca2=wcodemat(ca2,440,mat,0);%改变图像高度并显示ca2=0.25*ca2;subplot(224);image(ca2);colormap(map);axis square;title(第二次压缩图像);disp(第二次压缩图像的大小为:);whos(ca2)输出结果如图:NameSizeBytesclass压缩前图像X256256Double array第一次压缩图像Ca1135135D
17、ouble array第二次压缩图像Ca2757545000Double array在这里可以看出,第一次压缩我们是提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3大小)。第二次压缩实提取第一层分解低频部分的低频部分(即第二层的低频部分),其压缩比较大(约为1/12),压缩效果在视觉上也基本过得去。 上面的保留原始图像中低频信息的压缩办法只是一种最简单的压缩办法。它不需经过其他处理即可获得较好的压缩效果。当然,对于上面的例子我们还可以只提取小波分解的第三、第四层的低频信息。从理论上说,我们可以获得任意压缩比的压缩图像。只不过在对压缩比和图像质量都有较高要求时,它
18、就不如其他编码方法了。下面我们在举一个例子,这一次用 中函数来对上图进行压缩。 Clear;%装入图形信号load wbarb;%显示图像subplot(221);image(X);colormap(map);title(原始图像);disp(压缩前图像的大小);whos(X);axis square;%对图像进行压缩%对图像用db3小波进行二层小波分解c,s=wavedec2(X,5,db3);thr,sorh,keepapp=ddencmp(cmp,wv,X);Xcomp,cxc,lxc,perf0,perfl2=wdencmp(gbl,c,s,db3,5,thr,sorh,keepapp
19、);%将压缩后的图像于原始图像相比较subplot(222);image(Xcomp);colormap(map);title( 压缩后的图像);disp(压缩后图像的大小);whos(Xcomp)%显示有关参数disp(小波分解系数中值为0的系数个数百分比);disp(perf0);disp(压缩后剩余能量百分比);disp(perfl2);输出结果如下:小波分解系数中值为0的系数个数百分比:49.8088压缩后剩余能量百分比:99.9754 总之,是事无绝对。一种压缩图像的方法不可能尽善尽美。要想很好的进行图像的压缩,就需要综合的利用多种其他技术,特别是数据编码和解码算法。转帖小波图像分解
20、与合成(例子)% 该函数是根据对所输入的png格式的真彩图像、小波类型(db9或haar)% 和相应的阈值进行了三级非标准小波harr或db9的分解和重构,从而达到了对原图像的压缩处理的% 目的。它首先把通过原图像分离后的某颜色分量作为二维图像矩阵,通过调用自定义的二维离散% 小波变换函数mydwt2(),并依据指定的小波基函数wavename进行二维离散的行、列小波变换,% 得到了经变换后的相应颜色分量的近似分量% cA,水平细节分量cH,垂直细节分量cV,对角细节% 分量cD和中间分量cM,然后调用自定义的图像输出函数outrgb分别把中间分量以及cA、cH、cV、% cD合并后的图像阵进
21、行R、G、B合成输出图像文件,其中某颜色分量的cA又做为下一级二维离散的% 行、列小波分解的输入图像阵,如此共完成三次。% 其次,把经过三级非标准小波分解后的各颜色分量的各级水平细节分量、垂直细节分量、对角细% 节分量矩阵通过调用自定义函数make_0()完成了相应矩阵元素数值小于阀值系数的个数统计,并% 对它们进行小于阀值系数元素置0处理,且把分量尽数返回,以便三级的非标准小波重构处理。% 最后,将返回得到的各颜色分量的第三级水平细节分量、垂直细节分量、对角细节分量矩阵和第% 三级分解后的近似分量作为参数,通过调用自定义的二维离散小波反变换函数myidwt2()进行二维% 离散的列、行重构,
22、得到了经重构后的近似分量cA 和中间分量cM,把该中间分量cM以及近似分量% cA分别和经置0处理后第二级cH、cV、cD行列扩展,同时进行R、G、B合成,后调用自定义的图像% 输出函数outrgb()输出图像文件。其中各颜色分量的cA又做为下一级二维离散的列、行小波重构% 的输入图像阵,如此共完成三次。最终得到了压缩处理的图像文件。% 读入图像文件picchar=strcat(mypic,.png)pic=imread(picchar);pic=double(pic);% 对原真彩图像进行R、G、B分离cAr0=pic(:,:,1);cAg0=pic(:,:,2);cAb0=pic(:,:,
23、3);% 第1级非标准分解cAr1,cHr1,cVr1,cDr1,cMr1 = mydwt2(cAr0,wavename);cAg1,cHg1,cVg1,cDg1,cMg1 = mydwt2(cAg0,wavename);cAb1,cHb1,cVb1,cDb1,cMb1 = mydwt2(cAb0,wavename);% 输出经第1级非标准分解后的图像文件outrgb(cMr1,cMg1,cMb1,wavename,threshold,_1_row);outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,
24、cHb1,.cVb1,cDb1),wavename,threshold,_1_col);% 第2级非标准分解cAr2,cHr2,cVr2,cDr2,cMr2 = mydwt2(cAr1,wavename);cAg2,cHg2,cVg2,cDg2,cMg2 = mydwt2(cAg1,wavename);cAb2,cHb2,cVb2,cDb2,cMb2 = mydwt2(cAb1,wavename);% 输出经第2级非标准分解后的图像文件outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,.cV
25、b1,cDb1),wavename,threshold,_2_row);outrgb(merge(merge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,.cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1.),wavename,threshold,_2_col);% 第3级非标准分解cAr3,cHr3,cVr3,cDr3,cMr3 = mydwt2(cAr2,wavename);cAg3,cHg3,cVg3,cDg3,cM
26、g3 = mydwt2(cAg2,wavename);cAb3,cHb3,cVb3,cDb3,cMb3 = mydwt2(cAb2,wavename);% 输出经第2级非标准分解后的图像文件outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,.cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1.),wavename,threshold,_3_row);outrgb(merge(merge(mer
27、ge(cAr3,cHr3,cVr3,cDr3),cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),.merge(merge(merge(cAg3,cHg3,cVg3,cDg3),cHg2,cVg2,cDg2),cHg1,cVg1,cDg1),.merge(merge(merge(cAb3,cHb3,cVb3,cDb3),cHb2,cVb2,cDb2),cHb1,cVb1,cDb1),.wavename,threshold,_3_col);% 统计经过三级非标准小波分解后的各颜色分量的各级水平细节分量、垂直细节分量、对% 角细节分量的相应矩阵元素数值小于阀值系数的个数,并对它们进行
28、小于阀值系数元素% 置0处理。zeronum=0;cHr3,cVr3,cDr3,cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,num_0=make_0(cHr3,cVr3,cDr3,.cHr2,cVr2,cDr2,cHr1,cVr1,cDr1,threshold);zeronum=zeronum+num_0;cHg3,cVg3,cDg3,cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,num_0=make_0(cHg3,cVg3,cDg3,.cHg2,cVg2,cDg2,cHg1,cVg1,cDg1,threshold);zeronum=zeronum+num_0;c
29、Hb3,cVb3,cDb3,cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,num_0=make_0(cHb3,cVb3,cDb3,.cHb2,cVb2,cDb2,cHb1,cVb1,cDb1,threshold);zeronum=zeronum+num_0;% 把0的总数写入文本文件zerotxt=strcat(wavename,_,threshold,_,zero,.txt)csvwrite(zerotxt,zeronum);% 第1级非标准重构cAr2,cMr3 = myidwt2(cAr3,cHr3,cVr3,cDr3,wavename);cAg2,cMg3 = myidw
30、t2(cAg3,cHg3,cVg3,cDg3,wavename);cAb2,cMb3 = myidwt2(cAb3,cHb3,cVb3,cDb3,wavename);% 输出经第1级非标准重构后的图像文件outrgb(merge(merge(cMr3,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cMg3,cHg2,.cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cMb3,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1.),wavename,threshold,_1_icol);outrgb(merge(m
31、erge(cAr2,cHr2,cVr2,cDr2),cHr1,cVr1,cDr1),merge(merge(cAg2,cHg2,.cVg2,cDg2),cHg1,cVg1,cDg1),merge(merge(cAb2,cHb2,cVb2,cDb2),cHb1,cVb1,cDb1.),wavename,threshold,_1_irow)% 第2级非标准重构cAr1,cMr2 = myidwt2(cAr2,cHr2,cVr2,cDr2,wavename);cAg1,cMg2 = myidwt2(cAg2,cHg2,cVg2,cDg2,wavename);cAb1,cMb2 = myidwt2(c
32、Ab2,cHb2,cVb2,cDb2,wavename);% 输出经第2级非标准重构后的图像文件outrgb(merge(cMr2,cHr1,cVr1,cDr1),merge(cMg2,cHg1,cVg1,cDg1),merge(cMb2,cHb1,.cVb1,cDb1),wavename,threshold,_2_icol);outrgb(merge(cAr1,cHr1,cVr1,cDr1),merge(cAg1,cHg1,cVg1,cDg1),merge(cAb1,cHb1,.cVb1,cDb1),wavename,threshold,_2_irow);% 第3级非标准重构cAr0,cMr
33、1 = myidwt2(cAr1,cHr1,cVr1,cDr1,wavename);cAg0,cMg1 = myidwt2(cAg1,cHg1,cVg1,cDg1,wavename);cAb0,cMb1 = myidwt2(cAb1,cHb1,cVb1,cDb1,wavename);% 输出经第3级非标准重构后的图像文件,即最终图像文件outrgb(cMr1,cMg1,cMb1,wavename,threshold,_3_icol);outrgb(cAr0,cAg0,cAb0,wavename,threshold,_result);%function cA,cH,cV,cD,cM=mydwt2
34、(mypic_RGB,wavename)%此函数是利用MATLAB工具箱提供的一维离散小波变换函数dwt()对传递进来的图像矩阵mypicRGB% 进行相应的小波类型分解处理,其中参数wavename是小波类型。它借助于使用了指定的小波基函% 数wavename 的dwt()首先对图像矩阵进行行分解,而后进行列分解。生成了近似分量cA,水平% 细节分量cH,垂直细节分量cV,对角细节分量cD和中间分量cM% 变量初始化cA=;cH=;cV=;cD=;cM=;cAm=;cDm=;% 进行逐行行分解变换% cA1,cD1为临时近似,细节分量,把两分量进行列数扩展合成为中间分量矩阵以便输出x=siz
35、e(mypic_RGB);for i=1:x(1)cA1,cD1=dwt(mypic_RGB(i,:),wavename);cAm=cAm;cA1;cDm=cDm;cD1;endcM=cAm,cDm;% 对两临时分量进行逐列列分解变换,最后生成近似分量cA,水平细节分量cH,垂直细节分量cV,对% 角细节分量cDcAm=cAm;cDm=cDm;x=size(cAm);for i=1:x(1)cA1,cD1=dwt(cAm(i,:),wavename);cA=cA;cA1;cV=cV;cD1;endx=size(cDm);for i=1:x(1)cA1,cD1=dwt(cDm(i,:),wave
36、name);cH=cH;cA1;cD=cD;cD1;end% 转置矩阵cA=cA;cH=cH;cV=cV;cD=cD;%function mypic_RGB,cM=myidwt2(cA,cH,cV,cD,wavename)% 此函数实现了二维离散小波反变换,即重构。它是利用MATLAB工具箱所提供的一维离散小波反变% 换函数idwt()对传递进来的近似分量cA、水平细节分量cH、垂直细节分量cV和对角细节分量cD进% 行相应的小波类型重构处理,其中参数wavename是小波类型。它借助于使用了指定的小波基函数% wavename的idwt()首先对四个分量矩阵进行列反变换,而后行反变换。重构出
37、中间过程图像矩% 阵cM和原始图像矩阵mypic_RGB。cA1=;cD1=;% 进行逐列列重构变换,得到过程矩阵cA1、cD1,再对它们列数扩展合成为中间图阵cMcA=cA;cH=cH;cV=cV;cD=cD;mypic_RGB=;x=size(cA);for i=1:x(1)temp=idwt(cA(i,:),cV(i,:),wavename);cA1=cA1;temp;endx=size(cH);for i=1:x(1)temp=idwt(cH(i,:),cD(i,:),wavename);cD1=cD1;temp;endcA1=cA1;cD1=cD1;cM=cA1,cD1;% 对上述得
38、到的分量cA1、cD1作为过程细节分量进行逐行行重构变换,得到图像矩阵mypic_RGBx=size(cA1);for i=1:x(1)temp=idwt(cA1(i,:),cD1(i,:),wavename);mypic_RGB=mypic_RGB;temp;end%function =outrgb(pic_R,pic_G,pic_B,wavename,threshold,level)% 该函数确定了图像在各像素位置上的红、绿、蓝的强度值组合。实现了R、G、B各分量组合后所% 成的真彩图像的文件输出temp=size(pic_R);pic=zeros(temp(1),temp(2),3);f
39、or i=1:temp(1);for j=1:temp(2);pic(i,j,1)=pic_R(i,j);pic(i,j,2)=pic_G(i,j);pic(i,j,3)=pic_B(i,j);endend%输出RGB图像,即真彩图像。imwrite(pic/255,strcat(pic,_,wavename,_,threshold,level,.png);%function cH3,cV3,cD3,cH2,cV2,cD2,cH1,cV1,cD1,count.=make_0(cH3,cV3,cD3,cH2,cV2,cD2,cH1,cV1,cD1,threshold)% 该函数功能是本课程役计的
40、关键,它完成了对经过三级非标准分解后各分量图矩阵中所有元素数% 值小于阀值的进行置0处理,为后面进行三级非标准重构原始图像从而实现图像压缩奠定了基础。% 输入经过非标准分解后颜色分量的各级的水平细节分量、垂直细节分量、对角细节分量和阀值% threshold其中数字表示非标准处理的级别。输出各分量图矩阵中所有元素数值小于阀值系数置% 0处理后所对应的各级的水平细节分量、垂直细节分量、对角细节分% 量,并统计它们系数为0个% 数count。threshold_num=str2num(threshold);count=0;% 借助临时分量对第三级非标准分解的水平细节分量、垂直细节分量、对角细节分量
41、进行行、列数% 扩展合成cM_matrix3,并对数值小于阀值系数进行置0处理,并统计矩阵元素数值小于阀值系数的% 个数。cM_cA3=cD3cM_cA3=zeros(size(cM_cA3,1),size(cM_cA3,2);num=size(cM_cA3,1)*size(cM_cA3,2);cM_matrix3=cM_cA3,cH3;cV3,cD3;cM_size=size(cM_matrix3);for i=1:cM_size(1)for j=1:cM_size(2)if abs(cM_matrix3(i,j)=threshold_numcount=count+1;cM_matrix3(
42、i,j)=0;endendend% 对所合成的cM_matrix3重新分离出置0处理后的水平细节分量、垂直细节分量和对角细节分量,并% 精确了矩阵元素数值小于阀值系数的数目。cH3=cM_matrix3;cV3=cM_matrix3;cD3=cM_matrix3;cH3(1+size(cM_cA3,1):2*size(cM_cA3,1),:)=;cH3(:,1:size(cM_cA3,2)=;cV3(1:size(cM_cA3,1),:)=;cV3(:,1+size(cM_cA3,2):2*size(cM_cA3,2)=;cD3(1:size(cM_cA3,1),:)=;cD3(:,1:siz
43、e(cM_cA3,2)=;count=count-num;% 借助临时分量对第二级非标准分解的水平细节分量、垂直细节分量、对角细节分量进行行、列数% 扩展合成cM_matrix2,并对数值小于阀值系数进行置0处理,并统计矩阵元素数值小于阀值系数的 % 个数。cM_cA2=cD2cM_cA2=zeros(size(cM_cA2,1),size(cM_cA2,2);num=size(cM_cA2,1)*size(cM_cA2,2);cM_matrix2=cM_cA2,cH2;cV2,cD2;cM_size=size(cM_matrix2);for i=1:cM_size(1)for j=1:cM_
44、size(2)if abs(cM_matrix2(i,j)=threshold_numcount=count+1;cM_matrix2(i,j)=0;endendend% 对所合成的cM_matrix2重新分离出置0处理后的水平细节分量、垂直细节分量和对角细节分量,并% 精确了矩阵元素数值小于阀值系数的数目。cH2=cM_matrix2;cV2=cM_matrix2;cD2=cM_matrix2;cH2(1+size(cM_cA2,1):2*size(cM_cA2,1),:)=;cH2(:,1:size(cM_cA2,2)=;cV2(1:size(cM_cA2,1),:)=;cV2(:,1+size(cM_cA2,2):2*size(cM_cA2,2)=;cD2(1:size(cM_cA2,1),:)=