亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? fretrans.cpp

?? 《VC++數(shù)字圖像處理》人民郵電大學出版社 何斌 馬天予 王遠堅 朱紅蓮
?? CPP
?? 第 1 頁 / 共 2 頁
字號:

/**************************************************************************
 *  文件名:FreTrans.cpp
 *
 *  正交變換API函數(shù)庫:
 *
 *  FFT()				- 快速付立葉變換
 *  IFFT()				- 快速付立葉反變換
 *  DCT()				- 離散余弦變換
 *  WALSH()				- 沃爾什-哈達瑪變換
 *
 *  Fourier()			- 圖像的付立葉變換
 *  DIBDct()			- 圖像的離散余弦變換
 *  DIBWalsh()			- 圖像的沃爾什-哈達瑪變換
 *
 *************************************************************************/

#include "FreTrans.h"
#include "stdafx.h"
#include "DIBAPI.h"

#include <math.h>
#include <direct.h>
#include <complex>
using namespace std;

// 常數(shù)π
#define PI 3.1415926535

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   FFT()
 *
 * 參數(shù):
 *   complex<double> * TD	- 指向時域數(shù)組的指針
 *   complex<double> * FD	- 指向頻域數(shù)組的指針
 *   r						-2的冪數(shù),即迭代次數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速付立葉變換。
 *
 ************************************************************************/
VOID WINAPI FFT(complex<double> * TD, complex<double> * FD, int r)
{
	// 付立葉變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i,j,k;
	
	// 中間變量
	int		bfsize,p;
	
	// 角度
	double	angle;
	
	complex<double> *W,*X1,*X2,*X;
	
	// 計算付立葉變換點數(shù)
	count = 1 << r;
	
	// 分配運算所需存儲器
	W  = new complex<double>[count / 2];
	X1 = new complex<double>[count];
	X2 = new complex<double>[count];
	
	// 計算加權(quán)系數(shù)
	for(i = 0; i < count / 2; i++)
	{
		angle = -i * PI * 2 / count;
		W[i] = complex<double> (cos(angle), sin(angle));
	}
	
	// 將時域點寫入X1
	memcpy(X1, TD, sizeof(complex<double>) * count);
	
	// 采用蝶形算法進行快速付立葉變換
	for(k = 0; k < r; k++)
	{
		for(j = 0; j < 1 << k; j++)
		{
			bfsize = 1 << (r-k);
			for(i = 0; i < bfsize / 2; i++)
			{
				p = j * bfsize;
				X2[i + p] = X1[i + p] + X1[i + p + bfsize / 2];
				X2[i + p + bfsize / 2] = (X1[i + p] - X1[i + p + bfsize / 2]) * W[i * (1<<k)];
			}
		}
		X  = X1;
		X1 = X2;
		X2 = X;
	}
	
	// 重新排序
	for(j = 0; j < count; j++)
	{
		p = 0;
		for(i = 0; i < r; i++)
		{
			if (j&(1<<i))
			{
				p+=1<<(r-i-1);
			}
		}
		FD[j]=X1[p];
	}
	
	// 釋放內(nèi)存
	delete W;
	delete X1;
	delete X2;
}

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   IFFT()
 *
 * 參數(shù):
 *   complex<double> * FD	- 指向頻域值的指針
 *   complex<double> * TD	- 指向時域值的指針
 *   r						-2的冪數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速付立葉反變換。
 *
 ************************************************************************/
VOID WINAPI IFFT(complex<double> * FD, complex<double> * TD, int r)
{
	// 付立葉變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i;
	
	complex<double> *X;
	
	// 計算付立葉變換點數(shù)
	count = 1 << r;
	
	// 分配運算所需存儲器
	X = new complex<double>[count];
	
	// 將頻域點寫入X
	memcpy(X, FD, sizeof(complex<double>) * count);
	
	// 求共軛
	for(i = 0; i < count; i++)
	{
		X[i] = complex<double> (X[i].real(), -X[i].imag());
	}
	
	// 調(diào)用快速付立葉變換
	FFT(X, TD, r);
	
	// 求時域點的共軛
	for(i = 0; i < count; i++)
	{
		TD[i] = complex<double> (TD[i].real() / count, -TD[i].imag() / count);
	}
	
	// 釋放內(nèi)存
	delete X;
}

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   Fourier()
 *
 * 參數(shù):
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數(shù))
 *   LONG  lHeight      - 源圖像高度(象素數(shù))
 *
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數(shù)用來對圖像進行付立葉變換。
 *
 ************************************************************************/
