提供函数DWT()和IDWT(),前者完成任意层次的小波变换,后者完成任意层次的小波逆变换
输入图像要求必须是单通道浮点图像,对图像大小也有要求(1 层变换:w,h 必须是2的倍数;2 层变换:w,h 必须是4 的倍数;3 层变换:w,h 必须是8 的倍数
),变换后的结果直接保存在输入图像中
1、函数参数简单,图像指针 pImage 和变换层数nLayer
2、一个函数直接完成多层次二维小波变换,尽量减少下标运算,避免不必要的函数调用,以提高执行效率
3、变换过程中,使用了一个指针数组 pData 用于保存每行数据的起始位置,pRow 和pColumn用于保存一行和一列临时数据,用于奇偶分离或合并,内存消耗较少 // 二维离散小波变换(单通道浮点图像) void DWT(IplImage *pImage, int nLayer) { // 执行条件 if (pImage) { if (pImage->nChannels == 1 && pImage->depth == IPL_DEPTH_32F && ((pImage->width >> nLayer) width && ((pImage->height >> nLayer) height) { int i, x, y, n; float fValue = 0; float fRadius = sqrt(2
0f); int nWidth = pImage->width; int nHeight = pImage->height; int nHalfW = nWidth / 2; int nHalfH = nHeight / 2; float **pData = new float*[pImage->height]; float *pRow = new float[pImage->width]; floa