小波变换的C++实现

来源:互联网 发布:播放视频文件修复软件 编辑:程序博客网 时间:2024/05/22 12:47
</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);}elseWaveletBlockLH.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);}elseWaveletBlock.row(j) = WaveletBlockLH.row(i - N) - WaveletBlockLH.row(i - N+1);}

                                             
0 0