小波变换的C++实现
2016-05-04 12:01
399 查看
</pre><pre name="code" class="cpp"><p><span style="font-family:KaiTi_GB2312;font-size:14px;">看完小波变换的理论后想实现一线,同时发现opencv中并没有小波变换的函数(还是新版的有了,我不知道啊,please give Me a feedback if U guy know)</span></p><p>...............省略线。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。</p><p> int N = 16;</p> //该部分首先将图划分为16*16的block区域 //在每一个循环当中,在每一次循环的所有的操作中,都表示在一个block的操作 //其中包括一次小波变换得到四个区域 //一次空间Spatial Energy计算,将每个Block的能量块保存到EnergyBlock([8,8]大小)中 //并且将这些能量块的数值保存为vector作为SVM的训练样本 for (int x=0;x<inputImage.rows;x+=N) { Mat ROIBlock = inputImage(Range(x,x+N),Range(x,x+N)); //小波变换: //waveletblockLH为LH列变换后的结果 //waveletblock为waveletblock的LH行变换的结果 Mat WaveletBlockLH=Mat::zeros(16, 16, ROIBlock.type()); Mat WaveletBlock=Mat::zeros(16, 16, ROIBlock.type()); Mat EnergyBlock = Mat::zeros(8,8,ROIBlock.type()); //计算 for (int i=0,j=0;j<ROIBlock.cols;i+=2,j++) { //判断是否为前八列,如果成立则 // j=.i+.(i+1) //否则:j=.(i-8)-.(i+1-8) if (floor(j / 8) == 0) { WaveletBlockLH.col(j) = ROIBlock.col(i) + ROIBlock.col(i + 1); } else WaveletBlockLH.col(j)=ROIBlock.col(i-N)-ROIBlock.col(i-N+1); } for (int i = 0,j = 0; j<WaveletBlockLH.rows; i += 2, j++) { //判断是否为前八列,如果成立则 // j=.i+.(i+1) //否则:j=.(i-8)-.(i+1-8) if (floor(j / 8) == 0) { WaveletBlock.row(j) = WaveletBlockLH.row(i) + WaveletBlockLH.row(i + 1); } else WaveletBlock.row(j) = WaveletBlockLH.row(i - N) - WaveletBlockLH.row(i - N+1); }
相关文章推荐
- [C++]模板与泛型编程
- 举例讲解C语言对归并排序算法的基础使用
- C++中的运算符合赋值问题
- 【LeetCode】112. Path Sum Java,C++,解法及注释
- C++primer 5th exercise section 12.1.6 答案
- c++ 按地址 按引用
- C语言演示对归并排序算法的优化实现
- c++中冒号(:)和双冒号(::)的区别与用法
- C++ 值传递、指针传递、引用传递详解
- 347. Top K Frequent Elements (C++程序实现,两种方案)
- C++ 实现URL 编码/解码代码
- hdu 1033 Edge
- 【C语言】求一个整数的因子之和
- More Effective C++----(1)指针与引用的区别 & (2)尽量使用C++风格的类型转换 & (3)不要对数组使用多态
- C++中的复制、赋值、析构
- C++面向对象编程
- c++动态库加载顺序和同名动态库同时加载问题
- HDU 1251-统计难题(字典树-统计前缀串)
- 我的c\c++之旅(五)
- 【LeetCode】111. Minimum Depth of Binary Tree解法及注释,Java,C++,DFS