小波变换 C opencv 实现.docx
- 文档编号:895307
- 上传时间:2022-10-13
- 格式:DOCX
- 页数:10
- 大小:16.13KB
小波变换 C opencv 实现.docx
《小波变换 C opencv 实现.docx》由会员分享,可在线阅读,更多相关《小波变换 C opencv 实现.docx(10页珍藏版)》请在冰豆网上搜索。
小波变换Copencv实现
小波变换C++opencv实现
小波变换C++opencv实现2014-10-2909:
32
3299人阅读
评论
(2)
收藏
举报分类:
CV相关(275)申明,本文非笔者原创,原文转载自:
///小波变换
MatWDT(constMat&_src,conststring_wname,constint_level)const
{
intreValue=THID_ERR_NONE;
Matsrc=Mat_<float>(_src);
Matdst=Mat:
:
zeros(src.rows,src.cols,src.type());
intN=src.rows;
intD=src.cols;
///高通低通滤波器
MatlowFilter;
MathighFilter;
wavelet(_wname,lowFilter,highFilter);
///小波变换
intt=1;
introw=N;
intcol=D;
while(t<=_level)
{
///先进行行小波变换
for(inti=0;i<row;i++)
{
///取出src中要处理的数据的一行
MatoneRow=Mat:
:
zeros(1,col,src.type());
for(intj=0;j<col;j++)
{
oneRow.at<float>(0,j)=src.at<float>(i,j);
}
oneRow=waveletDecompose(oneRow,lowFilter,highFilter);
///将src这一行置为oneRow中的数据
for(intj=0;j<col;j++)
{
dst.at<float>(i,j)=oneRow.at<float>(0,j);
}
}
#if0
//normalize(dst,dst,0,255,NORM_MINMAX);
IplImagedstImg1=IplImage(dst);
cvSaveImage("dst.jpg",&dstImg1);
#endif
///小波列变换
for(intj=0;j<col;j++)
{
///取出src数据的一行输入
MatoneCol=Mat:
:
zeros(row,1,src.type());
for(inti=0;i<row;i++)
{
oneCol.at<float>(i,0)=dst.at<float>(i,j);
}
oneCol=(waveletDecompose(oneCol.t(),lowFilter,highFilter)).t();
for(inti=0;i<row;i++)
{
dst.at<float>(i,j)=oneCol.at<float>(i,0);
}
}
#if0
//normalize(dst,dst,0,255,NORM_MINMAX);
IplImagedstImg2=IplImage(dst);
cvSaveImage("dst.jpg",&dstImg2);
#endif
///更新
row/=2;
col/=2;
t++;
src=dst;
}
returndst;
}
///小波逆变换
MatIWDT(constMat&_src,conststring_wname,constint_level)const
{
intreValue=THID_ERR_NONE;
Matsrc=Mat_<float>(_src);
Matdst=Mat:
:
zeros(src.rows,src.cols,src.type());
intN=src.rows;
intD=src.cols;
///高通低通滤波器
MatlowFilter;
MathighFilter;
wavelet(_wname,lowFilter,highFilter);
///小波变换
intt=1;
introw=N/std:
:
pow(2.,_level-1);
intcol=D/std:
:
pow(2.,_level-1);
while(row<=N&&col<=D)
{
///小波列逆变换
for(intj=0;j<col;j++)
{
///取出src数据的一行输入
MatoneCol=Mat:
:
zeros(row,1,src.type());
for(inti=0;i<row;i++)
{
oneCol.at<float>(i,0)=src.at<float>(i,j);
}
oneCol=(waveletReconstruct(oneCol.t(),lowFilter,highFilter)).t();
for(inti=0;i<row;i++)
{
dst.at<float>(i,j)=oneCol.at<float>(i,0);
}
}
#if0
//normalize(dst,dst,0,255,NORM_MINMAX);
IplImagedstImg2=IplImage(dst);
cvSaveImage("dst.jpg",&dstImg2);
#endif
///行小波逆变换
for(inti=0;i<row;i++)
{
///取出src中要处理的数据的一行
MatoneRow=Mat:
:
zeros(1,col,src.type());
for(intj=0;j<col;j++)
{
oneRow.at<float>(0,j)=dst.at<float>(i,j);
}
oneRow=waveletReconstruct(oneRow,lowFilter,highFilter);
///将src这一行置为oneRow中的数据
for(intj=0;j<col;j++)
{
dst.at<float>(i,j)=oneRow.at<float>(0,j);
}
}
#if0
//normalize(dst,dst,0,255,NORM_MINMAX);
IplImagedstImg1=IplImage(dst);
cvSaveImage("dst.jpg",&dstImg1);
#endif
row*=2;
col*=2;
src=dst;
}
returndst;
}
////////////////////////////////////////////////////////////////////////////////////////////
///调用函数
///生成不同类型的小波,现在只有haar,sym2
voidwavelet(conststring_wname,Mat&_lowFilter,Mat&_highFilter)const
{
if(_wname=="haar"||_wname=="db1")
{
intN=2;
_lowFilter=Mat:
:
zeros(1,N,CV_32F);
_highFilter=Mat:
:
zeros(1,N,CV_32F);
_lowFilter.at<float>(0,0)=1/sqrtf(N);
_lowFilter.at<float>(0,1)=1/sqrtf(N);
_highFilter.at<float>(0,0)=-1/sqrtf(N);
_highFilter.at<float>(0,1)=1/sqrtf(N);
}
if(_wname=="sym2")
{
intN=4;
floath[]={-0.483,0.836,-0.224,-0.129};
floatl[]={-0.129,0.224,0.837,0.483};
_lowFilter=Mat:
:
zeros(1,N,CV_32F);
_highFilter=Mat:
:
zeros(1,N,CV_32F);
for(inti=0;i<N;i++)
{
_lowFilter.at<float>(0,i)=l[i];
_highFilter.at<float>(0,i)=h[i];
}
}
}
///小波分解
MatwaveletDecompose(constMat&_src,constMat&_lowFilter,constMat&_highFilter)const
{
assert(_src.rows==1&&_lowFilter.rows==1&&_highFilter.rows==1);
assert(_src.cols>=_lowFilter.cols&&_src.cols>=_highFilter.cols);
Mat&src=Mat_<float>(_src);
intD=src.cols;
Mat&lowFilter=Mat_<float>(_lowFilter);
Mat&highFilter=Mat_<float>(_highFilter);
///频域滤波,或时域卷积;ifft(fft(x)*fft(filter))=cov(x,filter)
Matdst1=Mat:
:
zeros(1,D,
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 小波变换 opencv 实现 变换