资源简介
在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
相关资源
- 信号奇异点Lipschitz指数计算
- 图像的小波包分解
- 实现小波变换例子 upcoef 函数
- 图像二维小波变换的实现源代码
- 基于OpenCV的数字识别468815
- 使用opencv去掉二值化图像中黑色面积
- 很好的一个小波变换图像压缩程序
- 小波变换的详细原理,应用
- 图像的小波变换/图像的融合、复原、
- 小波模极大值边缘检测
- 小波代码 小波变换 程序 代码 全部打
- 谐波小波分析的源代码,应该属于信
- 利用小波变换对图像进行分解与重构
- opencv环境配置
- win10 64位下编译的opencv4.5.5库,opencv
- 基于小波和Wigner-Ville分布的轨道不平
- NVIDIAOpticalFlowSDK-79c6cee80a2df9a196f20afd6
- opencv_contrib-3.4.0.zip
- opencv2.4.9源码分析——SIFT
- 用两个摄像头实现,双目标定,双目
- 小波神经网络预测模型代码
- 论文研究-平稳小波域红外图像增强的
- 小波包和SVM在轴承故障识别中的应用
- opencv_traincascade训练分类器,手势识别
- opencv3.0交叉编译用parallel.cpp
- 基于opencv的图像识别识别图像中的色
- 基于openCV的识别特定颜色区域
- 基于OpenCV的分水岭算法实现
- QT+opencv+OCR 身份证号码,银行卡号识别
- opencv视频特定颜色区域识别
评论
共有 条评论