编程环境:windows下结合opencv库
//二维图像小波变换
/*
nLayer:变换尺度
type:小波类型
*/
void ImageDWT(IplImage* src, IplImage* dst, int nLayer, char* type);
//通用的二维小波变换
/*
nLayer:小波变换的层数
type:选取的小波名称
可用为: "haar","db4","sym4"
使用Mallat算法,并利用傅里叶变换来快速执行卷积运算
src与dst深度均为IPL_DEPTH_8U
*/
void ImageDWT(IplImage* src, IplImage* dst, int nLayer, char* type)
{
if (!src || !dst)
{
return;
}
//判断src与dst的长度宽度是否为2的倍数
if (((dst->width >> nLayer) << nLayer != dst->width)
|| ((dst->height >> nLayer) << nLayer != dst->height)
|| (src->nChannels != 1)
|| (dst->nChannels != 1)
|| (nLayer <= 0))
{
return;
}
CvMat* pMatData = NULL;//用于保存计算过程中的向量
CvMat* pMatCA = NULL;
CvMat* pMatCD = NULL;
CvMat* pMatDst = cvCreateMat(dst->height, dst->width, CV_64FC1);//结果矩阵
CvMat tmp;