编程环境:windows下结合opencv
//一维快速小波变换
/*
src,dstCA,dstCD均为一维行向量
dstCA,dstCD分别表示小波变换结果的低频和高频部分,其长度为src的一半
type:选取的小波名称
可用为: "Haar","db4","sym4"
使用Mallat算法,并利用傅里叶变换来快速执行卷积运算
*/
void DWT(CvMat* src, CvMat* dstCA, CvMat* dstCD, char* type);
//一维快速小波变换
/*
src,dstCA,dstCD均为一维行向量
dstCA,dstCD分别表示小波变换结果的低频和高频部分,其长度为src的一半
type:选取的小波名称
可用为: "Haar","db4","sym4"
使用Mallat算法,并利用傅里叶变换来快速执行卷积运算
*/
void DWT(CvMat* src, CvMat* dstCA, CvMat* dstCD, char* type)
{
if (!src || !dstCA || !dstCD)
{
return;
}
if (src->height > 1)
{
return;
}
int nDFTWidth = cvGetOptimalDFTSize(src->width);//傅里叶变换宽度
int nDFTHeight = cvGetOptimalDFTSize(1);//傅里叶变换宽度(src为一维的行向量)
//不同类型的小波数据,第一行表示低通分解滤波器,第二行表示高通分解滤波器
double pfWaveHaar[2][2] = {0.7071, 0.7071, -0.7071, 0.7071};
double pfWaveDb4[2][8] = { -0.0106, 0.0329, 0.0308, -0.1870, -0.0280, 0.6309, 0.7148, 0.2304,
-0.2304, 0.7148, -0.6309, -0.0280,