C++ 小波变换

 

 

  1 #include <iostream>
  2 #include <vector>
  3 using namespace std;
  4 #define LENGTH 512
  5 #define LEVEL 4
  6 #define L_core 6
  7 
  8 int main()
  9 {
 10     
 11     
 12 }
 13 
 14 
 15 static void Covlution(double data[], double core[], double cov[], int LEN)
 16 {
 17     double temp[LENGTH + L_core - 1] = { 0 };
 18     int i = 0;
 19     int j = 0;
 20 
 21     for (i = 0; i < LEN; i++)
 22     {
 23         for (j = 0; j < L_core; j++)
 24         {
 25             temp[i + j] += data[i] * core[j];
 26         }
 27     }
 28 
 29     for (i = 0; i < LEN; i++)
 30     {
 31         if (i < L_core - 1)
 32             cov[i] = temp[i] + temp[LEN + i];
 33         else
 34             cov[i] = temp[i];
 35     }
 36 
 37 }
 38 //卷积
 39 static void Covlution2(double data[], double core[], double cov[], int LEN)
 40 {
 41     double temp[LENGTH + L_core - 1] = { 0 };
 42     int i = 0;
 43     int j = 0;
 44 
 45     for (i = 0; i < LEN; i++)
 46     {
 47         for (j = 0; j < L_core; j++)
 48         {
 49             temp[i + j] += data[i] * core[j];
 50         }
 51     }
 52 
 53     for (i = 0; i < LEN; i++)
 54     {
 55         if (i < L_core - 1)
 56             cov[i + LEN - L_core + 1] = temp[i] + temp[LEN + i];
 57         else
 58             cov[i - L_core + 1] = temp[i];
 59     }
 60 
 61 }
 62 //
 63 static void DWT1D(double input[], double output[], double LF[], double HF[], int l)
 64 {
 65     int i = 0;
 66     double temp[LENGTH] = { 0 };
 67     int LEN = LENGTH / pow(2, l - 1);
 68 
 69     Covlution(input, LF, temp, LEN);
 70     for (i = 1; i < LEN; i += 2)
 71     {
 72         output[i / 2] = temp[i];
 73     }
 74 
 75     Covlution(input, HF, temp, LEN);
 76     for (i = 1; i < LEN; i += 2)
 77     {
 78         output[LEN / 2 + i / 2] = temp[i];
 79     }
 80 }
 81 //变换吗?
 82 static void DWT(double input[], double output[], double LF[], double HF[], int len[])
 83 {
 84     int i;
 85     int j;
 86 
 87     len[0] = len[1] = LENGTH / pow(2, LEVEL);
 88     for (i = 2; i <= LEVEL; i++) len[i] = len[i - 1] * 2;
 89 
 90     DWT1D(input, output, LF, HF, 1);
 91     for (i = 2; i <= LEVEL; i++)
 92     {
 93         for (j = 0; j < len[LEVEL + 2 - i]; j++) input[j] = output[j];
 94         DWT1D(input, output, LF, HF, i);
 95     }
 96 }
 97 //一层吗
 98 static void IDWT1D(double input[], double output[], double LF[], double HF[], int l, int flag)
 99 {
100     int i = 0;
101     double temp[LENGTH] = { 0 };
102     int LEN = l * 2;
103 
104     if (flag) Covlution2(input, HF, temp, LEN);
105     else Covlution2(input, LF, temp, LEN);
106 
107     for (i = 0; i < LEN; i++)
108     {
109         output[i] = temp[i];
110     }
111 }
112 //二层吗
113 static void IDWT(double input[], double output[], double LF[], double HF[], int len[], int level)
114 {
115     int i;
116     int j;
117     for (j = 0; j < len[LEVEL + 1 - level]; j++)
118     {
119         output[2 * j] = 0;
120         output[2 * j + 1] = input[j];
121     }
122     for (j = 0; j < 2 * len[LEVEL + 1 - level]; j++)
123     {
124         input[j] = output[j];
125     }
126     IDWT1D(input, output, LF, HF, len[LEVEL + 1 - level], 1);
127 
128     for (i = level - 1; i > 0; i--)
129     {
130         for (j = 0; j < len[LEVEL + 1 - i]; j++)
131         {
132             input[2 * j] = 0;
133             input[2 * j + 1] = output[j];
134         }
135         IDWT1D(input, output, LF, HF, len[LEVEL + 1 - i], 0);
136     }
137 }

 

转载于:https://www.cnblogs.com/hsy1941/p/11417084.html

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
cwt-0.1.tar.gz cwt.pdf cwtlib-1.5.tar.gz ecg-vc8.rar ecg.rar fwt_filters.rar MassSpecWavelet-manual.pdf Publ_24-27_May_2005_Rus.tar.gz toolbox.tar.Z VC实现的二维小变换源代码.rar VC编写,具有小变换,复原,图像融合等算法.经过调试,可以正常 运行.rar wavelet.0.3.tar.gz 图像处理中的小变换C++源代码,含有使用文档和例子,非常全面!.rar 图像小变换的vc++代码,包括小变换WaveletTransform.rar 基于Gabor小变换的特征提取和人工智能的人脸检测系统源代码.rar 基于小变换的图像融合技术研究.exe 基于小变换的车型特征提取及车型分类PPT(程啸岚).rar(5.08M).rar 小人脸表情.rar 小代码.rar 小变换的代码.是学习小变换的好的例程!-.tar 小变换C++源代码(1).rar 小变换C++源代码.asp.rar 小变换C++源代码.rar 小变换C++程序.rar 小变换的数字水印算法,附有论文和源程序.rar 小变换程序源代码.rar 小变换算法.zip(121.27K).zip 小时频画图工具包,能较好地画出小变换地时频图.rar 小器-代码.r.. . 关于常用图像处理的v.. . 采用多种小基的离散.. . 利用小变换进行边缘.. . 一个.rar 常用的小变换程序.rar 本程序实现二维灰度图像的小变换和逆变换wavelet.rar 脊变换.zip 这是我以前收集的一个毕业论文(包括源程序),是关于图像小变换实现及EZW编码理论研究,供大家交流.rar 连续小变换下载.rar 连续小程序入门.rar

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值