資源簡(jiǎn)介
基于vs2010與opencv實(shí)現(xiàn)的第二代提升小波,代碼經(jīng)調(diào)試可用,閱讀性強(qiáng),思路清晰。
代碼片段和文件信息
//?DWT.cpp?:?定義控制臺(tái)應(yīng)用程序的入口點(diǎn)。
//
//#include?“stdafx.h“
#include
#include?“cv.h“
#include?“highgui.h“
//?二維離散小波變換(單通道浮點(diǎn)圖像)
using?namespace?std;
void?DWT(IplImage?*pImage?int?nlayer)
{
//?執(zhí)行條件
if?(pImage)
{
if?(pImage->nChannels?==?1?&&pImage->depth?==?IPL_DEPTH_32F?&&
((pImage->width?>>?nlayer)?<yer)?==?pImage->width?&&
((pImage->height?>>?nlayer)?<yer)?==?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];//生成二維數(shù)組用于對(duì)圖像逐像素進(jìn)行運(yùn)算
float??*pRow?????=?new?float[pImage->width];
float??*pColumn??=?new?float[pImage->height];
for?(i?=?0;?i?height;?i++)
{
//pData每一個(gè)指針頭指向輸入圖像pImage中的每一行,這樣就可對(duì)輸入圖像進(jìn)行關(guān)聯(lián),從而進(jìn)行操作
pData[i]?=?(float*)?(pImage->imageData?+?pImage->widthStep?*?i);
}
//?多層小波變換
for?(n?=?0;?n?yer;?n++?nWidth?/=?2?nHeight?/=?2?nHalfW?/=?2?nHalfH?/=?2)
{
//?水平變換
for?(y?=?0;?y? {
//?奇偶分離
memcpy(pRow?pData[y]?sizeof(float)?*?nWidth);//每次將數(shù)據(jù)中的一行拿出來(lái)
for?(i?=?0;?i? {
x?=?i?*?2;
pData[y][i]?=?pRow[x];//pData前半段為偶數(shù)位
pData[y][nHalfW?+?i]?=?pRow[x?+?1];//pData后半段為奇數(shù)位
}
//?提升小波變換
for?(i?=?0;?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? {
fValue?=?(pData[y][nHalfW?+?i]?+?pData[y][nHalfW?+?i?-?1])?/?4;
pData[y][i]?+=?fValue;
}
//?頻帶系數(shù)
for?(i?=?0;?i? {
pData[y][i]?*=?fRadius;
pData[y][nHalfW?+?i]?/=?fRadius;
}
}
//?垂直變換
for?(x?=?0;?x? {
//?奇偶分離
for?(i?=?0;?i? {
y?=?i?*?2;
pColumn[i]?=?pData[y][x];
pColumn[nHalfH?+?i]?=?pData[y?+?1][x];
}
for?(i?=?0;?i? {
pData[i][x]?=?pColumn[i];
}
//?提升小波變換
for?(i?=?0;?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? {
fValue?=?(pData[nHalfH?+?i][x]?+?pData[nHalfH?+?i?-?1][x])?/?4;
pData[i][x]?+=?fValue;
}
//?頻帶系數(shù)
for?(i?=?0;?i? {
pData[i][x]?*=?fRadius;
pData[nHalfH?+?i][x]?/
評(píng)論
共有 條評(píng)論