資源簡介
在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)?<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];
???float??*pRow?????=?new?float[pImage->width];
???float??*pColumn??=?new?float[pImage->height];
???for?(i?=?0;?i?height;?i++)
???{
????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);
?????for?(i?=?0;?i??????{
??????x?=?i?*?2;
??????pData[y][i]?=?pRow[x];
??????pData[y][nHalfW?+?i]?=?pRow[x?+?1];
?????}
?????//?提升小波變換
?????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;
?????}
?????//?頻帶系數
?????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;
?????}
?????//?頻帶系數
?????for?(i?=?0;?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
評論
共有 條評論