求助:simulink中simulink 小波分析析模块DWT怎么使用

使用 MATLAB 小波工具箱进行小波分析:
如上图所示的小波分解过程,可以调用 wfilters 来获得指定小波的分解和综合滤波器系数,例如:
% Set wavelet name.
wname = 'db5';
% Compute the four filters associated with wavelet name given
% by the input string wname.
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters(wname);
subplot(221); stem(Lo_D);
title('Decomposition low-pass filter');
subplot(222); stem(Hi_D);
title('Decomposition high-pass filter');
subplot(223); stem(Lo_R);
title('Reconstruction low-pass filter');
subplot(224); stem(Hi_R);
title('Reconstruction high-pass filter');
xlabel('The four filters for db5')
% Editing some graphical properties,
% the following figure is generated.&
 以上例子,得到’db5’小波的分解和综合滤波器系数,并显示出来。下面是wfilters的具体用法:
Wname 可指定为列表中的任意一种小波,直接调用
[Lo_D,Hi_D,Lo_R,Hi_R] = wfilters('wname')
会返回分解和综合滤波器系数。如果只想返回其中的一些而不是全部,可以调用
[F1,F2] = wfilters('wname','type')
其中’type’可指定为4种类型,每种类型的具体意义详见matlab wfilters帮助。
查看具体小波的信息
waveinfo(‘wname’)
获得一个标准的正交变换/双正交变换 的尺度和小波函数(数字近似值)
[PHI,PSI,XVAL] = wavefun('wname',ITER)
[PHI1,PSI1,PHI2,PSI2,XVAL] = wavefun('wname',ITER)
% Set number of iterations and wavelet name.
iter = 10;
wav = 'sym4';&
% Compute approximations of the wavelet function using the
% cascade algorithm.
for i = 1:iter
&&& [phi,psi,xval] = wavefun(wav,i);
&&& plot(xval,psi);
&&& hold on
title(['Approximations of the wavelet ',wav, ...
&&&&&& ' for 1 to ',num2str(iter),' iterations']);
如果已知小波分解滤波器系数,计算小波变换的最简单方法就是
[C,S] = wavedec2(X,N,'wname')
[C,S] = wavedec2(X,N,Lo_D,Hi_D)
反过来,已知小波综合滤波器系数,计算反小波变换,只需
X = waverec2(C,S,'wname')
X = waverec2(C,S,Lo_R,Hi_R)
%&& 图片的小波分解
im& = imread('../../std_images/lena.bmp');& %灰度
im& = double(im);&
[Lo_D,Hi_D] = wfilters('haar','d');
[C,S]&&&&&& = wavedec2(im,1,Lo_D,Hi_D);&
isize&&&&&& = prod(S(1,:));
cA&& = C(1:isize);
cH& = C(isize+(1:isize));
cV& = C(2*isize+(1:isize));
cD& = C(3*isize+(1:isize));
cA&& = reshape(cA,S(1,1),S(1,2));
cH& = reshape(cH,S(2,1),S(2,2));
cV& = reshape(cV,S(2,1),S(2,2));
cD& = reshape(cD,S(2,1),S(2,2));
figure,colormap gray
subplot(221),imagesc(cA);
subplot(222),imagesc(cH);
subplot(223),imagesc(cV);
subplot(224),imagesc(cD);&
其中C是小波变换后的结果数据,以一维矢量的形式组织,S是二维数组,记录了C中数据的分布形式,详见matlab 的帮助文档。此外,dwtmode可以设定输入的边界处理方式。
提取小波的系数。前面使用的wavedec2得到的[C,S]不是非常的直观,可以利用小波工具箱中的函数 appcoef2和detcoef2来提取近似矩阵和的n级的某一个细节矩阵。
A = appcoef2(C,S,'wname',N)
A = appcoef2(C,S,'wname')
D = detcoef2(O,C,S,N)
针对特定的小波系数矩阵进行阈值化处理
NC = wthcoef2('type',C,S,N,T,SORH)
NC = wthcoef2('type',C,S,N)
NC = wthcoef2('a',C,S)
NC = wthcoef2('t',C,S,N,T,SORH)
使用 wave2gray来显示小波分解的结果
%&&& 使用 wave2gray 显示小波分解的结果,来自 dipum_1.1.4 toolbox
im& = imread('../../std_images/lena.bmp');& %灰度
im& = double(im);
[Lo_D,Hi_D] = wfilters('haar','d');
[C,S]&&&&&& = wavedec2(im,2,Lo_D,Hi_D);
wave2gray(C,S);
关于wave2gray更多用法详见dipum_1.1.4 toolbox 的说明文档[]。
小波综合(重建):waverec2
X = waverec2(C,S,'wname')
X = waverec2(C,S,Lo_R,Hi_R)
[C,S]是使用小波分解函数wavedec2得到的小波矢量和矢量描述矩阵,或者符合这种规定形式的数据。返回X是实数图像矩阵,由于计算误差,可能需要经过一些处理才能正常显示。
%&& 小波综合
im& = imread('../../std_images/lena.bmp');& %灰度
im& = double(im);
[Lo_D,Hi_D] = wfilters('haar','d');
[C,S]&&&&&& = wavedec2(im,2,Lo_D,Hi_D);&
X&& = waverec2(C,S,'haar');
% [Lo_R,Hi_R] = wfilters('haar','r');
% X&& = waverec2(C,S,Lo_D,Hi_D);
X&& = (X-min(X(:)))/(max(X(:))-min(X(:)));
figure,imshow(X);
TA的最新馆藏[转]&[转]&[转]&[转]&[转]&[转]&图像小波变换的 Matlab 实现函数
&&3.1&&一维小波变换的 Matlab 实现(1) dwt 函数 Matlab功能:一维离散小波变换格式:[cA,cD]=dwt(X,'wname')[cA,cD]=dwt(X,Lo_D,Hi_D)别可以实现一维、二维和 N 维 DFT说明:[cA,cD]=dwt(X,'wname') 使用指定的小波基函数 'wname' 对信号X 进行分解,cA、cD 分别为近似分量和细节分量;[cA,cD]=dwt(X,Lo_D,Hi_D) 使用指定的滤波器组 Lo_D、Hi_D 对信号进行分解。(2) idwt 函数功能:一维离散小波反变换格式:X=idwt(cA,cD,'wname')X=idwt(cA,cD,Lo_R,Hi_R)X=idwt(cA,cD,'wname',L)函数X=idwt(cA,cD,Lo_R,Hi_R,L)说明:X=idwt(cA,cD,'wname') 由近似分量 cA 和细节分量 cD 经小波反变换重构原始信号 X 。'wname' 为所选的小波函数X=idwt(cA,cD,Lo_R,Hi_R) 用指定的重构滤波器 Lo_R 和 Hi_R 经小波反变换重构原始信号 X 。X=idwt(cA,cD,'wname',L) 和 X=idwt(cA,cD,Lo_R,Hi_R,L) 指定返回信号 X 中心附近的 L 个点。1. 离散傅立叶变换的 Matlab实现
3.2 二维小波变换的 Matlab 实现
二维小波变换的函数别可以实现一维、二维和 N 维 DFTdwt2 二维离散小波变换wavedec2 二维信号的多层小波分解idwt2 二维离散小波反变换 Matlabwaverec2 二维信号的多层小波重构wrcoef2 由多层小波分解重构某一层的分解信号upcoef2 由多层小波分解重构近似分量或细节分量1. 离散傅立叶变换的 Matlab实现detcoef2 提取二维信号小波分解的细节分量appcoef2 提取二维信号小波分解的近似分量upwlev2 二维小波分解的单层重构1. 离散傅立叶变换的 Matlab实现dwtpet2 二维周期小波变换idwtper2 二维周期小波反变换
(1) wcodemat 函数功能:对数据矩阵进行伪彩色编码格式:Y=wcodemat(X,NB,OPT,ABSOL)Y=wcodemat(X,NB,OPT)Y=wcodemat(X,NB)Y=wcodemat(X)说明:Y=wcodemat(X,NB,OPT,ABSOL) 返回数据矩阵 X 的编码矩阵 Y ;NB 伪编码的最大值,即编码范围为 0~NB,缺省值 NB=16;OPT 指定了编码的方式(缺省值为 'mat'),即:别可以实现一维、二维和 N 维 DFTOPT='row' ,按行编码OPT='col' ,按列编码OPT='mat' ,按整个矩阵编码ABSOL 是函数的控制参数(缺省值为 '1'),即:ABSOL=0 时,返回编码矩阵ABSOL=1 时,返回数据矩阵的绝对值 ABS(X)1. 离散傅立叶变换的 Matlab实现
(2) dwt2 函数功能:二维离散小波变换格式:[cA,cH,cV,cD]=dwt2(X,'wname')[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D)说明:[cA,cH,cV,cD]=dwt2(X,'wname')使用指定的小波基函数 'wname' 对二维信号 X 进行二维离散小波变幻;cA,cH,cV,cD 分别为近似分量、水平细节分量、垂直细节分量和对角细节分量;[cA,cH,cV,cD]=dwt2(X,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。1. 离散傅立叶变换的 Matlab实现
(3) wavedec2 函数功能:二维信号的多层小波分解1. 离散傅立叶变换的 Matlab实现格式:[C,S]=wavedec2(X,N,'wname')[C,S]=wavedec2(X,N,Lo_D,Hi_D)说明:[C,S]=wavedec2(X,N,'wname') 使用小波基函数 'wname' 对二维信号 X 进行 N 层分解;[C,S]=wavedec2(X,N,Lo_D,Hi_D) 使用指定的分解低通和高通滤波器 Lo_D 和 Hi_D 分解信号 X 。别可以实现一维、二维和 N 维 DFT
(4) idwt2 函数功能:二维离散小波反变换格式:X=idwt2(cA,cH,cV,cD,'wname')X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R)X=idwt2(cA,cH,cV,cD,'wname',S)别可以实现一维、二维和 N 维 DFTX=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S)说明:X=idwt2(cA,cH,cV,cD,'wname') 由信号小波分解的近似信号 cA 和细节信号 cH、cH、cV、cD 经小波反变换重构原信号 X ;X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R) 使用指定的重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号 X ;X=idwt2(cA,cH,cV,cD,'wname',S) 和 X=idwt2(cA,cH,cV,cD,Lo_R,Hi_R,S) 返回中心附近的 S 个数据点。
(5) waverec2 函数说明:二维信号的多层小波重构格式:X=waverec2(C,S,'wname')X=waverec2(C,S,Lo_R,Hi_R)说明:X=waverec2(C,S,'wname') 由多层二维小波分解的结果 C、S 重构原始信号 X ,'wname' 为使用的小波基函数;X=waverec2(C,S,Lo_R,Hi_R) 使用重构低通和高通滤波器 Lo_R 和 Hi_R 重构原信号。
Allnodes 计算树结点  appcoef 提取一维小波变换低频系数  appcoef2 提取二维小波分解低频系数  bestlevt 计算完整最佳小波包树 别可以实现一维、二维和 N 维 DFT  besttree 计算最佳(优)树*  biorfilt 双正交样条小波滤波器组  biorwavf 双正交样条小波滤波器 Matlab*  centfrq 求小波中心频率  cgauwavf Complex Gaussian小波  cmorwavf coiflets小波滤波器 1. 离散傅立叶变换的 Matlab实现  cwt 一维连续小波变换  dbaux Daubechies小波滤波器计算  dbwavf Daubechies小波滤波器 dbwavf(W) W='dbN' N=1,2,3,...,50 别可以实现一维、二维和 N 维 DFT  ddencmp 获取默认值阈值(软或硬)熵标准  depo2ind 将深度-位置结点形式转化成索引结点形式  detcoef 提取一维小波变换高频系数 Matlab  detcoef2 提取二维小波分解高频系数  disp 显示文本或矩阵  drawtree 画小波包分解树(GUI) 别可以实现一维、二维和 N 维 DFT  dtree 构造DTREE类  dwt 单尺度一维离散小波变换  dwt2 单尺度二维离散小波变换 别可以实现一维、二维和 N 维 DFT  dwtmode 离散小波变换拓展模式*  dyaddown 二元取样*  dyadup 二元插值 1. 离散傅立叶变换的 Matlab实现  entrupd 更新小波包的熵值  fbspwavf B样条小波  gauswavf Gaussian小波 Matlab  get 获取对象属性值  idwt 单尺度一维离散小波逆变换  idwt2 单尺度二维离散小波逆变换  ind2depo 将索引结点形式转化成深度&位置结点形式*  intwave 积分小波数  isnode 判断结点是否存在 Matlab  istnode 判断结点是否是终结点并返回排列值  iswt 一维逆SWT(Stationary Wavelet Transform)变换  iswt2 二维逆SWT变换 Matlab  leaves   Determine terminal nodes  mexihat 墨西哥帽小波  meyer Meyer小波 别可以实现一维、二维和 N 维 DFT  meyeraux Meyer小波辅助函数  morlet Morlet小波  nodease 计算上溯结点  nodedesc 计算下溯结点(子结点)  nodejoin 重组结点  nodepar 寻找父结点 别可以实现一维、二维和 N 维 DFT  nodesplt 分割(分解)结点  noleaves   Determine nonterminal nodes  ntnode   Number of terminal nodes函数 fft、fft2 和 fftn 分  ntree   Constructor for the class NTREE*  orthfilt 正交小波滤波器组  plot 绘制向量或矩阵的图形*  qmf 镜像二次滤波器  rbiowavf   Reverse biorthogonal spline wavelet filters  read 读取二进制数据  readtree 读取小波包分解树*  scal2frq   Scale to frequency  set   Matlab  shanwavf   Shannon wavelets  swt 一维SWT(Stationary Wavelet Transform)变换  swt2 二维SWT变换  symaux   Symlet wavelet filter computation.  symwavf Symlets小波滤波器  thselect 信号消噪的阈值选择  thodes   References  treedpth 求树的深度  treeord 求树结构的叉数  upcoef 一维小波分解系数的直接重构  upcoef2 二维小波分解系数的直接重构  upwlev 单尺度一维小波分解的重构  upwlev2 单尺度二维小波分解的重构  wavedec 单尺度一维小波分解  wavedec2 多尺度二维小波分解 Matlab  wavedemo 小波工具箱函数demo*  wavefun 小波函数和尺度函数*  wavefun2 二维小波函数和尺度函数 别可以实现一维、二维和 N 维 DFT  wavemenu 小波工具箱函数menu图形界面调用函数*  wavemngr 小波管理函数  waverec 多尺度一维小波重构 1. 离散傅立叶变换的 Matlab实现  waverec2 多尺度二维小波重构  wbmpen   Penalized threshold for wavelet 1-D or 2-D de-noising  wcodemat 对矩阵进行量化编码 1. 离散傅立叶变换的 Matlab实现  wdcbm   Thresholds for wavelet 1-D using Birge-Massart strategy  wdcbm2  Thresholds for wavelet 2-D using Birge-Massart strategy  wden 用小波进行一维信号的消噪或压缩  wdencmp  De-noising or compression using wavelets  wentropy 计算小波包的熵  wextend  Extend a vector or a matrix*  wfilters 小波滤波器  wkeep 提取向量或矩阵中的一部分*  wmaxlev 计算小波分解的最大尺度 1. 离散傅立叶变换的 Matlab实现  wnoise 产生含噪声的测试函数数据  wnoisest 估计一维小波的系数的标准偏差  wp2wtree 从小波包树中提取小波树  1. 离散傅立叶变换的 Matlab实现  wpcoef 计算小波包系数  wpcutree 剪切小波包分解树  wpdec 一维小波包的分解  wpdec2 二维小波包的分解  wpdencmp 用小波包进行信号的消噪或压缩  wpfun 小波包函数wpjoin  重组小波包  wprcoef 小波包分解系数的重构  wprec 一维小波包分解的重构 1. 离散傅立叶变换的 Matlab实现  wprec2 二维小波包分解的重构  wpsplt 分割(分解)小波包  wpthcoef 进行小波包分解系数的阈值处理  wptree  显示小波包树结构  wpviewcf   Plot the colored wavelet packet coefficients.  wrcoef 对一维小波系数进行单支重构 别可以实现一维、二维和 N 维 DFT  wrcoef2 对二维小波系数进行单支重构  wrev 向量逆序  write 向缓冲区内存写进数据  wtbo   Constructor for the class WTBO  wthcoef 一维信号的小波系数阈值处理  wthcoef2 二维信号的小波系数阈值处理 1. 离散傅立叶变换的 Matlab实现  wthresh 进行软阈值或硬阈值处理  wthrmngr 阈值设置管理  wtreemgr 管理树结构 Matlab
1. cwt函数
函数功能:实现一维连续小波变换的函数。语法格式: COEFS=cwt(S, SCALES, 'wname')COEFS=cwt(S, SCALES, 'wname', 'plot')COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE')COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM)使用说明:cwt为一维小波变换的函数。
格式 COEFS=cwt(S, SCALES, 'wname') 采用'wname'小波,在正、实尺度SCALES下计算向量一维小波系数。格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 除了计算小波系数外,还加以图形显示。格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 计算并画出连续小波变换的系数,并使用PLOTMODE对图形着色。格式 COEFS=cwt(S, SCALES, 'wname', 'plot') 相当于 格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE') 中的语法 COEFS=cwt(S, SCALES, 'wname', 'absglb')格式 COEFS=cwt(S, SCALES, 'wname', 'PLOTMODE', XLIM) 能够计算并画出连续小波变换的系数。系数使用PLOTMODE和XLIM进行着色。其中:XLIM=[x1,x2],并且有如下关系:1&=x1&=x2&=length(S)。MODE值 含义'lvl' scale-by-scale着色模式'glb' 考虑所有尺度的着色模式'abslvl'或'lvlabs' 使用系数绝对值的scale-by-scale着色模式'absglb'或'glbabs' 使用系数绝对值并考虑所有尺度的着色模式
例子:cwt函数的应用举例t=linspace(-1:1:512);s=1-abs(t);c=cwt(s,1:32,'cgau4');c=cwt(s,[64 32 16:-2:2]);c=cwt(s,[3 18 12.9 7 1.5],'db2');c=cwt(s,1:64,'sym4','abslvl',[100:400]);
2.pat2cwav函数
函数功能:由模式构造小波。语法格式:[PSI,XVAL,NC] = pat2cwav(YPAT, METHOD, POLDEGREE, REGULARITY)使用说明:该函数计算由XVAL和PSI给定并用于连续小波变换的小波函数,该小波向量YPAT定义的模式构造,方差为1。其中模式隐含的x值是xpat=linspace(0,1,length(YPAT))。常数NC的选取应保证通过以下方式的最小二乘拟合,NC*PSI在区间[0,1]上近似于YPAT:当METHD等于'polynomial'时,为POLDEGREE多项式;当METHD等于'othconst'时,为正交函数空间的投影;参数REGULARITY定义了在0点和1点的边界约束,可以是'continuous','differentiable'或'none'。当METHOD为'polynomial'时:当REGULARITY等于'continuous',则必须POLDEGREE&=3;当REGULARITY等于'differentiable',则必须POLDEGREE&=5。
请各位遵纪守法并注意语言文明查看: 4954|回复: 7
求助:opencv实现的离散小波变换结果分析
最近需要用DWT进行图像特征提取,在网上搜到一位前辈写的利用opencv进行DWT的代码,运行之后结果如下图。
请问这从左上到右下7幅图表示什么意义?如果我要提取图像的主特征应该用哪些数据?
(517.6 KB, 下载次数: 105)
01:38 上传
嗯,我知道了谢谢,我想用LL的图像怎么提取出来啊?哪个图像是啊?怎么表示啊?
代码如下:
// DWT.cpp : 定义控制台应用程序的入口点。
#include &stdafx.h&
#include &cv.h&
#include &highgui.h&
// 二维离散小波变换(单通道浮点图像)
void DWT(IplImage *pImage, int nLayer)
& & & & // 执行条件
& & & & if (pImage)
& & & & & & & & if (pImage-&nChannels == 1 &&
& & & & & & & & & & & & pImage-&depth == IPL_DEPTH_32F &&
& & & & & & & & & & & & ((pImage-&width && nLayer) && nLayer) == pImage-&width &&
& & & & & & & & & & & & ((pImage-&height && nLayer) && nLayer) == pImage-&height)
& & & & & & & & {
& & & & & & & & & & & & int& &&&i, x, y,
& & & & & & & & & & & & float& &fValue& &= 0;
& & & & & & & & & & & & float& &fRadius&&= sqrt(2.0f);
& & & & & & & & & & & & int& &&&nWidth& &= pImage-&
& & & & & & & & & & & & int& &&&nHeight&&= pImage-&
& & & & & & & & & & & & int& &&&nHalfW& &= nWidth / 2;
& & & & & & & & & & & & int& &&&nHalfH& &= nHeight / 2;
& & & & & & & & & & & & float **pData& & = new float*[pImage-&height];
& & & & & & & & & & & & float&&*pRow& &&&= new float[pImage-&width];
& & & & & & & & & & & & float&&*pColumn&&= new float[pImage-&height];
& & & & & & & & & & & & for (i = 0; i & pImage-& i++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & pData[i] = (float*) (pImage-&imageData + pImage-&widthStep * i);
& & & & & & & & & & & & }
& & & & & & & & & & & & // 多层小波变换
& & & & & & & & & & & & for (n = 0; n & nL n++, nWidth /= 2, nHeight /= 2, nHalfW /= 2, nHalfH /= 2)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & // 水平变换
& & & & & & & & & & & & & & & & for (y = 0; y & nH y++)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & // 奇偶分离
& & & & & & & & & & & & & & & & & & & & memcpy(pRow, pData[y], sizeof(float) * nWidth);
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfW; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & x = i * 2;
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][i] = pRow[x];
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][nHalfW + i] = pRow[x + 1];
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & // 提升小波变换
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfW - 1; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & fValue = (pData[y][i] + pData[y][i + 1]) / 2;
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][nHalfW + i] -= fV
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & fValue = (pData[y][nHalfW - 1] + pData[y][nHalfW - 2]) / 2;
& & & & & & & & & & & & & & & & & & & & pData[y][nWidth - 1] -= fV
& & & & & & & & & & & & & & & & & & & & fValue = (pData[y][nHalfW] + pData[y][nHalfW + 1]) / 4;
& & & & & & & & & & & & & & & & & & & & pData[y][0] += fV
& & & & & & & & & & & & & & & & & & & & for (i = 1; i & nHalfW; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & fValue = (pData[y][nHalfW + i] + pData[y][nHalfW + i - 1]) / 4;
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][i] += fV
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & // 频带系数
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfW; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][i] *= fR
& & & & & & & & & & & & & & & & & & & & & & & & pData[y][nHalfW + i] /= fR
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & // 垂直变换
& & & & & & & & & & & & & & & & for (x = 0; x & nW x++)
& & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & // 奇偶分离
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfH; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & y = i * 2;
& & & & & & & & & & & & & & & & & & & & & & & & pColumn[i] = pData[y][x];
& & & & & & & & & & & & & & & & & & & & & & & & pColumn[nHalfH + i] = pData[y + 1][x];
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nH i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & pData[i][x] = pColumn[i];
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & // 提升小波变换
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfH - 1; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & fValue = (pData[i][x] + pData[i + 1][x]) / 2;
& & & & & & & & & & & & & & & & & & & & & & & & pData[nHalfH + i][x] -= fV
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & fValue = (pData[nHalfH - 1][x] + pData[nHalfH - 2][x]) / 2;
& & & & & & & & & & & & & & & & & & & & pData[nHeight - 1][x] -= fV
& & & & & & & & & & & & & & & & & & & & fValue = (pData[nHalfH][x] + pData[nHalfH + 1][x]) / 4;
& & & & & & & & & & & & & & & & & & & & pData[0][x] += fV
& & & & & & & & & & & & & & & & & & & & for (i = 1; i & nHalfH; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & fValue = (pData[nHalfH + i][x] + pData[nHalfH + i - 1][x]) / 4;
& & & & & & & & & & & & & & & & & & & & & & & & pData[i][x] += fV
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & & & & & // 频带系数
& & & & & & & & & & & & & & & & & & & & for (i = 0; i & nHalfH; i++)
& & & & & & & & & & & & & & & & & & & & {
& & & & & & & & & & & & & & & & & & & & & & & & pData[i][x] *= fR
& & & & & & & & & & & & & & & & & & & & & & & & pData[nHalfH + i][x] /= fR
& & & & & & & & & & & & & & & & & & & & }
& & & & & & & & & & & & & & & & }
& & & & & & & & & & & & }
& & & & & & & & & & & & delete[] pD
& & & & & & & & & & & & delete[] pR
& & & & & & & & & & & & delete[] pC
& & & & & & & & }
// 二维离散小波恢复(单通道浮点图像)
//void IDWT(IplImage *pImage, int nLayer)
// // 执行条件
// if (pImage)
//&&if (pImage-&nChannels == 1 &&
//& &pImage-&depth == IPL_DEPTH_32F &&
//& &((pImage-&width && nLayer) && nLayer) == pImage-&width &&
//& &((pImage-&height && nLayer) && nLayer) == pImage-&height)
//& &int& &&&i, x, y,
//& &float& &fValue& &= 0;
//& &float& &fRadius&&= sqrt(2.0f);
//& &int& &&&nWidth& &= pImage-&width && (nLayer - 1);
//& &int& &&&nHeight&&= pImage-&height && (nLayer - 1);
//& &int& &&&nHalfW& &= nWidth / 2;
//& &int& &&&nHalfH& &= nHeight / 2;
//& &float **pData& & = new float*[pImage-&height];
//& &float&&*pRow& &&&= new float[pImage-&width];
//& &float&&*pColumn&&= new float[pImage-&height];
//& &for (i = 0; i & pImage-& i++)
//& & pData[i] = (float*) (pImage-&imageData + pImage-&widthStep * i);
//& &// 多层小波恢复
//& &for (n = 0; n & nL n++, nWidth *= 2, nHeight *= 2, nHalfW *= 2, nHalfH *= 2)
//& & // 垂直恢复
//& & for (x = 0; x & nW x++)
//& &&&// 频带系数
//& &&&for (i = 0; i & nHalfH; i++)
//& && &pData[i][x] /= fR
//& && &pData[nHalfH + i][x] *= fR
//& &&&// 提升小波恢复
//& &&&fValue = (pData[nHalfH][x] + pData[nHalfH + 1][x]) / 4;
//& &&&pData[0][x] -= fV
//& &&&for (i = 1; i & nHalfH; i++)
//& && &fValue = (pData[nHalfH + i][x] + pData[nHalfH + i - 1][x]) / 4;
//& && &pData[i][x] -= fV
//& &&&for (i = 0; i & nHalfH - 1; i++)
//& && &fValue = (pData[i][x] + pData[i + 1][x]) / 2;
//& && &pData[nHalfH + i][x] += fV
//& &&&fValue = (pData[nHalfH - 1][x] + pData[nHalfH - 2][x]) / 2;
//& &&&pData[nHeight - 1][x] += fV
//& &&&// 奇偶合并
//& &&&for (i = 0; i & nHalfH; i++)
//& && &y = i * 2;
//& && &pColumn[y] = pData[i][x];
//& && &pColumn[y + 1] = pData[nHalfH + i][x];
//& &&&for (i = 0; i & nH i++)
//& && &pData[i][x] = pColumn[i];
//& & // 水平恢复
//& & for (y = 0; y & nH y++)
//& &&&// 频带系数
//& &&&for (i = 0; i & nHalfW; i++)
//& && &pData[y][i] /= fR
//& && &pData[y][nHalfW + i] *= fR
//& &&&// 提升小波恢复
//& &&&fValue = (pData[y][nHalfW] + pData[y][nHalfW + 1]) / 4;
//& &&&pData[y][0] -= fV
//& &&&for (i = 1; i & nHalfW; i++)
//& && &fValue = (pData[y][nHalfW + i] + pData[y][nHalfW + i - 1]) / 4;
//& && &pData[y][i] -= fV
//& &&&for (i = 0; i & nHalfW - 1; i++)
//& && &fValue = (pData[y][i] + pData[y][i + 1]) / 2;
//& && &pData[y][nHalfW + i] += fV
//& &&&fValue = (pData[y][nHalfW - 1] + pData[y][nHalfW - 2]) / 2;
//& &&&pData[y][nWidth - 1] += fV
//& &&&// 奇偶合并
//& &&&for (i = 0; i & nHalfW; i++)
//& && &x = i * 2;
//& && &pRow[x] = pData[y][i];
//& && &pRow[x + 1] = pData[y][nHalfW + i];
//& &&&memcpy(pData[y], pRow, sizeof(float) * nWidth);
//& &delete[] pD
//& &delete[] pR
//& &delete[] pC
int _tmain(int argc, _TCHAR* argv[])
& & & & // 小波变换层数
& & & & int nLayer = 2;
& & & & // 输入彩色图像
& & & & IplImage *pSrc = cvLoadImage(&lena.jpg&, 1);
& & & & // 计算小波图象大小,使其width和height都是2的倍数
& & & & CvSize size = cvGetSize(pSrc);
& & & & if ((pSrc-&width && nLayer) && nLayer != pSrc-&width)
& & & & & & & & size.width = ((pSrc-&width && nLayer) + 1) && nL
& & & & if ((pSrc-&height && nLayer) && nLayer != pSrc-&height)
& & & & & & & & size.height = ((pSrc-&height && nLayer) + 1) && nL
& & & & // 创建小波图象
& & & & IplImage *pWavelet = cvCreateImage(size, IPL_DEPTH_32F, pSrc-&nChannels);
& & & & if (pWavelet)
& & & & & & & & // 小波图象赋值
& & & & & & & & cvSetImageROI(pWavelet, cvRect(0, 0, pSrc-&width, pSrc-&height));
& & & & & & & & cvConvertScale(pSrc, pWavelet, 1, -128);//使用线性变换转换数组:pWavelet = pSrc*1-128
& & & & & & & & cvResetImageROI(pWavelet);
& & & & & & & & // 彩色图像小波变换
& & & & & & & & IplImage *pImage = cvCreateImage(cvGetSize(pWavelet), IPL_DEPTH_32F, 1);
& & & & & & & & if (pImage)
& & & & & & & & {
& & & & & & & & & & & & for (int i = 1; i &= pWavelet-&nC i++)
& & & & & & & & & & & & {
& & & & & & & & & & & & & & & & cvSetImageCOI(pWavelet, i);//设置感兴趣通道channel
& & & & & & & & & & & & & & & & cvCopy(pWavelet, pImage, NULL);//pImage为灰度图像,将pWavelet的每个通道数据copy到pImage中
& & & & & & & & & & & & & & & & // 二维离散小波变换
& & & & & & & & & & & & & & & & DWT(pImage, nLayer);//对每个通道进行DWT
& & & & & & & & & & & & & & & & // 二维离散小波恢复
& & & & & & & & & & & & & & & & // IDWT(pImage, nLayer);
& & & & & & & & & & & & & & & & cvCopy(pImage, pWavelet, NULL);//将每个通道变换后的数据存入pWavelet的对应通道中
& & & & & & & & & & & & }
& & & & & & & & & & & & cvSetImageCOI(pWavelet, 0);
& & & & & & & & & & & & cvReleaseImage(&pImage);
& & & & & & & & }
& & & & & & & & // 小波变换图象
& & & & & & & & cvSetImageROI(pWavelet, cvRect(0, 0, pSrc-&width, pSrc-&height));
& & & & & & & & cvConvertScale(pWavelet, pSrc, 1, 128);
& & & & & & & & cvResetImageROI(pWavelet); // 本行代码有点多余,但有利用养成良好的编程习惯
& & & & & & & & cvReleaseImage(&pWavelet);
& & & & // 显示图像pSrc
& & & & cvNamedWindow(&dwt&,1);
& & & & cvShowImage(&dwt&,pSrc);
& & & & cvWaitKey(0);
& & & & cvDestroyWindow(&dwt&);
& & & & // ...
& & & & cvReleaseImage(&pSrc);
& & & & cvReleaseImage(&pSrc0);
& & & & return 0;
兄台,你这个弄明白了没
这是2阶2维小波变换。
从左上角到右下角是图像由LL(低低频)向HH(高高频)的个个子带数据。每一阶二维小波变换都会产生4个子带,多阶的小波变换是在LL频上进行迭代的结果。图像经小波变换后,其频域和时域的信息被分离开,便于进一步的处理。详细可参考
请问我把这个代码写进去,为什么会有提示说fatal error C1083: 无法打开包括文件:“stdafx.h”: No such file or directory,这到底是咋回事啊?上网查的那些方法都没用,这到底是怎么回事啊?还请大家帮忙,谢谢了!
你把 那个文件头注释掉, 试一下, 是工程建立是的 设置不一样造成的
嗯,我知道了谢谢,我想用LL的图像怎么提取出来啊?哪个图像是啊?怎么表示啊? ...
亲,我也好想知道LL图像怎么提取出来,你有答案了么?
Powered by

我要回帖

更多关于 simulink模块介绍 的文章

 

随机推荐