bool CWavelet::WaveRec2(
double *pSrcCoef,//多级分解出的源系数
double *pDstData//重构出来的信号
)
{
if (!m_bInitFlag2D)
{
cerr << "错误信息:未初始化,无法对信号进行分解!" << endl;
return false;
}
if (pSrcCoef == NULL || pDstData == NULL)//错误:无内存
return false;
int height = m_msgCL2D.msgHeight[0];
int width = m_msgCL2D.msgWidth[0];
int decLevel = m_msgCL2D.Scale;
int maxCeofSize = 4 * m_msgCL2D.msgHeight[1] * m_msgCL2D.msgWidth[1];
double *pTmpImage = new double[maxCeofSize];
int minCeofSize = 4 * m_msgCL2D.msgHeight[decLevel] * m_msgCL2D.msgWidth[decLevel];
for (int i = 0; i < minCeofSize; i++)
pTmpImage[i] = pSrcCoef[i];
int gap = minCeofSize;
for (int i = decLevel; i >= 1; i--)
{
int nextheight = m_msgCL2D.msgHeight[i - 1];//重构出来的高度
int nextwidth = m_msgCL2D.msgWidth[i - 1];//重构出来的宽度
IDWT2(pTmpImage, nextheight, nextwidth, pDstData);
if (i > 1)//i==1已经重构出来了,不再需要提取系数
{
for (int j = 0; j < nextheight*nextwidth; j++)
pTmpImage[j] = pDstData[j];
for (int j = 0; j < 3 * nextheight*nextwidth; j++)
pTmpImage[nextheight*nextwidth + j] = pSrcCoef[gap + j];
gap += 3 * nextheight*nextwidth;
}
}
delete[] pTmpImage;
pTmpImage = NULL;
return true;
}
我可以有偿代做