二维小波分解与重构程序实例
小波分解与重构
![小波分解与重构](https://img.taocdn.com/s3/m/e793fd01ae45b307e87101f69e3143323868f54d.png)
小波分解与重构我理解的小波分解是将一个多频率组成的波通过小波分解将所有频率分解出来,重构就是将这些分频率加起来得到最后的重构结果,于是写了个这样的程序clcclose all;clear all;clc;fs=612;[reg,sta,data]=readmydata('beijing08.dat');data{1:end};A=ans(2:end);for i=1:609;if A(i)>50.0;A(i)=(A(i-12)+A(i+12))/2;endendfor i=609:612;if A(i)>50.0;A(i)=(A(i-12)+A(i-24))/2;endend%信号时域波形figure(1);plot(1:612,A);%使用db5小波进行尺度为7时的分解[c,l]=wavedec(A,9,'db5');%从小波分解结构[c,l]重构信号xdataa0=waverec(c,l,'db5');%检查重构效果figure(2);subplot(3,1,1);plot(A);title('原始信号')subplot(3,1,2);plot(a0);title('重构信号')subplot(3,1,3);plot(A-a0);title('误差信号')err=max(abs(A-a0))%重构第1~5层高频细节信号d9=wrcoef('d',c,l,'db5',9); d8=wrcoef('d',c,l,'db5',8); d7=wrcoef('d',c,l,'db5',7); d6=wrcoef('d',c,l,'db5',6); d5=wrcoef('d',c,l,'db5',5); d4=wrcoef('d',c,l,'db5',4); d3=wrcoef('d',c,l,'db5',3); d2=wrcoef('d',c,l,'db5',2); d1=wrcoef('d',c,l,'db5',1); %显示高频细节信号figure(3);subplot(9,1,1);plot(d9,'LineWidth',2); ylabel('d9');subplot(9,1,2);plot(d8,'LineWidth',2); ylabel('d8');subplot(9,1,3);plot(d7,'LineWidth',2);ylabel('d7');subplot(9,1,4);plot(d6,'LineWidth',2);ylabel('d6');subplot(9,1,5);plot(d5,'LineWidth',2);ylabel('d5');subplot(9,1,6);plot(d4,'LineWidth',2);ylabel('d4');subplot(9,1,7);plot(d3,'LineWidth',2);ylabel('d3');subplot(9,1,8);plot(d2,'LineWidth',2);ylabel('d2');xlabel('时间 t/s');subplot(9,1,9);plot(d1,'LineWidth',2);ylabel('d1');%第1层高频细节信号的包络谱y=hilbert(d1);ydata=abs(y);y=y-mean(y);nfft=1024;p=abs(fft(ydata,nfft));figure(4);plot((0:nfft/2-1)/nfft*fs,p(1:nfft/2));xlabel('频率 f/Hz');ylabel('功率谱 P/W');小波分解与重构程序>> clearI=imread('C:\Documents and Settings\Administrator\桌面\暑期/cidian.bmp');I=rgb2gray(I);[X,map]=gray2ind(I);subplot(2,2,1);imshow(X,map);title('原始图像');X=double(X);sX=size(X);[cA,cH,cV,cD]=dwt2(X,'db4');A0=idwt2(cA,cH,cV,cD,' db4', sX);subplot(2,2,2);imshow(A0,map);title('db4小波重构');error1=max(max(abs(X-A0)))程序很简单,也很基础。
二维小波分解与重构程序实例
![二维小波分解与重构程序实例](https://img.taocdn.com/s3/m/6653a43dfc4ffe473368ab5f.png)
void TBmpViewWindow::CmAgent()
{
char ss[5];
int i,j,k,x,y;
AgentNum=5;ActiveAgent=5;SearchNum=0;
AgentLife=2;
SearchTime=0;
//
TWindow* SubWinPtr = 0;
TSubWindow::TSubWindow(TWindow* parent)
: TFrameWindow(parent)
{
Attr.Style |= WS_VISIBLE | WS_POPUP | WS_OVERLAPPEDWINDOW,
Attr.X = 100;
// facilitate receiving of clipboard change notifications. Could mix it in if
// an additional base was desired.
//
class TSubWindow : public TFrameWindow {
public:
TSubWindow(TWindow* parent);
~TSubWindow();
protected:
void EvSize(UINT sizeType, TSize& size)
{Invalidate(); TFrameWindow::EvSize(sizeType, size);}
int SearchTime;
unsigned short Image[32][32];
#define MAXAPPNAME 20
小波分解与重构
![小波分解与重构](https://img.taocdn.com/s3/m/933e84cb5fbfc77da269b1d8.png)
figure(2);
lev_1=lev+1;
for i=1:lev
cD=detcoef(C,L,i);
subplot(lev_1,1,i)
plot(cD);
ylabel(['cD',num2str(i)]);
Fs=1000; % 采样频率
Ts=1/Fs; % 采样间隔
N=1024; % 采样点数
t=[0:1/Fs:(N-1)/Fs]; %采样时刻
lev=5;
x=sin(2*pi*f1*t);
figure(1);
plot(t,x);
%%小波分解
[C,L]=wavedec(x,lev,'db10'); %C由[cAj,cDj,cDj-1,...,cD1]
subplot(2,2,4);
image(hd2+dd2+vd2+a1);colormap(map);
% 验证这些图像的长度都是sX
sX = size(X)
sa1 = size(a1)
shd2 = size(hd2)
norm(hd2+dd2+vd2+a1-X)
结果:
sX =
256 256
plot(A);
title('原始信号')
subplot(3,1,2);
plot(a0);
title('重构信号')
subplot(3,1,3);
plot(A-a0);
title('误差信号')
err=max(abs(A-a0))
小波分解与重构代码
![小波分解与重构代码](https://img.taocdn.com/s3/m/5faecdd833d4b14e85246835.png)
load leleccum;s = leleccum(1:3920);% 用db1小波函数对信号进行三尺度小波分解[C,L]=wavedec(s,2,'db1');figure(1);plot(s);title('leleccum原始信号');% 提取尺度1的低频系数cA1 = appcoef(C,L,'db1',1); %用小波分解框架[C.L]计算1层低频系数的近似值,小波基为db1% 提取尺度2的低频系数cA2 = appcoef(C,L,'db1',2);figure(2);subplot(2,1,1);plot(cA1);title('尺度1的低频系数');subplot(2,1,2);plot(cA2);title('尺度2的低频系数');% 提取尺度1的高频系数cD1 = detcoef(C,L,1); %用小波分解框架[C.L]计算1层高频系数的近似值,小波基为db1% 提取尺度2的高频系数cD2 = detcoef(C,L,2);figure(3);subplot(2,1,1);plot(cD1);title('尺度1的高频系数');subplot(2,1,2);plot(cD2);title('尺度2的高频系数');我给你大概标注了一下,但是你的程序有问题,% 小波图像压缩 - RGB 图像clear all;close all;% 读取图像im = input('输入图像');%输入图像名称,要加分号X=imread(im);% 输入要分解的小波层数和小波n=input('输入要分解的小波层数');%输入所要分解的层数wname = input('输入小波名称');%输入小波名称,也要加分号x = double(X);NbColors = 255;map = gray(NbColors);x = uint8(x);%把RGB图像转换成灰度图% x = double(X);% xrgb = 0.2990*x(:,:,1) + 0.5870*x(:,:,2) + 0.1140*x(:,:,3);% colors = 255;% x = wcodemat(xrgb,colors);% map = pink(colors);% x = uint8(x);% 对图像x进行n维小波分解x=imread(’ D:\a.jpg’);map=x;n=3wname='sym5';[c,s] = wavedec2(x,n,wname);% 使用默认参数选择各层不同的阈值alpha = 1.5; m = 2.7*prod(s(1,:));[thr,nkeep] = wdcbm2(c,s,alpha,m)% 使用上面的阈值和硬阈值处理进行图像压缩[xd,cxd,sxd,perf0,perfl2] = wdencmp('lvd',c,s,wname,n,thr,'h');disp('压缩效率');disp(perf0);% 重构(下面这个地方有问题,你这里是原始图像小波变换后进行重构,xd才是小波阀值压缩后重构的图像,cxd,sxd,是c,s经过阀值处理后得到的小波分解结构,也就是说xd=waverec2(cxd,sxd,wname);这个wdencmp函数不需要另外进行重构,你下面那些关于重构的都没用,而下面压缩后的图像才是重构后的图像,)R = waverec2(c,s,wname);rc = uint8(R);% 显示原始图像和压缩图像subplot(221), image(x);colormap(map);title('原始图像')subplot(222), image(xd);colormap(map);title('压缩后的图像')% 显示结果xlab1 = ['图像压缩后保留能量百分比',num2str(perfl2)];xlab2 = ['小波阀值压缩后置零系数百分比 ',num2str(perf0), ' %']; xlabel([xlab1 xlab2]);subplot(223), image(rc);colormap(map);title('重构图像');%计算图像大小disp('原始图像');imwrite(x,'original.tif');%将图像x保存为original.tif,下同imfinfo('original.tif')%显示图片original.tif详细信息,下同disp('压缩后的图像');imwrite(xd,'compressed.tif');imfinfo('compressed.tif')disp('重构后的图像');imwrite(rc,'decompressed.tif');imfinfo('decompressed.tif')。
二维haar小波变换
![二维haar小波变换](https://img.taocdn.com/s3/m/a68b68ca4793daef5ef7ba0d4a7302768e996f0b.png)
二维haar小波变换二维Haar小波变换是一种常用的图像处理方法,它可以将图像分解为不同频率的子图像,从而实现图像的压缩和去噪等功能。
本文将介绍二维Haar小波变换的基本原理、算法实现和应用案例。
一、基本原理Haar小波变换是一种基于小波分析的信号处理方法,它利用小波函数的特性对信号进行分解和重构。
二维Haar小波变换将二维图像看作是一个矩阵,通过对矩阵的行和列进行小波分解,可以得到图像的不同频率分量。
具体而言,二维Haar小波变换的基本原理如下:1. 将二维图像分解为4个子图像,每个子图像的尺寸是原图像的一半。
2. 对每个子图像进行小波分解,得到近似系数和细节系数。
近似系数表示低频分量,细节系数表示高频分量。
3. 重复以上步骤,将近似系数作为输入,继续进行小波分解,直到达到指定的分解层数。
4. 最后,通过对各个子图像进行合并和重构,得到原图像的小波变换结果。
二、算法实现二维Haar小波变换的算法实现相对简单,可以用矩阵运算来实现。
具体步骤如下:1. 将二维图像转换为灰度图像,并将像素值归一化到[0,1]的范围。
2. 初始化变换矩阵,用于进行小波分解和重构。
3. 对图像的行进行小波变换,得到近似系数和细节系数。
4. 对近似系数和细节系数的列进行小波变换,得到最终的小波变换结果。
三、应用案例二维Haar小波变换在图像处理中有广泛的应用。
以下是几个典型的应用案例:1. 图像压缩:通过对图像进行小波分解,可以将图像的能量集中在少数的系数上,从而实现对图像的压缩。
通过保留较大的系数,可以实现有损压缩;而通过保留较小的系数,可以实现无损压缩。
2. 图像去噪:图像的细节系数通常包含了图像中的噪声信息。
通过对细节系数进行阈值处理,可以将噪声去除,从而实现图像的去噪功能。
3. 图像增强:通过对图像的近似系数进行增强处理,可以提高图像的对比度和清晰度。
通过调整不同频率分量的权重,可以实现不同的增强效果。
4. 特征提取:小波变换可以将图像分解为不同频率的子图像,每个子图像包含了图像的一部分特征信息。
小波图像分解和重构程序每句都带解释
![小波图像分解和重构程序每句都带解释](https://img.taocdn.com/s3/m/fc947d80ccbff121dd3683d2.png)
小波图像分解程序:function coef=mywavedec2(x,N,wname) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 函数MYWA VEDEC2() 对输入矩阵x 进行dim 层分解,得到相应的分解系数矩阵y% 输入参数:x ——输入矩阵% N ——分解级数% wname ——分解所用的小波函数% 输出参数:coef ——分解系数矩阵,其结构如下:% coef = {cA_N;cV_N;cH_N;cD_N;cV_N-1;cH_N-1;cD_N-1;……;cV_1;cH_1;cD_1}% Copyright by Zou Yuhua ( chenyusiyuan ), original : 2007-11-10, modified: 2008-06-04 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 求出小波函数的滤波器组系数向量[Lo_D,Hi_D] = wfilters(wname,'d');% 画出原始图像imshow(x);title('Original Image');% 标明图像大小[r,c]=size(x);xlabel(['Size : ',num2str(r),'*',num2str(c)]);% 将矩阵x的数据格式转换为适合数值处理的double格式xd=double(x);coef=[];for i=1:N[cA,cV,cH,cD]=mydwt2(xd,Lo_D,Hi_D);% 第i 级小波分解xd=cA;% 将第i 级分解得到的低频系数矩阵作为第i+1 级分解的源矩阵outmp={cV;cH;cD};% 将第i 级分解得到的高频系数矩阵cV,cH,cD存入细胞矩阵outmp % 注意细胞矩阵的赋值是用大括号“{}”的,而普通矩阵赋值是用方括号“[]”% 细胞矩阵不要求其中的子矩阵的行列数都相同coef=[outmp;coef];% 将细胞矩阵outmp 存入输出矩阵coef,coef将由空矩阵变为细胞矩阵% 注意这里的方括号不能用大括号取代% 否则,使用大括号会将初始的coef空矩阵也作为细胞矩阵的子矩阵% 而且,在迭代中coef 将是一个不断嵌套的细胞矩阵,不便于后续处理和读取% 上面这个语句是一种有效的在迭代过程中保存数据的方法% 设待存数据为data,可以是单个数、向量或矩阵% 保存数据的矩阵为mat,初始为空矩阵:mat=[]% 则可按以下格式保存迭代过程产生的数据% mat=[mat;data];% 方括号内的分号“;”表示数据data 是按“列”排序的方式存入矩阵mat% mat=[mat,data];% 方括号内的逗号“,”表示数据data 是按“行”排序的方式存入矩阵mat% data 也可以在mat 前嵌入,即mat=[data;mat] 或mat=[data,mat]end% 迭代结束后,矩阵coef 中保存的是各级分解中的高频系数矩阵% 故需将迭代后得到的矩阵cA,即第dim 级低频矩阵存入矩阵coefcoef=[cA;coef];% 最后,小波系数矩阵coef 的结构如下% coef = {cA_N;cV_N;cH_N;cD_N;cV_N-1;cH_N-1;cD_N-1;……;cV_1;cH_1;cD_1}% 画出各级低频、高频系数矩阵% 首先建立一个名为“Wavelet Decomposition -- Wavelet Type: , Levels: ”的图像窗口figure('Name',['Wavelet Decomposition -- Wavelet Type: ',wname,' , Levels: ',num2str(N)]);% 图像的第1行显示低频系数,置中,左右两个subplot为空subplot(N+1,3,2);yt=uint8(coef{1});[yrow,ycol]=size(yt);imshow(yt);title( ['Approximation A',num2str(N)]);xlabel(['Size : ',num2str(yrow),'*',num2str(ycol)]);% 第2-(N+1)行显示各级高频系数titllist={['Vertical Detail V'];['Horizontal Detail H'];['Diagonal Detail D']};pn=2;% pn 是子图的显示序号for pr=1:Nfor pc=1:3subplot(N+1,3,pn+2);yt=[];% 为了使高频细节内容(轮廓、边缘)更清晰,将高频系数增加100灰度值yt=uint8(coef{pn})+100;[yrow,ycol]=size(yt);imshow(yt);title([ titllist{pc},num2str(N-pr+1)]);xlabel(['Size : ',num2str(yrow),'*',num2str(ycol)]);% 每行的第一个图像的Y轴,显示该行高频系数对应的分解级别if mod(pn+2,3)==1ylabel(['Level ',num2str(N-pr+1)]);endpn=pn+1;endendfunction [cA,cV,cH,cD]=mydwt2(x,Lo_D,Hi_D) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 函数MYDWT2() 对输入的r*c维矩阵x 进行二维小波分解,输出四个分解系数子矩阵[LL,HL,LH,HH]% 输入参数:x ——输入矩阵,为r*c维矩阵。
二维离散小波变换实验报告 - 实验报告
![二维离散小波变换实验报告 - 实验报告](https://img.taocdn.com/s3/m/e2cae7cd6529647d2628520d.png)
二维离散小波变换实验报告 - 实验报告二维离散小波变换实验报告2008-11-021. 实验题目对图像进行二维离散小波变换, 变换级数大于等于3级,然后统计系数中0的个数(百分比表示) 并进行重构, 最后计算重构图像的峰值信噪比(PSNR).数据:灰度图像lena.bmp或其它图像, 滤波器系数可以调用matlab中的wfilters函数获得, wfilters函数的使用请在matlab中help wfilters.另外,峰值信噪比计算公式:MN'2()ff,,,ijij255255,ij,,11PSNRMSE,,10lg,MSEMN,'{},{}ff1,1,,,,iMjNijij其中,分别表示原始图像和重建图像, 且. 注:实验中,边缘延拓的方法和具体的小波滤波器可以自己根据实验结果进行选择。
2. 实验步骤1) 生成原始灰度图像作为标准以便对比。
在matlab中导入LENA.bmp, 使用下列命令生成,结果如图1所示。
imagesc(LENA.cdata, [0,255]); colormap(gray);图1 原始灰度图像2) 用matlab小波工具包作出分解合成图,如图2。
第 - 1 - 页图2 直接使用matlab小波工具箱进行分析3) 写代码实现DWT正反变换,见附件MyDwt2D.dsw。
我在代码中构建了一个CDwt类,输入为:@ const char* lpInputImage : 输入图像文件名@ int nAnalysisLevel : 分析级数,本题要求大于等于3@ int nThreshold = 0 : 阈值,默认值为0(即不进行阈值化)公用方法有四个为:void ForwadDwt(); /* 实现DWT变换 */void InverseDwt(); /* 实现DWT逆变换 */void StatisticThenOutput(const char* lpStatisticFile); /* 先统计,然后输出统计信息 */void OutputInversedImage(const char* lpInversedImageName); /* 输出重构图像数据 */方法调用顺序为首先调用ForwadDwt,然后调用InverseDwt,最后是类的两个输出。
[转帖]小波图像分解与合成(例子)-Matlab讨论区-振动论坛动力学,噪声-...
![[转帖]小波图像分解与合成(例子)-Matlab讨论区-振动论坛动力学,噪声-...](https://img.taocdn.com/s3/m/b392546af6ec4afe04a1b0717fd5360cba1a8d2c.png)
[转帖]小波图像分解与合成(例子)-Matlab讨论区-振动论坛动力学,噪声-...转帖]小波图像分解与合成(例子)% 该函数是根据对所输入的png格式的真彩图像、小波类型(db9或haar)% 和相应的阈值进行了三级非标准小波harr或db9的分解和重构,从而达到了对原图像的压缩处理的% 目的。
它首先把通过原图像分离后的某颜色分量作为二维图像矩阵,通过调用自定义的二维离散% 小波变换函数mydwt2(),并依据指定的小波基函数'wavename'进行二维离散的行、列小波变换,% 得到了经变换后的相应颜色分量的近似分量% cA,水平细节分量cH,垂直细节分量cV,对角细节% 分量cD和中间分量cM,然后调用自定义的图像输出函数outrgb分别把中间分量以及cA、cH、cV、% cD合并后的图像阵进行R、G、B合成输出图像文件,其中某颜色分量的cA又做为下一级二维离散的% 行、列小波分解的输入图像阵,如此共完成三次。
% 其次,把经过三级非标准小波分解后的各颜色分量的各级水平细节分量、垂直细节分量、对角细% 节分量矩阵通过调用自定义函数make_0()完成了相应矩阵元素数值小于阀值系数的个数统计,并% 对它们进行小于阀值系数元素置0处理,且把分量尽数返回,以便三级的非标准小波重构处理。
% 最后,将返回得到的各颜色分量的第三级水平细节分量、垂直细节分量、对角细节分量矩阵和第% 三级分解后的近似分量作为参数,通过调用自定义的二维离散小波反变换函数myidwt2()进行二维% 离散的列、行重构,得到了经重构后的近似分量cA 和中间分量cM,把该中间分量cM以及近似分量% cA分别和经置0处理后第二级cH、cV、cD行列扩展,同时进行R、G、B合成,后调用自定义的图像% 输出函数outrgb()输出图像文件。
其中各颜色分量的cA又做为下一级二维离散的列、行小波重构% 的输入图像阵,如此共完成三次。
图像小波分解以及重构
![图像小波分解以及重构](https://img.taocdn.com/s3/m/0ce24dec51e79b896902260c.png)
图像小波分解1 一级分解及重构1.1程序a=imread('lena.jpg');x=rgb2gray(a);[cA,cH,cV,cD]=dwt2(x,'haar');subplot(2,2,1);imshow(cA,[]);subplot(2,2,2);imshow(cH,[]);subplot(2,2,3);imshow(cV,[]);subplot(2,2,4);imshow(cD,[]);x_idwt=idwt2(cA,cH,cV,cD,'haar');figure(2);imshow(x_idwt,[]);1.2 结果图1 小波一级分解图2一级分解重构2 小波二级分解2.1 思路一我们在一级分解的基础上,对低频分量进行再次一级分解,即可得到小波二级分解。
程序:[cA2,cH2,cV2,cD2]=dwt2(cA,'haar');figure(3);subplot(2,2,1);imshow(cA2,[]);subplot(2,2,2);imshow(cH2,[]);subplot(2,2,3);imshow(cV2,[]);subplot(2,2,4);imshow(cD2,[]);图3 小波一级分解图4 小波二级分解通过上面两张图片对比,我们可以看出,二级小波分解的低频分量和一级小波分解的低频分量相差不大,说明图像经过一级分解已经将大部分的水平,垂直,斜向分量提取,所以两个低频分量相差不大。
2.2 思路二我们使用函数waverec2函数进行小波变换,其格式为:[c,s]=wavedec2(X,N,'wname')我们用它对图像X用wname小波基函数实现N层分解,将结果储存在一个行向量c里。
程序:[c,s]=wavedec2(x,2,'haar');cA2=reshape(c(1,1:125^2),125,125);figure(4);subplot(2,2,1);imshow(cA2,[]);cH2=reshape(c(1,125^2+1:125*250),125,125);subplot(2,2,2);imshow(cH2,[]);cV2=reshape(c(1,125*250+1:125*250+125^2),125,125);subplot(2,2,3);imshow(cV2,[]);cD2=reshape(c(1,250*375+1:250*375+125^2),125,125);subplot(2,2,4);imshow(cD2,[]);图5 思路二的小波二级分解(有误)但是,通过观察上图的第四幅图即斜向分量明显有误,于是我又查阅了函数waverec2的结构:c=[A(N)|H(N)|V(N)|D(N)|H(N-1)|V(N-1)|D(N-1)|H(N-2)|V(N-2)|D(N-2)|...|H(1)|V(1) |D(1)];所以,取数的顺序是正确的。
8.2 小波分解与重构
![8.2 小波分解与重构](https://img.taocdn.com/s3/m/4dfaf3dcd15abe23482f4d7b.png)
8.2信号分解与合成的Mallat算法一、一维信号的分解与合成1. 正交镜像滤波器2. 一维信号的小波分解与重构算法(Mallat’s herringbone算法)二、二维信号的分解与重构三、用Matlab实现图像的分解与合成1.dwt2与idwt2dwt2为一层二维离散小波分解函数,调用格式:[cA,cH,cV,cD]=dwt2(X,’wname’)% 用指定小波基对图像X进行一层二维离散小波变换分解。
’wname’为小波基的名称,cA为近似(低频)图像矩阵,cH, cV, cD分别为小波分解的水平方向细节系数,垂直方向细节系数,对角线方向细节系数。
[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) % 用指定的低通分解滤波器Lo_D和高通分解滤波器Hi_D对图像X进行二维离散小波分解。
Lo_D与Hi_D的长度必须一致。
idwt2为一层二维离散小波重构函数,调用格式为:X=idwt2(cA,cH,cV,cD,’wname’)% 用指定小波重构图像X,wname为小波基的名称。
X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)% 用指定低通重构滤波器Lo_R和高通重构滤波器Hi_R重构图像X,Lo_R与Hi_R的长度必须一致。
2.wavedec2与vaverec2wavedec2为多层二维离散小波分解函数,其调用格式为:[C,S]=wavedec2(X,N,’wname’)% 用指定小波基对图像X进行N层二维离散小波分解。
N为正整数,C为小波分解矢量,S为相应的标记矩阵。
C = [ A(N) | H(N) | V(N) | D(N) | ...H(N-1) | V(N-1) | D(N-1) | ... | H(1) | V(1) | D(1) ].A = approximation coefficientsH = horizontal detail coefficientsV = vertical detail coefficientsD = diagonal detail coefficients矩阵S形如S(1,:) = size of approximation coefficients(N)S(i,:) = size of detail coefficients(N-i+2) for i = 2, ...N+1 S(N+2,:) = size(X).wavwrec2为多层二维离散小波重构函数,其调用格式为:X=waverec2(C,S,’wname’) %利用指定小波基由矢量C和标记矩阵S重构图像X。
基于 matlab 实现的二维小波分解算法-概述说明以及解释
![基于 matlab 实现的二维小波分解算法-概述说明以及解释](https://img.taocdn.com/s3/m/ec96a733178884868762caaedd3383c4bb4cb48b.png)
基于matlab 实现的二维小波分解算法-概述说明以及解释1.引言1.1 概述概述部分的内容可以包括一些关于小波分解算法的基本介绍,可以简要介绍小波分解算法的原理和应用领域,同时提及该算法在信号处理、图像压缩以及特征提取等方面的重要性。
以下是一个示例:在当今信息时代,信号处理和图像处理一直是计算机科学和工程学中的研究热点。
为了更好地理解和处理信号和图像中的信息,及时去除噪声、压缩图像以及提取出关键特征,人们不断寻求更有效的处理方法。
而小波分解算法作为一种新兴的信号处理方法,在近年来得到了广泛的应用和研究。
小波分解算法是一种将信号或图像分解为时频域或时空域的工具,它可以分解出不同尺度和频率的子信号或子图像,这为信号处理和图像处理提供了一种有效途径。
与传统的傅里叶变换相比,小波分解算法具有更好的局部性质和多尺度分析能力,因此被广泛运用于信号处理、图像压缩、图像恢复、特征提取等领域。
在信号处理中,小波分解算法可以用于去噪、压缩、去除偶尔的干扰等。
在图像处理方面,小波分解算法具备较好的多分辨率特性,可以在不同分辨率上进行图像处理,对于边缘检测、纹理分析、目标识别等具备独特的优势。
此外,小波分解算法对于非平稳信号和非线性系统等具备突出的应用优势。
本文将介绍基于Matlab 的二维小波分解算法的实现,通过对该算法的深入剖析和实验验证,展示它在图像处理方面的应用前景以及算法效果的评估。
通过本文的研究,读者将了解到小波分解算法的实际应用场景和优势,进一步提高信号处理和图像处理的能力。
在文章的后续部分中,我们将重点介绍小波分解算法的原理,并详细阐述如何在Matlab 环境下实现二维小波分解算法。
1.2 文章结构本文将按照以下结构展开对基于Matlab 实现的二维小波分解算法的介绍和分析:1. 引言:首先对文章的主题和目的进行概述,介绍小波分解算法在图像处理领域的重要性,并总结文章结构。
2. 正文:2.1 小波分解算法概述:详细介绍小波分解算法的基本原理和应用领域,包括信号分析,压缩,去噪等方面。
MATLAB2维小波变换经典程序
![MATLAB2维小波变换经典程序](https://img.taocdn.com/s3/m/378ac0cb172ded630b1cb66b.png)
MATLAB2维小波变换经典程序% FWT_DB.M;% 此示意程序用DWT实现二维小波变换%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%clear;clc;T=256; % 图像维数SUB_T=T/2; % 子图维数%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 1.调原始图像矩阵load wbarb; % 下载图像f=X; % 原始图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 2.进行二维小波分解l=wfilters('db10','l'); % db10(消失矩为10)低通分解滤波器冲击响应(长度为20)L=T-length(l);l_zeros=[l,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂h=wfilters('db10','h'); % db10(消失矩为10)高通分解滤波器冲击响应(长度为20)h_zeros=[h,zeros(1,L)]; % 矩阵行数与输入图像一致,为2的整数幂for i=1:T; % 列变换row(1:SUB_T,i)=dyaddown( ifft( fft(l_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFTrow(SUB_T+1:T,i)=dyaddown( ifft( fft(h_zeros).*fft(f(:,i)') ) ).'; % 圆周卷积<->FFT end;for j=1:T; % 行变换line(j,1:SUB_T)=dyaddown( ifft( fft(l_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT line(j,SUB_T+1:T)=dyaddown( ifft( fft(h_zeros).*fft(row(j,:)) ) ); % 圆周卷积<->FFT end;decompose_pic=line; % 分解矩阵% 图像分为四块lt_pic=decompose_pic(1:SUB_T,1:SUB_T); % 在矩阵左上方为低频分量--fi(x)*fi(y) rt_pic=decompose_pic(1:SUB_T,SUB_T+1:T); % 矩阵右上为--fi(x)*psi(y)lb_pic=decompose_pic(SUB_T+1:T,1:SUB_T); % 矩阵左下为--psi(x)*fi(y)rb_pic=decompose_pic(SUB_T+1:T,SUB_T+1:T); % 右下方为高频分量--psi(x)*psi(y)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % 3.分解结果显示figure(1);colormap(map);subplot(2,1,1);image(f); % 原始图像title('original pic');subplot(2,1,2);image(abs(decompose_pic)); % 分解后图像title('decomposed pic');figure(2);colormap(map);subplot(2,2,1);image(abs(lt_pic)); % 左上方为低频分量--fi(x)*fi(y)title('\Phi(x)*\Phi(y)');subplot(2,2,2);image(abs(rt_pic)); % 矩阵右上为--fi(x)*psi(y)title('\Phi(x)*\Psi(y)');subplot(2,2,3);image(abs(lb_pic)); % 矩阵左下为--psi(x)*fi(y)title('\Psi(x)*\Phi(y)');subplot(2,2,4);image(abs(rb_pic)); % 右下方为高频分量--psi(x)*psi(y)title('\Psi(x)*\Psi(y)'); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 5.重构源图像及结果显示% construct_pic=decompose_matrix'*decompose_pic*decompose_matrix; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%l_re=l_zeros(end:-1:1); % 重构低通滤波l_r=circshift(l_re',1)'; % 位置调整h_re=h_zeros(end:-1:1); % 重构高通滤波h_r=circshift(h_re',1)'; % 位置调整%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%%top_pic=[lt_pic,rt_pic]; % 图像上半部分t=0;for i=1:T; % 行插值低频if (mod(i,2)==0)topll(i,:)=top_pic(t,:); % 偶数行保持elset=t+1;topll(i,:)=zeros(1,T); % 奇数行为零endend;for i=1:T; % 列变换topcl_re(:,i)=ifft( fft(l_r).*fft(topll(:,i)') )'; % 圆周卷积<->FFTend;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%%%bottom_pic=[lb_pic,rb_pic]; % 图像下半部分t=0;for i=1:T; % 行插值高频if (mod(i,2)==0)bottomlh(i,:)=bottom_pic(t,:); % 偶数行保持elsebottomlh(i,:)=zeros(1,T); % 奇数行为零t=t+1;endend;for i=1:T; % 列变换bottomch_re(:,i)=ifft( fft(h_r).*fft(bottomlh(:,i)') )'; % 圆周卷积<->FFTend;construct1=bottomch_re+topcl_re; % 列变换重构完毕%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%left_pic=construct1(:,1:SUB_T); % 图像左半部分t=0;for i=1:T; % 列插值低频if (mod(i,2)==0)leftll(:,i)=left_pic(:,t); % 偶数列保持elset=t+1;leftll(:,i)=zeros(T,1); % 奇数列为零endend;for i=1:T; % 行变换leftcl_re(i,:)=ifft( fft(l_r).*fft(leftll(i,:)) ); % 圆周卷积<->FFTend;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%%%right_pic=construct1(:,SUB_T+1:T); % 图像右半部分t=0;for i=1:T; % 列插值高频if (mod(i,2)==0)rightlh(:,i)=right_pic(:,t); % 偶数列保持elserightlh(:,i)=zeros(T,1); % 奇数列为零t=t+1;endend;for i=1:T; % 行变换rightch_re(i,:)=ifft( fft(h_r).*fft(rightlh(i,:)) ); % 圆周卷积<->FFTend;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%%%%%%%construct_pic=rightch_re+leftcl_re; % 重建全部图像%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%%%%% 结果显示figure(3);colormap(map);subplot(2,1,1);image(f); % 源图像显示title('original pic');subplot(2,1,2);image(abs(construct_pic)); % 重构源图像显示title('reconstructed pic');error=abs(construct_pic-f); % 重构图形与原始图像误值figure(4);mesh(error); % 误差三维图像title('absolute error display');。
二维小波分析在图像中的具体应用
![二维小波分析在图像中的具体应用](https://img.taocdn.com/s3/m/b20e8caffd0a79563c1e72e4.png)
从二维小波理论出发,对其在图像处理的应用上进行了一些分析和处理,力图反映出小波分析在图像处理方面有着其独特的特点。
三:图像压缩对于图像来说,如果需要进行快速或实时传输以及大量存储,就需要对图像数据进行压缩。
在同样的通信容量下,如果图像数据压缩后在传输,就可以传输更多的图像信息。
例如,用普通的电话线传输图像信息。
图像压缩研究的就是寻找高压缩比的方法且压缩后的图像要有合适的信噪比,在压缩传输后还要恢复原信号,斌且在压缩、传输、恢复的过程中,还要求图像的失真度小。
这就是图像压缩的研究问题。
图像数据往往存在各种信息的冗余、如空间冗余、信息熵冗余、视觉冗余和结构冗余等等。
所谓压缩就是去掉各种冗余,保留对我们有用的信息。
图像压缩的过程常称为编码。
相对的,图像的恢复当然就是解码了。
图像压缩的方法通常可分为有失真编码和无失真编码两大类:无失真编码方法如改进的霍夫曼编码。
有失真编码方法的还原图像较之原始图像存在着一些误差,但视觉效果是可以接受的。
常见的方法有预测编码、变换编码、量化编码、信息熵编码、分频带编码和结构编码等等。
而将小波分析引入图像压缩的范畴也是一个重要的手段,并且有着它自己的特点。
它的特点在于压缩比高、压缩速度快,压缩后能保持信号与图像的特征基本不变,且在传递过程中可以抗干扰等等。
下面我们就举一个粒子来说明怎样用小波分析进行图像压缩。
例如现在有一个二维图像(文件名为),我们利用二维小波分析来进行图像压缩。
由原理可知,一个图像作小波分解后,可得到一系列不同分辨率的子图像,不同分辨率的子图像对应的频率是不相同的。
高分辨率(高频)子图像上大部分点的数值都接近于0,越是高就越是明显。
而对于一个图像来说,表现一个图像的最主要的部分是低频部分,所以最简单的压缩方法是利用小波分解去掉图像的高频部分而只保留低频部分。
程序大致如下:clear%装入图像load wbarb;%显示图像syms X;subplot(221);image(coast);colormap(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=wrcoef2('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('第一次压缩图像');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压缩前图像X256×256524288Double array第一次压缩图像Ca1135×135145800Double array第二次压缩图像Ca275×7545000Double array在这里可以看出,第一次压缩我们是提取原始图像中小波分解第一层的低频信息,此时压缩效果较好,压缩比较小(约为1/3大小)。
自己动手编写小波信号分解与重构的Matlab程序
![自己动手编写小波信号分解与重构的Matlab程序](https://img.taocdn.com/s3/m/d461e31b964bcf84b9d57b2a.png)
去年11月发布了一系列有关小波变换和图像处理的文章,把学习小波过程中的心得体会和编写的程序放在网上和大家共享交流。
半年来,感谢大家的关注和帮助,在相互的讨论交流中,我不断地从大家提出的问题中拓展自己的知识面,对小波的理论及其应用有了更深入的了解和掌握。
根据和大家讨论交流中发现的问题,对博客中的程序进行修正。
有关小波图像分解和重构的两篇文章中分享的程序,存在下列问题:(1)程序所用的小波函数只有非标准的Haar小波,其滤波器组为Lo_D=[1/2 1/2], Hi_D=[-1/2 1/2],是固化在mydwt2.m 的程序中的,不能选择其他的小波函数;(2)非标准的Haar小波,其分解出来的系数矩阵中,高频系数的细节内容(轮廓、边缘等特征)不明显;(3)函数mydwt2 中列变换的矩阵对象为输入矩阵,这是错误的,其矩阵对象应该是行变换后的缓存矩阵;(4)函数mydwt2 的输出用[LL,HL,LH,HH]表示,不是很规范,应改为[cA,cV,cH,cD]来表示,即一级小波变换输出的系数矩阵有4个部分:平均部分、垂直细节部分、水平细节部分和对角线细节部分。
(5)函数mywavedec2 的输出y 是与输入矩阵x 相同大小的矩阵,并且已将N级分解后所有的平均、细节系数组合成一体的。
实际上,这种定义只对Haar小波有效。
(6)原程序中要调用modmat 函数对图像矩阵进行修剪,使之能被2 的N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个modmat 函数已不需使用了。
针对上述问题,我对程序作了修正,发布在今天的3篇文章里,请大家点击查看。
新修正的程序更为简洁易懂,功能也有所增强,可以用任意的小波函数进行小波分解,可根据小波分解系数矩阵重构出指定分解级的低频系数和原始图像.Matlab小波分析工具箱丰富的函数和强大的仿真功能为我们学习小波、用好小波提供了方便、快捷的途径,但是,如果我们要深入掌握小波分析的原理,真正学好、用好小波,就应该尽量用自己编写的程序去实现小波变换和信号分析,尽量在自己的程序中少调用Matlab提供的函数,多用自己的理解去编写相关的小波函数,这样的过程是一个探索、求知的过程,更能让我们体会到小波的强大和学习的乐趣。
二维离散小波分解的C语言实现 论文
![二维离散小波分解的C语言实现 论文](https://img.taocdn.com/s3/m/17c7ad8402d276a200292eff.png)
高等教育自学考试毕业论文(设计)题目:二维离散小波分解的C语言实现摘要小波变换用于图像处理是小波变换应用效果比较突出的领域之一。
由于图像是二维信号,因此首先需要把小波变换由一维推广到二维。
本文在一维离散Mallat算法的基础上,用C语言实现了二维图像的离散小波变换。
这种二维变换是行列可分离的变换方式,即二维分解可以通过行和列依次作一维分解实现。
对图像作二维离散小波分解后得到一个低频子带和一系列高频子带,分别反映图像的基本信息和细节信息。
用这些子带也可以实现图像的重构。
目录第一章绪论 (1)1. 1小波理论与应用技术的发展概况 (1)1. 2图像技术的发展历程及面临的问题 (2)1. 3小波的特点及其在图像处理中的应用 (2)第二章Mallat算法由一维到二维的推广 (4)2. 1小波级数 (4)2. 2 Mallat算法 (5)2. 3二维离散小波变换 (7)2. 4二维离散小波变换后的系数分布 (8)第三章二维Mallat算法的C语言实现 (10)3. 1基本模块 (10)3.2 单层分解与重构 (10)3.3金字塔结构的多层分解和重构 (11)3.4小波系数的数据结构 (14)3.5 结果与分析 (14)参考文献 (19)致谢 (20)第一章绪论1. 1小波理论与应用技术的发展概况小波分析是当前数学中一个迅速发展的新领域,它同时具有理论深刻和应用十分广泛的双重意义。
小波分析的应用是与小波分析的理论研究紧密地结合在一起的。
现在,它已经在科技信息产业领域取得了令人瞩目的成就。
电子信息技术是六大高新技术中重要的一个领域,它的重要方面是图像和信号处理。
现今,信号处理已经成为当代科学技术工作的重要部分,信号处理的目的就是:准确的分析、诊断、编码压缩和量化、快速传递或存储、精确地重构(或恢复)。
从数学地角度来看,信号与图象处理可以统一看作是信号处理(图像可以看作是二维信号),在小波分析地许多分析的许多应用中,都可以归结为信号处理问题。
小波图像分解与重构自编的程序
![小波图像分解与重构自编的程序](https://img.taocdn.com/s3/m/041811cf5fbfc77da269b1fa.png)
用自编的程序实现小波图像分解与重构收藏去年11月发布了一系列有关小波变换和图像处理的文章,把学习小波过程中的心得体会和编写的程序放在网上和大家共享交流。
半年来,感谢大家的关注和帮助,在相互的讨论交流中,我不断地从大家提出的问题中拓展自己的知识面,对小波的理论及其应用有了更深入的了解和掌握。
根据和大家讨论交流中发现的问题,对博客中的程序进行修正。
有关小波图像分解和重构的两篇文章中分享的程序,存在下列问题:(1)程序所用的小波函数只有非标准的Haar小波,其滤波器组为Lo_D=[1/2 1/2], Hi_D=[-1/2 1/2],是固化在mydwt2.m 的程序中的,不能选择其他的小波函数;(2)非标准的Haar小波,其分解出来的系数矩阵中,高频系数的细节内容(轮廓、边缘等特征)不明显;(3)函数mydwt2 中列变换的矩阵对象为输入矩阵,这是错误的,其矩阵对象应该是行变换后的缓存矩阵;(4)函数mydwt2 的输出用[LL,HL,LH,HH]表示,不是很规范,应改为[cA,cV,cH,cD]来表示,即一级小波变换输出的系数矩阵有4个部分:平均部分、垂直细节部分、水平细节部分和对角线细节部分。
(5)函数mywavedec2 的输出y 是与输入矩阵x 相同大小的矩阵,并且已将N级分解后所有的平均、细节系数组合成一体的。
实际上,这种定义只对Haar小波有效。
(6)原程序中要调用modmat 函数对图像矩阵进行修剪,使之能被2 的N 次方整除,主要是为了生成塔式结构图像而设的,对上述问题修正后,这个modmat 函数已不需使用了。
针对上述问题,我对程序作了修正,发布在今天的3篇文章里,请大家点击查看。
新修正的程序更为简洁易懂,功能也有所增强,可以用任意的小波函数进行小波分解,可根据小波分解系数矩阵重构出指定分解级的低频系数和原始图像。
1、《小波图像分解与重构程序存在的问题与解决办法》上一篇文章中我们实现了小波的一维、二维信号分解与重构,其中的二维信号分解与重构,只要稍作修改,就可以实现图像的分解和重构了。
python 二维小波分解
![python 二维小波分解](https://img.taocdn.com/s3/m/699c5753a88271fe910ef12d2af90242a895ab83.png)
Python二维小波分解1. 介绍二维小波分解是一种信号处理技术,可以对二维信号进行分解和重建。
它使用小波基函数对信号进行变换,使得信号在时间和频率上都能得到更好的表示。
通过二维小波分解,我们可以提取出图像中的各个频率成分,从而实现图像的去噪、压缩、特征提取等应用。
本文将介绍如何使用Python进行二维小波分解,包括小波基函数选择、分解过程、重构过程等。
2. 小波基函数选择在进行二维小波分解之前,我们需要选择合适的小波基函数。
常用的小波基函数有Daubechies小波、Haar小波、Symlet小波等。
选择不同的小波基函数会对分解结果产生不同的影响。
在Python中,我们可以使用pywt库来进行小波变换。
这个库提供了各种小波基函数的实现,方便我们进行选择和使用。
下面是一个使用pywt库选择小波基函数的示例代码:import pywt# 选择Daubechies小波基函数wavelet = pywt.Wavelet('db4')在上面的示例中,我们选择了Daubechies小波基函数,并将其赋值给了变量wavelet。
3. 二维小波分解过程在选择好小波基函数后,我们可以开始进行二维小波分解了。
具体的分解过程如下:1.将待分解的二维信号进行二维小波变换,得到低频部分(LL)和高频部分LH、HL、HH四个子图像。
2.将LL部分继续进行二维小波变换,得到LL1、LH1、HL1、HH1四个子图像。
3.重复以上步骤,直到得到满足要求的分解层数。
下面是一个使用pywt库进行二维小波分解的示例代码:import pywtimport numpy as np# 选择Daubechies小波基函数wavelet = pywt.Wavelet('db4')# 待分解的二维信号signal = np.random.randn(512, 512)# 设置分解层数level = 3# 进行二维小波分解coeffs = pywt.wavedec2(signal, wavelet, level=level)在上面的示例中,我们首先选择了Daubechies小波基函数,然后生成了一个随机的512x512的二维信号。
小波分析研究实验:维离散小波变换(Mallat快速算法)
![小波分析研究实验:维离散小波变换(Mallat快速算法)](https://img.taocdn.com/s3/m/b4f8fab1ce2f0066f4332261.png)
小波分析实验:实验2 二维离散小波变换(Mallat快速算法)实验目地:在理解离散小波变换原理和Mallat快速算法地基础上,通过编程对图像进行二维离散小波变换,从而加深对二维小波分解和重构地理性和感性认识,并能提高编程能力,为今后地学习和工作奠定基础.b5E2R。
实验工具:计算机,matlab6.5附录:(1)二维小波分解函数%二维小波分解函数function Y=mallatdec2(X,wname,level)%输入:X 载入地二维图像像数值;% level 小波分解次(级)数设定值(如果设定值超过最高可分解次数,按最高分解次数分解)p1Ean。
% wname 小波名字wavelet name%输出:Y 多极小波分解后地小波系数矩阵[h,g]=wfilters(wname,'d'); %h,g分别为低通和高通滤波器X=double(X);hh=size(X,2);while t<=level%先进行行小波变换for row=1:hhY(row,1:hh)=mdec1(X(row,1:hh),h,g) ;end%再进行列小波变换for col=1:hhtemp=mdec1( Y(1:hh,col)',h,g);Y(1:hh,col)=temp';endt=t+1;hh=hh/2;X=Y;end%内部子函数,对一行(row)矢量进行一次小波变换,利用fft实现function y=mdec1(x,h,g)%输入:x 行数组% h为低通滤波器% g为高通滤波器%输出: y 进行一级小波分解后地系数lenx=size(x,2);lenh=size(h,2);rh=h(end:-1:1);rrh=[zeros(1,(lenx-lenh)),rh];rrh=circshift(rrh',1)';rg=g(end:-1:1);rrg=[zeros(1,(lenx-lenh)),rg];rrg=circshift(rrg',1)';r1=dyaddown(ifft(fft(x).*fft(rrh,lenx)),1); %use para 1DXDiT。
最新二维小波分解报告
![最新二维小波分解报告](https://img.taocdn.com/s3/m/d9802332ad51f01dc381f1d7.png)
精品资料二维小波分解报告........................................对图像二维信号进行3层小波分解。
解:本题二维图像采用MATLAB自带的图片,实现图片多层小波分解的函数是:[C,S]=wavedec2(X,N,’wname’) , 即使用给定小波‘wname’对二维信号X进行N层小波分解。
本题使用’bior3.7’小波进行分析。
重构二维小波信号的低频成分函数为:A1=wrcoef2('a',C,S,'wname',N);重构二维小波信号的水平、垂直和对角线高频成分函数为:H1=wrcoef2(‘h’,C,S,’wname’,N);V1=wrcoef2('v',C,S,’wname’,N);D1=wrcoef2('d',C,S,’wname’,N);实现二维信号3层小波分解的MATLAB代码如下:clear all;clc;%装载图像load woman;%显示原始图像image(X);colormap(map);nbcol=size(map,1)%进行3层小波分解[C,S]=wavedec2(X,3,'bior3.7');%重构低频信号A1=wrcoef2('a',C,S,'bior3.7',1);A2=wrcoef2('a',C,S,'bior3.7',2);A3=wrcoef2('a',C,S,'bior3.7',3);%重构高频信号H1=wrcoef2('h',C,S,'bior3.7',1);V1=wrcoef2('v',C,S,'bior3.7',1);D1=wrcoef2('d',C,S,'bior3.7',1);H2=wrcoef2('h',C,S,'bior3.7',2);V2=wrcoef2('v',C,S,'bior3.7',2);D2=wrcoef2('d',C,S,'bior3.7',2);H3=wrcoef2('h',C,S,'bior3.7',3);V3=wrcoef2('v',C,S,'bior3.7',3);D3=wrcoef2('d',C,S,'bior3.7',3);%显示3层二维分解结果figure(3)colormap(map);subplot(4,3,1);image(wcodemat(A1,nbcol)); title('低频A1')subplot(4,3,4);image(wcodemat(H1,nbcol)); title('水平高频H1')subplot(4,3,7);image(wcodemat(V1,nbcol)); title('´垂直高频V1')subplot(4,3,10);image(wcodemat(D1,nbcol)); title('对角高频D1')subplot(4,3,2);image(wcodemat(A2,nbcol)); title('低频A2')subplot(4,3,5);image(wcodemat(H2,nbcol)); title('水平高频H2')subplot(4,3,8);image(wcodemat(V2,nbcol)); title('垂直高频V2')subplot(4,3,11);image(wcodemat(D2,nbcol)); title('对角高频D2')subplot(4,3,3);image(wcodemat(A2,nbcol)); title('低频A3')subplot(4,3,6);image(wcodemat(H2,nbcol)); title('水平高频H3')subplot(4,3,9);image(wcodemat(V2,nbcol)); title('垂直高频V3')subplot(4,3,12);image(wcodemat(D2,nbcol)); title('对角高频D3')%重构原始图像X0=waverec2(C,S, 'bior3.7');%显示重构图像figure(4)image(X0);title('重构图像')colormap(map);图像小波分解结果如下:图2 原始图像图3 二维小波分解结果图4 重构图像。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
0.00569794,-0.0033276};
float g[DD]={0.00332761,0.00569794,-0.0196637,-0.0482603,0.0485391,
public:
TSubWindow(TWindow* parent);
~TSubWindow();
protected:
void EvSize(UINT sizeType, TSize& size)
{Invalidate(); TFrameWindow::EvSize(sizeType, size);}
二维小波分解与重构程序实例
// *********(基于Windows的二维小波分解与重构BC++4。5)**********//
#include <owl/owlpch.h>
#include <owl/applicat.h>
#include <owl/dc.h>
#include <owl/menu.h>
//*****Inverse Wavelet Transform*********************//
void iwt(int xs,int ys,long xsize,long ysize);
float *img[SIZE],*imgx[SIZE],*imgy[SIZE];
//****for evolution agents*****//
Attr.Y = 100;
Attr.W = 300;
Attr.H = 400;
}
//
// Destroy window. SubWinPtr[Type] is set to 0 to indicate that the window
// has be closed.
//
TSubWindow::~TSubWindow()
// facilitate receiving of clipboard change notifications. Could mix it in if
// an additional base was desired.
//
class TSubWindow : public TFrameWindow {
int AgentNum,ActiveAgent;
int SolutionX[1000],SolutionY[1000];
int SearchNum,AgentLife;
int Agent[1000][2];
int isAgentAlive[1000];
int SearchTime;
unsigned short Image[32][32];
TDib* Dib;
TBitmap* Bitmap;
TMemoryDC * pMemDC;
TPalette* Palette;
//
TWindow* SubWinPtr = 0;
TSubWindow::TSubWindow(TWindow* parent)
: TFrameWindow(parent)
{
Attr.Style |= WS_VISIBLE | WS_POPUP | WS_OVERLAPPEDWINDOW,
Attr.X = 100;
int s(float x);
//Set Inverse Filter Coefficients//
void coef();
//********Wavelet Transform************************//
void wt(int xs,int ys,long xsize,long ysize);
void Paint(TDC& dc, bool, TRect&);
DECLARE_RESPONSE_TABLE(TSubWindow);
};
DEFINE_RESPONSE_TABLE1(TSubWindow, TFrameWindow)
EV_WM_SIZE,
END_RESPONSE_TABLE;
// pointers to different child windows.
#define MAXAPPNAME 20
static const char AppName[] = "Image Processing";
//
// TBmpViewWindow, a Bitmap displaying window derived from TClipboardViewer to
0.292562,-0.564406,0.292562,0.0485391,-0.0482602,0.0196637,
0.00569794,0.0033276};
float hi[DD],gi[DD];
int wavelet_direction=1;
int a(int x,int xsize);
//Threshold//
{
SubWinPtr = 0;
}
void
TSubWindow::Paint(TDC& dc, bool, TRect&)
{
}
class TBmpViewWindow : virtual public TWindow, public TClipboardViewer {
public:
char FileName[MAXPATH];
#include <owl源自framewin.h>#include <owl/scroller.h>
#include <owl/opensave.h>
#include <owl/clipview.h>
#include <string.h>
#include <alloc.h>
#include <dir.h>
#include <math.h>
#include "stdio.h"
#include "stdlib.h"
#include "bmpview.h"
#define PI 3.1415926
#define SIZE 256
#define DD 13
float h[DD]={-0.00332761,0.00569794,0.0196637,-0.0482603,-0.0485391,