BOOL WINAPI Fourier(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 中間變量
	double	dTemp;
	
	// 循環(huán)變量
	LONG	i;
	LONG	j;
	
	// 進行付立葉變換的寬度和高度(2的整數(shù)次方)
	LONG	w;
	LONG	h;
	
	int		wp;
	int		hp;
	
	// 圖像每行的字節(jié)數(shù)
	LONG	lLineBytes;
	
	// 計算圖像每行的字節(jié)數(shù)
	lLineBytes = WIDTHBYTES(lWidth * 8);
	
	// 賦初值
	w = 1;
	h = 1;
	wp = 0;
	hp = 0;
	
	// 計算進行付立葉變換的寬度和高度(2的整數(shù)次方)
	while(w * 2 <= lWidth)
	{
		w *= 2;
		wp++;
	}
	
	while(h * 2 <= lHeight)
	{
		h *= 2;
		hp++;
	}
	
	// 分配內(nèi)存
	complex<double> *TD = new complex<double>[w * h];
	complex<double> *FD = new complex<double>[w * h];
	
	// 行
	for(i = 0; i < h; i++)
	{
		// 列
		for(j = 0; j < w; j++)
		{
			// 指向DIB第i行,第j個象素的指針
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			
			// 給時域賦值
			TD[j + w * i] = complex<double>(*(lpSrc), 0);
		}
	}
	
	for(i = 0; i < h; i++)
	{
		// 對y方向進行快速付立葉變換
		FFT(&TD[w * i], &FD[w * i], wp);
	}
	
	// 保存變換結(jié)果
	for(i = 0; i < h; i++)
	{
		for(j = 0; j < w; j++)
		{
			TD[i + h * j] = FD[j + w * i];
		}
	}
	
	for(i = 0; i < w; i++)
	{
		// 對x方向進行快速付立葉變換
		FFT(&TD[i * h], &FD[i * h], hp);
	}
	
	// 行
	for(i = 0; i < h; i++)
	{
		// 列
		for(j = 0; j < w; j++)
		{
			// 計算頻譜
			dTemp = sqrt(FD[j * h + i].real() * FD[j * h + i].real() + 
				         FD[j * h + i].imag() * FD[j * h + i].imag()) / 100;
			
			// 判斷是否超過255
			if (dTemp > 255)
			{
				// 對于超過的,直接設置為255
				dTemp = 255;
			}
			
			// 指向DIB第(i<h/2 ? i+h/2 : i-h/2)行,第(j<w/2 ? j+w/2 : j-w/2)個象素的指針
			// 此處不直接取i和j,是為了將變換后的原點移到中心
			//lpSrc = (unsigned char*)lpDIBBits + lLineBytes * (lHeight - 1 - i) + j;
			lpSrc = (unsigned char*)lpDIBBits + lLineBytes * 
				(lHeight - 1 - (i<h/2 ? i+h/2 : i-h/2)) + (j<w/2 ? j+w/2 : j-w/2);
			
			// 更新源圖像
			* (lpSrc) = (BYTE)(dTemp);
		}
	}
	
	// 刪除臨時變量
	delete TD;
	delete FD;
	
	// 返回
	return TRUE;
}

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   DCT()
 *
 * 參數(shù):
 *   double * f				- 指向時域值的指針
 *   double * F				- 指向頻域值的指針
 *   r						-2的冪數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速離散余弦變換。該函數(shù)利用2N點的快速付立葉變換
 * 來實現(xiàn)離散余弦變換。
 *
 ************************************************************************/
VOID WINAPI DCT(double *f, double *F, int r)
{
	// 離散余弦變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i;
	
	// 中間變量
	double	dTemp;
	
	complex<double> *X;
	
	// 計算離散余弦變換點數(shù)
	count = 1<<r;
	
	// 分配內(nèi)存
	X = new complex<double>[count*2];
	
	// 賦初值為0
	memset(X, 0, sizeof(complex<double>) * count * 2);
	
	// 將時域點寫入數(shù)組X
	for(i=0;i<count;i++)
	{
		X[i] = complex<double> (f[i], 0);
	}
	
	// 調(diào)用快速付立葉變換
	FFT(X,X,r+1);
	
	// 調(diào)整系數(shù)
	dTemp = 1/sqrt(count);
	
	// 求F[0]
	F[0] = X[0].real() * dTemp;
	
	dTemp *= sqrt(2);
	
	// 求F[u]	
	for(i = 1; i < count; i++)
	{
		F[i]=(X[i].real() * cos(i*PI/(count*2)) + X[i].imag() * sin(i*PI/(count*2))) * dTemp;
	}
	
	// 釋放內(nèi)存
	delete X;
}

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   IDCT()
 *
 * 參數(shù):
 *   double * F				- 指向頻域值的指針
 *   double * f				- 指向時域值的指針
 *   r						-2的冪數(shù)
 *
 * 返回值:
 *   無。
 *
 * 說明:
 *   該函數(shù)用來實現(xiàn)快速離散余弦反變換。該函數(shù)也利用2N點的快速付立葉變換
 * 來實現(xiàn)離散余弦反變換。
 *
 ************************************************************************/
VOID WINAPI IDCT(double *F, double *f, int r)
{
	// 離散余弦反變換點數(shù)
	LONG	count;
	
	// 循環(huán)變量
	int		i;
	
	// 中間變量
	double	dTemp, d0;
	
	complex<double> *X;
	
	// 計算離散余弦變換點數(shù)
	count = 1<<r;
	
	// 分配內(nèi)存
	X = new complex<double>[count*2];
	
	// 賦初值為0
	memset(X, 0, sizeof(complex<double>) * count * 2);
	
	// 將頻域變換后點寫入數(shù)組X
	for(i=0;i<count;i++)
	{
		X[i] = complex<double> (F[i] * cos(i*PI/(count*2)), F[i] * sin(i*PI/(count*2)));
	}
	
	// 調(diào)用快速付立葉反變換
	IFFT(X,X,r+1);
	
	// 調(diào)整系數(shù)
	dTemp = sqrt(2.0/count);
	d0 = (sqrt(1.0/count) - dTemp) * F[0];
	
	// 計算f(x)
	for(i = 0; i < count; i++)
	{
		f[i] = d0 + X[i].real()* dTemp * 2 * count;
	}
	
	// 釋放內(nèi)存
	delete X;
}

/*************************************************************************
 *
 * 函數(shù)名稱:
 *   DIBDct()
 *
 * 參數(shù):
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數(shù))
 *   LONG  lHeight      - 源圖像高度(象素數(shù))
 *
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數(shù)用來對圖像進行離散余弦變換。
 *
 ************************************************************************/
BOOL WINAPI DIBDct(LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	
	// 指向源圖像的指針
	unsigned char*	lpSrc;
	
	// 循環(huán)變量
	LONG	i;
	LONG	j;
	
	// 進行付立葉變換的寬度和高度(2的整數(shù)次方)
	LONG	w;
	LONG	h;
	
	// 中間變量
	double	dTemp;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产精品白丝jk黑袜喷水| 国产精品综合在线视频| 久久久一区二区| 欧美丝袜丝nylons| 成人午夜视频免费看| 日韩电影在线一区二区| 亚洲免费在线电影| 国产精品免费久久久久| 精品少妇一区二区三区日产乱码| 暴力调教一区二区三区| 九一九一国产精品| 天堂av在线一区| 一区二区三区欧美久久| 亚洲精品成人精品456| 中文字幕精品一区| 精品噜噜噜噜久久久久久久久试看| 91蜜桃传媒精品久久久一区二区| 秋霞成人午夜伦在线观看| 一区二区三区欧美激情| 一区二区三区欧美日| 亚洲精品综合在线| 亚洲精品va在线观看| 亚洲视频资源在线| 亚洲久草在线视频| 午夜日韩在线观看| 舔着乳尖日韩一区| 日韩不卡免费视频| 日本不卡在线视频| 蜜桃视频一区二区| 婷婷六月综合亚洲| 美女一区二区三区在线观看| 麻豆精品新av中文字幕| 久久99国产精品久久99果冻传媒| 日本va欧美va瓶| 激情综合色播五月| a美女胸又www黄视频久久| 91蝌蚪porny九色| 欧美日韩色综合| 在线播放一区二区三区| 欧美xxx久久| 国产精品福利av| 日韩不卡一二三区| 粉嫩一区二区三区在线看| 日本精品视频一区二区三区| 777xxx欧美| 亚洲欧美日韩在线不卡| 中文天堂在线一区| 日韩综合一区二区| 国产精品1024| 欧美性受极品xxxx喷水| 久久综合九色综合欧美就去吻| 国产精品成人一区二区三区夜夜夜| 亚洲综合成人在线| 成人一区二区三区在线观看| 欧美精品日韩精品| 亚洲精选在线视频| 成人免费va视频| 日韩欧美激情四射| 日韩在线a电影| 在线视频你懂得一区二区三区| 日韩免费观看高清完整版| 香蕉久久夜色精品国产使用方法| 亚洲老司机在线| va亚洲va日韩不卡在线观看| 精品免费视频一区二区| 亚洲va欧美va天堂v国产综合| 91碰在线视频| 国产精品视频第一区| 国产成人免费高清| 久久久一区二区| 国产成人免费av在线| 国产精品视频你懂的| 99精品偷自拍| 亚洲自拍都市欧美小说| 欧美日韩国产欧美日美国产精品| 樱花影视一区二区| 欧美日韩国产在线观看| 日本不卡一区二区三区| 久久免费国产精品| 老司机精品视频线观看86 | 国产三级一区二区三区| 成人高清av在线| 一区二区三区毛片| 精品久久久久久久一区二区蜜臀| 国产精品免费观看视频| 成人美女视频在线观看| 国产精品伦理一区二区| 欧美性极品少妇| 韩国成人在线视频| 一区二区三区国产精华| 欧美精品日韩综合在线| 国产成人精品影视| 综合网在线视频| 欧美高清一级片在线| 粉嫩久久99精品久久久久久夜| 亚洲午夜精品久久久久久久久| 欧美精品一区视频| 色综合激情久久| 国产在线精品一区二区| 午夜激情综合网| 中文字幕一区二区三区视频| 欧美变态口味重另类| 欧美午夜精品久久久久久超碰| 国产一区不卡视频| 日韩国产欧美在线播放| 亚洲精品日韩一| 国产精品传媒在线| 精品国产髙清在线看国产毛片| 91在线国产福利| 韩国女主播成人在线观看| 亚洲精品中文字幕乱码三区| 精品国产乱码久久久久久蜜臀 | 99热99精品| 国产成a人亚洲精品| 懂色av一区二区在线播放| 免费一区二区视频| 亚洲国产日韩a在线播放| 亚洲视频电影在线| 中文字幕一区二区三区在线观看| 精品国产在天天线2019| 久久一留热品黄| 国产天堂亚洲国产碰碰| 精品国产伦理网| 精品国产伦一区二区三区观看方式| 欧美群妇大交群的观看方式| 日韩三级视频在线看| 日韩女优电影在线观看| 日韩欧美国产一区二区三区| 欧美精品久久99| 精品国产乱码久久久久久老虎| 国产日韩欧美精品一区| 亚洲色图制服丝袜| 国产精品丝袜91| 国产日韩综合av| 国产精品麻豆一区二区| 中文字幕乱码亚洲精品一区| 亚洲欧洲精品一区二区三区| 亚洲精品国产一区二区精华液 | 欧美精彩视频一区二区三区| 一区在线观看视频| 亚洲va中文字幕| 精品中文字幕一区二区小辣椒| 成人网男人的天堂| 日韩一区二区三免费高清| 精品免费国产二区三区| 国产精品毛片大码女人 | 国产精品私人影院| 一区二区三区日韩精品| 视频一区二区中文字幕| 国内外成人在线| 欧美午夜精品久久久久久孕妇 | 在线亚洲一区二区| 国产亚洲欧洲997久久综合| 亚洲免费在线看| 成人精品国产一区二区4080| 欧美日韩一本到| 自拍偷拍欧美激情| 狠狠v欧美v日韩v亚洲ⅴ| 4438成人网| 中文字幕亚洲视频| 久久精品二区亚洲w码| 欧美视频在线一区| 亚洲欧美日韩一区二区三区在线观看| 国产尤物一区二区在线| 欧美精品在欧美一区二区少妇| 国产精品拍天天在线| 国产suv精品一区二区6| 精品国产髙清在线看国产毛片| 麻豆一区二区99久久久久| 欧美亚洲禁片免费| 五月婷婷综合网| 在线观看一区不卡| 亚洲h动漫在线| 7777女厕盗摄久久久| 天天色综合成人网| 欧美成人精品福利| 国产在线不卡一卡二卡三卡四卡| 亚洲精品一区二区三区蜜桃下载| 麻豆成人久久精品二区三区红| 欧美老年两性高潮| www亚洲一区| 日韩国产高清影视| 欧美一级夜夜爽| 激情深爱一区二区| 久久综合色8888| 风间由美一区二区三区在线观看 | 国产+成+人+亚洲欧洲自线| 国产欧美一区二区精品婷婷| 国产成人8x视频一区二区| 欧美国产丝袜视频| 97久久超碰国产精品电影| 一个色综合网站| 久久久久久久久蜜桃| 99久久国产综合精品女不卡| 日韩国产一区二| 国产精品毛片久久久久久| 在线一区二区三区四区五区| 日韩高清欧美激情| 久久丝袜美腿综合| 久久精品国产一区二区|