资源简介

在openCV平台下的小波变换函数,可以进行图像的小波分解和重构!

资源截图

代码片段和文件信息

// DWT.cpp : 定义控制台应用程序的入口点。
//

#include “stdafx.h“
#include “cv.h“
#include “highgui.h“

// 二维离散小波变换(单通道浮点图像)
void DWT(IplImage *pImage int nlayer)
{
 // 执行条件
 if (pImage)
 {
  if (pImage->nChannels == 1 &&
   pImage->depth == IPL_DEPTH_32F &&
   ((pImage->width >> nlayer) << nlayer) == pImage->width &&
   ((pImage->height >> nlayer) << nlayer) == pImage->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];
   float  *pColumn  = new float[pImage->height];
   for (i = 0; i < pImage->height; i++)
   {
    pData[i] = (float*) (pImage->imageData + pImage->widthStep * i);
   }
   // 多层小波变换
   for (n = 0; n < nlayer; n++ nWidth /= 2 nHeight /= 2 nHalfW /= 2 nHalfH /= 2)
   {
    // 水平变换
    for (y = 0; y < nHeight; y++)
    {
     // 奇偶分离
     memcpy(pRow pData[y] sizeof(float) * nWidth);
     for (i = 0; i < nHalfW; i++)
     {
      x = i * 2;
      pData[y][i] = pRow[x];
      pData[y][nHalfW + i] = pRow[x + 1];
     }
     // 提升小波变换
     for (i = 0; i < nHalfW - 1; i++)
     {
      fValue = (pData[y][i] + pData[y][i + 1]) / 2;
      pData[y][nHalfW + i] -= fValue;
     }
     fValue = (pData[y][nHalfW - 1] + pData[y][nHalfW - 2]) / 2;
     pData[y][nWidth - 1] -= fValue;
     fValue = (pData[y][nHalfW] + pData[y][nHalfW + 1]) / 4;
     pData[y][0] += fValue;
     for (i = 1; i < nHalfW; i++)
     {
      fValue = (pData[y][nHalfW + i] + pData[y][nHalfW + i - 1]) / 4;
      pData[y][i] += fValue;
     }
     // 频带系数
     for (i = 0; i < nHalfW; i++)
     {
      pData[y][i] *= fRadius;
      pData[y][nHalfW + i] /= fRadius;
     }
    }
    // 垂直变换
    for (x = 0; x < nWidth; x++)
    {
     // 奇偶分离
     for (i = 0; i < nHalfH; i++)
     {
      y = i * 2;
      pColumn[i] = pData[y][x];
      pColumn[nHalfH + i] = pData[y + 1][x];
     }
     for (i = 0; i < nHeight; i++)
     {
      pData[i][x] = pColumn[i];
     }
     // 提升小波变换
     for (i = 0; i < nHalfH - 1; i++)
     {
      fValue = (pData[i][x] + pData[i + 1][x]) / 2;
      pData[nHalfH + i][x] -= fValue;
     }
     fValue = (pData[nHalfH - 1][x] + pData[nHalfH - 2][x]) / 2;
     pData[nHeight - 1][x] -= fValue;
     fValue = (pData[nHalfH][x] + pData[nHalfH + 1][x]) / 4;
     pData[0][x] += fValue;
     for (i = 1; i < nHalfH; i++)
     {
      fValue = (pData[nHalfH + i][x] + pData[nHalfH + i - 1][x]) / 4;
      pData[i][x] += fValue;
     }
     // 频带系数
     for (i = 0; i < nHalfH; i++)
     {
      pData[i][x] *= fRadius;
      pData[nHalfH + i][x] /= fRadius;
     }
    }
   }
   delete[] pData;
   delete[] pRow;
   delete[] pColumn;
  }
 }
}


void main(int argc char* argv[])
{
 // 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件     353280  2009-05-19 10:42  wavelet\Debug\vc60.idb

     文件     561152  2009-05-19 10:42  wavelet\Debug\vc60.pdb

     文件     200766  2009-05-19 10:42  wavelet\Debug\wavelet.exe

     文件     315172  2009-05-19 10:42  wavelet\Debug\wavelet.ilk

     文件      50400  2009-05-19 10:42  wavelet\Debug\wavelet.obj

     文件    8356956  2009-05-18 16:40  wavelet\Debug\wavelet.pch

     文件     492544  2009-05-19 10:42  wavelet\Debug\wavelet.pdb

     文件     263224  2009-05-14 14:48  wavelet\lena.BMP

     文件       4817  2009-05-19 10:42  wavelet\wavelet.cpp

     文件       7782  2009-05-18 16:29  wavelet\wavelet.cpp.bak

     文件       3471  2009-05-18 16:47  wavelet\wavelet.dsp

     文件        520  2009-05-18 16:47  wavelet\wavelet.dsw

     文件      41984  2009-05-19 10:42  wavelet\wavelet.ncb

     文件      50688  2009-05-19 10:42  wavelet\wavelet.opt

     文件       1319  2009-05-19 10:42  wavelet\wavelet.plg

     目录          0  2009-05-19 10:42  wavelet\Debug

     目录          0  2009-05-19 10:42  wavelet

----------- ---------  ---------- -----  ----

             10704075                    17


评论

共有 条评论