您的位置:首页 > 编程语言 > C语言/C++

小波变换的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);

}


                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: