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

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

?? fouriertransforms.cpp

?? fft變換代碼,采用基2的頻率域變換代碼.
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
*   complex<double> * pCFData	- 指向頻域值的指針
*   complex<double> * pCTData	- 指向時域值的指針
*   nLevel						-付立葉變換蝶形算法的級數(shù),2的冪數(shù)
*
* 返回值:
*   無。
*
* 說明:
*   該函數(shù)用來實現(xiàn)快速付立葉反變換。
*
************************************************************************/
LLVPRO_API void IFFT_1D(complex<double> * pCFData, complex<double> * pCTData, int nLevel)
{

	// 付立葉變換點數(shù)
	long	lcount;
	
	// 循環(huán)變量
	int		i;
	
	complex<double> *pCWork;
	
	// 計算付立葉變換點數(shù)
	lcount = 1 << nLevel;
	
	// 分配運算所需存儲器
	pCWork = new complex<double>[lcount];
	
	// 將頻域點寫入pCWork
	memcpy(pCWork, pCFData, sizeof(complex<double>) * lcount);
	
	// 為了利用付立葉正變換,可以把付立葉頻域的數(shù)據(jù)取共軛
	// 然后直接利用正變換,輸出結(jié)果就是付立葉反變換結(jié)果的共軛
	for(i = 0; i < lcount; i++)
	{
		pCWork[i] = complex<double> (pCWork[i].real(), -pCWork[i].imag());
	}
	
	// 調(diào)用快速付立葉變換實現(xiàn)反變換,結(jié)果存儲在pCTData中
	FFT_1D_Opti(pCWork, pCTData, nLevel);
	
	// 求時域點的共軛,求得最重結(jié)果
	// 根據(jù)付立葉變換原理,利用這樣的方法求的結(jié)果和實際的時域數(shù)據(jù)
	// 相差一個系數(shù)nCount
	for(i = 0; i < lcount; i++)
	{
		pCTData[i] = complex<double> (pCTData[i].real() / lcount, -pCTData[i].imag() / lcount);
	}
	
	// 釋放內(nèi)存
	if( pCWork!=NULL )
	{
		delete []pCWork;
		pCWork = NULL;
	}

}

/*************************************************************************
*
* \函數(shù)名稱:
*   FFT_2D()
*
* \輸入?yún)?shù):
*   complex<double> * pCTData	- 圖像數(shù)據(jù)
*   complex<double> * pCFData	- 傅立葉變換后的結(jié)果
*   long    lTransWidth			- 變換數(shù)據(jù)寬度
*   long    lTransHeight		- 變換數(shù)據(jù)高度
*
* \返回值:
*   TRUE   變換成功
*   FALSE  變換失敗
*
* \說明:
*   二維傅立葉變換。
*   不負責(zé)pCTData的補零操作
************************************************************************/
LLVPRO_API BOOL FFT_2D(complex<double> * pCTData, complex<double> * pCFData,long  lTransWidth, long lTransHeight)
{

	if(pCTData==NULL||pCFData==NULL||lTransWidth<=0||lTransHeight<=0)
	{
		return FALSE;
	}
	
	// 循環(huán)控制變量
	int	x;
	int	y;
		
	// x,y(行列)方向上的迭代次數(shù)
	int		nXLev;
	int		nYLev;
	
	// 計算x,y(行列)方向上的迭代次數(shù)
	nXLev = (int) ( log(lTransWidth)/log(2) )  ;
	nYLev = (int) ( log(lTransHeight)/log(2))  ;

	

	if(((1 << nXLev)!=lTransWidth)||((1 << nYLev)!=lTransHeight))
	{
		return FALSE;
	}

	
	for(y = 0; y < lTransHeight; y++)
	{
		// x方向進行快速傅立葉變換
//		FFT_1D(&pCTData[lTransWidth * y], &pCFData[lTransWidth * y], nXLev);
		FFT_1D_Opti(&pCTData[lTransWidth * y], &pCFData[lTransWidth * y], nXLev);
		
	}
	
	// pCFData中目前存儲了pCTData經(jīng)過行變換的結(jié)果
	// 為了直接利用FFT_1D,需要把pCFData的二維數(shù)據(jù)轉(zhuǎn)置,再一次利用FFT_1D進行
	// 傅立葉行變換(實際上相當于對列進行傅立葉變換)
	for(y = 0; y < lTransHeight; y++)
	{
		for(x = 0; x < lTransWidth; x++)
		{
			pCTData[lTransHeight * x + y] = pCFData[lTransWidth * y + x];
		}
	}
	
	for(x = 0; x < lTransWidth; x++)
	{
		// 對x方向進行快速傅立葉變換,實際上相當于對原來的圖象數(shù)據(jù)進行列方向的
		// 傅立葉變換
//		FFT_1D(&pCTData[lTransHeight * x], &pCFData[lTransHeight * x], nYLev);		
		FFT_1D_Opti(&pCTData[x * lTransHeight], &pCFData[x * lTransHeight], nYLev);
	}
	
	// pCFData中目前存儲了pCTData經(jīng)過二維傅立葉變換的結(jié)果,但是為了方便列方向
	// 的傅立葉變換,對其進行了轉(zhuǎn)置,現(xiàn)在把結(jié)果轉(zhuǎn)置回來
	for(y = 0; y < lTransHeight; y++)
	{
		for(x = 0; x < lTransWidth; x++)
		{
			pCTData[lTransWidth * y + x] = pCFData[lTransHeight * x + y];
		}
	}
	
	memcpy(pCFData,pCTData, sizeof(complex<double>) * lTransHeight * lTransWidth );

	return TRUE;

}

/*************************************************************************
*
* \函數(shù)名稱:
*   IFFT_2D()
*
* \輸入?yún)?shù):
*   complex<double> * pCFData	- 頻域數(shù)據(jù)
*   complex<double> * pCTData	- 時域數(shù)據(jù)
*   long    lTransWidth			- 變換數(shù)據(jù)寬度
*   long    lTransHeight		- 變換數(shù)據(jù)高度
*
* \返回值:
*   TRUE   變換成功
*   FALSE  變換失敗
*
* \說明:
*   二維傅立葉反變換。
*   
*************************************************************************/
LLVPRO_API BOOL IFFT_2D(complex<double> * pCFData, complex<double> * pCTData, long  lTransWidth, long lTransHeight)
{

	if(pCTData==NULL||pCFData==NULL||lTransWidth<=0||lTransHeight<=0)
	{
		return FALSE;
	}
	
	// x,y(行列)方向上的迭代次數(shù)
	int		nXLev;
	int		nYLev;
	// 計算x,y(行列)方向上的迭代次數(shù)
	nXLev = (int) ( log(lTransWidth)/log(2)  );
	nYLev = (int) ( log(lTransHeight)/log(2) );
	
	if(((1 << nXLev)!=lTransWidth)||((1 << nYLev)!=lTransHeight))
	{
		return FALSE;
	}

	// 循環(huán)控制變量
	int	x;
	int	y;
	
	
	// 分配工作需要的內(nèi)存空間
	complex<double> *pCWork= new complex<double>[lTransWidth * lTransHeight];
	
	//臨時變量
	complex<double> *pCTmp ;
	
	// 為了利用傅立葉正變換,可以把傅立葉頻域的數(shù)據(jù)取共軛
	// 然后直接利用正變換,輸出結(jié)果就是傅立葉反變換結(jié)果的共軛
	for(y = 0; y < lTransHeight; y++)
	{
		for(x = 0; x < lTransWidth; x++)
		{
			pCTmp = &pCFData[lTransWidth * y + x] ;
			pCWork[lTransWidth * y + x] = complex<double>( pCTmp->real() , -pCTmp->imag() );
		}
	}
	
	// 調(diào)用傅立葉正變換
	FFT_2D(pCWork, pCTData,lTransWidth, lTransHeight) ;
	
	// 求時域點的共軛,求得最終結(jié)果
	// 根據(jù)傅立葉變換原理,利用這樣的方法求得的結(jié)果和實際的時域數(shù)據(jù)
	// 相差一個系數(shù)
	for(y = 0; y < lTransHeight; y++)
	{
		for(x = 0; x < lTransWidth; x++)
		{
			pCTmp = &pCTData[lTransWidth * y + x] ;

			pCTData[lTransWidth * y + x] =  complex<double>( pCTmp->real()/(lTransWidth*lTransHeight),
				                                              -pCTmp->imag()/(lTransWidth*lTransHeight) );
		}
	}
	delete []pCWork ;
	pCWork = NULL ;

    return TRUE;


}
/*************************************************************************
*
* \函數(shù)名稱:
*   DIBFFT_2D()
*
* \輸入?yún)?shù):
*   LPBYTE  pbyImage            - 圖像數(shù)據(jù)
*   long    lWidth				- 數(shù)據(jù)寬度
*   long    lHeight				- 數(shù)據(jù)高度
*   long    lTransWidth         - 變換寬度
*   long    lTransHeight        - 變換高度
*   complex<double> * pCFData	- 頻域數(shù)據(jù),中心變換后的數(shù)據(jù)
* \返回值:
*   TRUE   變換成功
*   FALSE  變換失敗
*
* \說明:
*   圖像二維傅立葉變換。
*   若lWidth!=lTransWidth||lHeight!=lTransHeight,對時域數(shù)據(jù)進行補零操作
*   pCFData    數(shù)據(jù)經(jīng)過中心變換
*************************************************************************/

LLVPRO_API BOOL DIBFFT_2D(LPBYTE pbyImage,long lWidth,long lHeight,long &lTransWidth,long &lTransHeight,complex<double>* &pCFData)
{

	   // 空域變換尺寸必須不小于圖像尺寸
	   if(pbyImage == NULL||lWidth <= 0||lHeight <0 )
	   {
		   return FALSE;
	   }

	   int x,y;	

	   
	   // 臨時變量
	   double 	dTmpOne;
	   double   dTmpTwo;
	   
	   
	   // 計算進行傅立葉變換的點數(shù)	(2的整數(shù)次冪)
	   dTmpOne = log(lWidth)/log(2)    ;
	   dTmpTwo = ceil(dTmpOne)		   ;
	   dTmpTwo = pow(2,dTmpTwo)	       ;
	   lTransWidth = (long) dTmpTwo    ;
	   
	   // 計算進行傅立葉變換的點數(shù) (2的整數(shù)次冪)
	   dTmpOne = log(lHeight)/log(2)   ;
	   dTmpTwo = ceil(dTmpOne)		   ;
	   dTmpTwo = pow(2,dTmpTwo)	       ;
	   lTransHeight = (long) dTmpTwo   ;

	   if(pCFData != NULL)
	   {
		   xfree(pCFData);
		   pCFData = NULL;
	   }
	   
	   pCFData = (complex<double>*)xmalloc(lTransWidth * lTransHeight*sizeof(complex<double>));
		
       if(pCFData == NULL)
	   {
		   return FALSE;
	   }
	   
		// 指向時域數(shù)據(jù)的指針
	   complex<double>* pCTData = new complex<double>[lTransWidth * lTransHeight];
	
		// 初始化
		// 圖象數(shù)據(jù)的寬和高不一定是2的整數(shù)次冪,所以pCTData
		// 有一部分數(shù)據(jù)需要補0
	   if(lHeight!=lTransHeight)
	   {
		   memset(pCTData+lHeight,0,sizeof(complex<double>)*lTransWidth*(lTransHeight-lHeight));		   
	   }

	   if(lWidth != lTransWidth)
	   {
		   for(y=0; y< lHeight ; y++)
		   {

		      memset(pCTData+y*lTransWidth+lWidth,0,sizeof(complex<double>)*(lTransWidth-lWidth));			   
		   }		   
	   }

		// 把圖象數(shù)據(jù)傳給pCTData,并進行中心變換
		for(y=0; y<lHeight; y++)
		{
			for(x=0; x<lWidth; x++)
			{	
				BYTE unchValue = pbyImage[y*lWidth +x] ;
				
				if((x+y)%2==0)
				{
					pCTData[y*lTransWidth + x]=complex<double>(unchValue,0);					
				}
                else  
				{
					pCTData[y*lTransWidth + x]=complex<double>(-unchValue,0);
				}
								
			}
			
		}

		// 傅立葉正變換
		if(!FFT_2D(pCTData,pCFData,lTransWidth, lTransHeight) )
		{
			return FALSE;
		}

		if(pCTData!=NULL)
		{
			delete []pCTData;
			pCTData = NULL;
		}

		return TRUE;

}










































?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人久久影院| 久久精品亚洲麻豆av一区二区| 中文无字幕一区二区三区 | 久久精品国产成人一区二区三区| 欧美剧在线免费观看网站| 日韩激情av在线| 日韩一区二区在线观看视频| 精久久久久久久久久久| 国产人成一区二区三区影院| 99久久er热在这里只有精品15| 中文字幕一区二区视频| 欧美在线一区二区| 蜜臀久久久久久久| 久久精品一区二区三区不卡| 成人av午夜影院| 亚洲综合成人在线| 日韩免费性生活视频播放| 国产九九视频一区二区三区| 《视频一区视频二区| 欧美欧美欧美欧美| 国内精品视频666| 《视频一区视频二区| 在线播放91灌醉迷j高跟美女| 老司机午夜精品99久久| 综合婷婷亚洲小说| 日韩视频一区二区| 99久久er热在这里只有精品66| 香蕉成人啪国产精品视频综合网| 久久久午夜精品| 91捆绑美女网站| 欧美bbbbb| 综合色天天鬼久久鬼色| 日韩免费一区二区| 日本韩国精品在线| 国产一区二区三区国产| 亚洲午夜久久久久久久久久久| 欧美www视频| 色乱码一区二区三区88| 久久99这里只有精品| 亚洲卡通动漫在线| 精品国产免费一区二区三区香蕉| 色狠狠一区二区三区香蕉| 美女www一区二区| 亚洲视频电影在线| 国产欧美日韩久久| 日韩精品一区二区三区四区 | 国产亚洲成av人在线观看导航| 日本福利一区二区| 国产丶欧美丶日本不卡视频| 亚洲va欧美va国产va天堂影院| 欧美精彩视频一区二区三区| 日韩小视频在线观看专区| 欧美做爰猛烈大尺度电影无法无天| 国产一区二区三区高清播放| 日本欧洲一区二区| 亚洲综合偷拍欧美一区色| 亚洲国产精品传媒在线观看| 欧美成人性战久久| 欧美一区二区三区人| 欧美日韩国产123区| 色诱视频网站一区| 99久久精品99国产精品| 粉嫩嫩av羞羞动漫久久久| 久久成人免费网站| 日韩在线观看一区二区| 亚洲自拍偷拍网站| 一区二区三区国产精品| 中文字幕亚洲欧美在线不卡| 久久丝袜美腿综合| 久久理论电影网| 精品伦理精品一区| 欧美电影免费观看高清完整版在线观看| 欧美性生活大片视频| 在线观看日韩精品| 欧美在线免费观看亚洲| 色综合激情五月| 欧洲精品在线观看| 欧美男人的天堂一二区| 欧美日韩亚洲综合一区二区三区| 欧美亚洲综合在线| 欧美日韩国产片| 欧美日韩在线不卡| 7799精品视频| 精品盗摄一区二区三区| 精品国产百合女同互慰| 久久久久久**毛片大全| 国产欧美日韩中文久久| 中文字幕在线观看一区二区| 最近中文字幕一区二区三区| 亚洲色大成网站www久久九九| 最近日韩中文字幕| 亚洲国产一区二区三区| 婷婷国产v国产偷v亚洲高清| 久久国产精品99久久人人澡| 国产一区二区在线影院| 国产91富婆露脸刺激对白| 91玉足脚交白嫩脚丫在线播放| 在线观看国产日韩| 91精品国产高清一区二区三区| 制服丝袜一区二区三区| 久久久久久久久久久久久久久99 | 欧美国产一区二区在线观看| 中文字幕制服丝袜一区二区三区 | 中文字幕欧美三区| 亚洲免费av在线| 日韩va亚洲va欧美va久久| 久久国产精品99久久久久久老狼| 国产精品69毛片高清亚洲| 99精品视频在线免费观看| 欧美人妇做爰xxxⅹ性高电影| www亚洲一区| 亚洲精品国产精品乱码不99| 日韩激情在线观看| 国产不卡视频在线播放| 欧美日韩不卡视频| 国产精品久久夜| 日韩电影免费一区| 9人人澡人人爽人人精品| 在线成人av网站| 国产精品免费视频观看| 午夜精品国产更新| 国产成人精品亚洲777人妖| 99视频在线精品| 欧美群妇大交群中文字幕| 久久久亚洲精品一区二区三区| 亚洲国产欧美在线| 久久国产麻豆精品| 99精品在线免费| 日韩精品一区二区在线| 亚洲国产cao| 激情欧美一区二区三区在线观看| 不卡欧美aaaaa| 欧美一区二区免费观在线| 精品视频一区二区三区免费| 日本一二三不卡| 亚洲国产精品影院| 国产乱码字幕精品高清av| 欧亚洲嫩模精品一区三区| 精品盗摄一区二区三区| 亚洲精品免费在线| 国产精品一二三四五| 欧美日韩一区视频| 久久婷婷久久一区二区三区| 日本在线不卡视频| 91精品国产91综合久久蜜臀| 亚洲欧美日韩久久精品| 国产在线视频一区二区| 日韩一区二区三区免费看| 国产精品久久毛片| 久久99精品久久只有精品| 欧美亚洲国产一区二区三区va | 亚洲美女区一区| 久久精品国产第一区二区三区 | 国产乱子轮精品视频| 欧美日韩一区二区三区四区五区 | 国产女主播一区| 亚洲综合丁香婷婷六月香| 91丨九色porny丨蝌蚪| 欧美大胆一级视频| 亚洲一区二区在线免费看| 大陆成人av片| 久久久国产精品麻豆| 久久精品99国产精品日本| 777久久久精品| 一区二区三区日韩欧美| 国产一区不卡在线| 久久久国产综合精品女国产盗摄| 青青草伊人久久| 欧美日韩一卡二卡三卡 | 精品日韩欧美在线| 亚洲午夜在线视频| 99re成人在线| 亚洲国产精品99久久久久久久久| 久久精品国产一区二区三区免费看| 91视视频在线观看入口直接观看www| 欧美国产国产综合| 国产精品99久久久久久久vr | 亚洲成人你懂的| 欧美久久免费观看| 午夜精品一区二区三区免费视频| 91国偷自产一区二区使用方法| 亚洲裸体xxx| 成人福利视频在线| 欧美高清一级片在线观看| 成人精品免费网站| 国产精品不卡一区二区三区| 国产毛片精品视频| xf在线a精品一区二区视频网站| 激情伊人五月天久久综合| 精品国产乱码久久久久久蜜臀| 午夜精品久久久久久久| 精品国产制服丝袜高跟| 麻豆精品视频在线观看视频| 日韩欧美中文字幕公布| 久久草av在线| 中文字幕一区二区三区不卡| 99久久综合99久久综合网站| 亚洲图片激情小说| 欧美色图12p| 国产成人激情av|