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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? restore.cpp

?? 提供了圖像識別
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
		}
	}	
	
	//釋放存儲空間
	delete pCTSrc;
	delete pCTH;

	delete pCFSrc;
	delete pCFH;

	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DIBWinnerFilter()
 *
 * 參數:
 *   CDib  *pDib       - 指向CDib類的指針
 *
 * 返回值:
 *   BOOL               - 維納濾波復原操作成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像進行維納濾波復原操作。
 *
 ************************************************************************/

BOOL WINAPI DIBWinnerFilter (CDib *pDib)
{
	// 指向源圖像的指針
	BYTE *	lpSrc;

	//圖象的寬度和高度
	LONG    lWidth;
	LONG    lHeight;

	// 圖像每行的字節數
	LONG	lLineBytes;
	
	//得到圖象的寬度和高度
	CSize   SizeDim;
	SizeDim = pDib->GetDimensions();
	lWidth  = SizeDim.cx;
	lHeight = SizeDim.cy;	
	
	//得到實際的Dib圖象存儲大小
	CSize   SizeRealDim;
	SizeRealDim = pDib->GetDibSaveDim();

	// 計算圖像每行的字節數
	lLineBytes = SizeRealDim.cx;
	
	//圖像數據的指針
	LPBYTE  lpDIBBits = pDib->m_lpImage;
	
	//循環變量
	long i;
	long j;

	//臨時變量
	double temp, tempre, tempim, 
			a, b, c, d, norm2;
	
	// 實際進行付立葉變換的寬度和高度
	LONG	lW = 1;
	LONG	lH = 1;
	
	int		wp = 0;
	int		hp = 0;

	// 保證離散傅立葉變換的寬度和高度為2的整數次方
	while(lW * 2 <= lLineBytes)
	{
		lW = lW * 2;
		wp++;
	}
	
	while(lH * 2 <= lHeight)
	{
		lH = lH * 2;
		hp++;
	}

	//用來存儲源圖象和變換核的時域數據
	complex<double> *pCTSrc,*pCTH;

	//用來存儲源圖象和變換核的頻域數據
	complex<double>  *pCFSrc,*pCFH;
	
	//輸入退化圖象的長和寬必須為2的整數倍
	if(lW != (int) lLineBytes)
	{
		return false;
	}

	if(lH != (int) lHeight)
	{
		return false;
	}

	// 為時域和頻域的數組分配空間
	pCTSrc		= new complex<double> [lHeight*lLineBytes];
	pCTH		= new complex<double> [lHeight*lLineBytes];
	
	pCFSrc		= new complex<double> [lHeight*lLineBytes];
	pCFH		= new complex<double> [lHeight*lLineBytes];

	// 濾波器加權系數
	double *pCFFilter   = new double [lHeight*lLineBytes];

	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向退化圖像倒數第j行,第i個象素的指針			
			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;
	
			// 將象素值存儲到時域數組中
			pCTSrc[ lLineBytes*j + i ] = complex<double>((double)*lpSrc , 0);
			
			// 頻域賦零值
			pCFSrc[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
	
			// 退化系統時域及維納濾波加權系數賦值
			if(i < 5 && j <5)
			{
				pCTH[ lLineBytes*j + i ] = complex<double>(0.04 , 0.0);
				pCFFilter[ lLineBytes*j + i ] = 0.5;
			}
			else
			{
				pCTH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);	
				pCFFilter[ lLineBytes*j + i ] = 0.05;
			}

			// 頻域賦零值
			pCFH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
		}
	}
	
	//對退化圖像進行FFT
	::DIBFFT_2D(pCTSrc, lLineBytes, lHeight, pCFSrc);
	
	//對變換核圖像進行FFT
	::DIBFFT_2D(pCTH, lLineBytes, lHeight, pCFH);
	
	// 計算M
	for (i = 0; i < lHeight * lLineBytes; i++)
	{
			// 賦值
			a = pCFSrc[i].real();
			b = pCFSrc[i].imag();
			c = pCFH[i].real();
			d = pCFH[i].imag();

			// |H(u,v)|*|H(u,v)|
			norm2 = c * c + d * d;

			// |H(u,v)|*|H(u,v)|/(|H(u,v)|*|H(u,v)|+a)
			temp  = (norm2 ) / (norm2 + pCFFilter[i]);

			{				
				tempre = ( a*c + b*d ) / ( c*c + d*d );
				tempim = ( b*c - a*d ) / ( c*c + d*d );

				// 求得f(u,v)
				pCFSrc[i]= complex<double>(temp*tempre , temp*tempim);
			}						
	}

	//對復原圖像進行反FFT
	IFFT_2D(pCFSrc, pCTSrc, lLineBytes, lHeight);

	//轉換為復原圖像
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向復原圖像倒數第j行,第i個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;

			a = pCTSrc[(lLineBytes)*j + i].real();
			b = pCTSrc[(lLineBytes)*j + i].imag();

			norm2  = a*a + b*b;
			norm2  = sqrt(norm2) + 40;
	
			if(norm2 > 255)
				norm2 = 255.0;
			if(norm2 < 0)
				norm2 = 0;	

			*lpSrc = (unsigned char) (norm2);			
		}
	}

	//釋放存儲空間
	delete pCTSrc;
	delete pCTH;

	delete pCFSrc;
	delete pCFH;
	delete pCFFilter;

	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DIBMotionDegeneration()
 *
 * 參數:
 *   CDib  *pDib       - 指向CDib類的指針
 *
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像模擬由勻速直線運動造成的模糊
 *
 ***********************************************************************
 */

BOOL WINAPI DIBMotionDegeneration(CDib *pDib)
{
	// 指向源圖像的指針
	BYTE *	lpSrc;

	//圖象的寬度和高度
	LONG    lWidth;
	LONG    lHeight;

	// 圖像每行的字節數
	LONG	lLineBytes;
	
	//得到圖象的寬度和高度
	CSize   SizeDim;
	SizeDim = pDib->GetDimensions();
	lWidth  = SizeDim.cx;
	lHeight = SizeDim.cy;	
	
	//得到實際的Dib圖象存儲大小
	CSize   SizeRealDim;
	SizeRealDim = pDib->GetDibSaveDim();

	// 計算圖像每行的字節數
	lLineBytes = SizeRealDim.cx;
	
	//圖像數據的指針
	LPBYTE  lpDIBBits = pDib->m_lpImage;
	
	//循環變量
	long iColumn;
	long jRow;

	//臨時變量
	int temp,m;

	// 臨時變量
	double p,q;
	
	int nTotTime, nTotLen, nTime;

	//總的運動時間10s
	nTotTime = 10;

	// 總的運動距離10個象素點
	nTotLen = 10;
	
	// 攝像機的暴光系數
	double B;

	B = 0.1;

	//用來存儲源圖象和變換核的時域數據
	int *nImageDegener;

	// 為時域和頻域的數組分配空間
	nImageDegener = new int [lHeight*lLineBytes];
	
	// 將數據存入時域數組
	for (jRow = 0; jRow < lHeight; jRow++)
	{
		for(iColumn = 0; iColumn < lLineBytes; iColumn++)
		{
			temp=0;
			
			// 指向源圖像倒數第jRow行,第iColumn個象素的指針			
			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + iColumn;

			// 象素點的象素值積累
			for ( nTime = 0; nTime < nTotTime; nTime++ )
			{
				p = (float)iColumn - (float)(nTotLen)*nTime/nTotTime;
				
				if (p > 0)
				{
					q = p - floor((double)p);
					
					if(q >= 0.5)
						m = (int)ceil((double)p);
					else
						m = (int)floor((double)p);

					// 累加
					lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + m;
					temp = temp + *lpSrc;
				}	
			}
			
			// 乘以攝像機的暴光系數
			temp = B * temp;

			temp=(int)ceil((double)temp);
			
			// 使得temp的取值符合取值范圍
			if(temp<0)
				temp=0;

			if(temp>255)
				temp=255;

			nImageDegener[lLineBytes*jRow + iColumn] = temp;
		}
	}	
	
	//轉換為圖像
	for (jRow = 0;jRow < lHeight ;jRow++)
	{
		for(iColumn = 0;iColumn < lLineBytes ;iColumn++)
		{
			// 指向源圖像倒數第jRow行,第iColumn個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + iColumn;
	
			*lpSrc = nImageDegener[lLineBytes*jRow + iColumn];
		}
	}
	
	//釋放存儲空間
	delete nImageDegener;
	
	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DIBMotionRestore()
 *
 * 參數:
 *   CDib  *pDib       - 指向CDib類的指針
 *
 * 返回值:
 *   BOOL               - 成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對擬由勻速直線運動造成的模糊圖象進行復原
 *
 ***********************************************************************
 */

BOOL WINAPI DIBMotionRestore(CDib *pDib)
{
	// 指向源圖像的指針
	BYTE *	lpSrc;

	//圖象的寬度和高度
	LONG    lWidth;
	LONG    lHeight;

	// 圖像每行的字節數
	LONG	lLineBytes;
	
	//得到圖象的寬度和高度
	CSize   SizeDim;
	SizeDim = pDib->GetDimensions();
	lWidth  = SizeDim.cx;
	lHeight = SizeDim.cy;	
	
	//得到實際的Dib圖象存儲大小
	CSize   SizeRealDim;
	SizeRealDim = pDib->GetDibSaveDim();

	// 計算圖像每行的字節數
	lLineBytes = SizeRealDim.cx;
	
	//圖像數據的指針
	LPBYTE  lpDIBBits = pDib->m_lpImage;
	
	//循環變量
	long iColumn;
	long jRow;

	int i,n,m;

	//臨時變量
	int temp1,temp2,
		totalq,q1,q2,z;

	double p,q;

	// 常量A賦值
	int A = 80;
	
	//常量B賦值
	int B = 10;
	
	//總的移動距離
	int nTotLen=10;

	// 圖象寬度包含多少個ntotlen
	int K=lLineBytes/nTotLen;
	
	int error[10];

	//用來存儲源圖象時域數據
	int *nImageDegener;

	// 為時域數組分配空間
	nImageDegener = new int [lHeight*lLineBytes];

	// 將象素存入數組中
	for (jRow = 0; jRow < lHeight; jRow++)
	{
		for(iColumn = 0; iColumn < lLineBytes; iColumn++)
		{
			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + iColumn;
	
			nImageDegener[lLineBytes*jRow + iColumn] = (*lpSrc);
		}
	}	
	
	for (jRow = 0; jRow < lHeight; jRow++)
	{		
		// 計算error[i]
		for(i = 0; i < 10; i++)
		{
			
			error[i] = 0;
			
			for(n = 0; n < K; n++)
				for(m = 0; m <= n; m++)
				{
					// 象素是否為一行的開始處
					if(i == 0 && m == 0)
					{
						temp1=temp2=0;
					}
					
					// 進行差分運算
					else
					{
						lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + m*10+i;
						temp1=*lpSrc;
						
						lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + m*10+i-1;
						temp2 = *lpSrc;
					}
					
					error[i] = error[i] + temp1 - temp2;
					
				}				
			
				error[i] = B * error[i] / K;
		}
		
		for(iColumn = 0; iColumn < lLineBytes; iColumn++)
		{			
			// 計算m,以及z
			m = iColumn / nTotLen;
			z = iColumn - m*nTotLen;			
			
			// 初始化
			totalq = 0;
			q = 0;
			
			for(n = 0; n <= m; n++)
			{
				q1 = iColumn - nTotLen*n;
				
				if(q1 == 0)
					q = 0;
				
				// 進行差分運算
				else
				{
					q2 = q1 - 1;
					
					lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + q1;
					temp1 = *lpSrc;
					
					lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + q2;
					temp2 = *lpSrc;
					
					q = (temp1 - temp2) * B;				
				}
				
				totalq = totalq + q;
			}
			
			p = error[z];

			// 得到f(x,y)的值
			temp1 = totalq + A - p;
			
			// 使得象素的取值符合取值范圍
			if(temp1 < 0)
				temp1 = 0;
			
			if(temp1 > 255)
				temp1 = 255;
						
			nImageDegener[lLineBytes*jRow + iColumn] = temp1;
		}
	}

	//轉換為圖像
	for (jRow = 0;jRow < lHeight ;jRow++)
	{
		for(iColumn = 0;iColumn < lLineBytes ;iColumn++)
		{
			// 指向源圖像倒數第jRow行,第iColumn個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * jRow + iColumn;
	
			// 存儲象素值
			*lpSrc = nImageDegener[lLineBytes*jRow + iColumn];
		}
	}	
	
	//釋放存儲空間
	delete nImageDegener;
	
	// 返回
	return true;
}
#undef SWAP

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲欧美国产毛片在线| 欧美成人一区二区三区片免费 | 中文字幕乱码一区二区免费| 日韩亚洲欧美高清| 欧美一区二区三区四区在线观看| 91麻豆国产在线观看| 色妹子一区二区| 欧美影院精品一区| 在线不卡中文字幕播放| 欧美一级一级性生活免费录像| 欧美日韩情趣电影| 日韩三级在线观看| 久久久无码精品亚洲日韩按摩| 中文字幕av一区二区三区| 亚洲美腿欧美偷拍| 午夜精品视频一区| 国产酒店精品激情| 91在线观看成人| 欧美日本乱大交xxxxx| 日韩美女在线视频| 国产日韩精品视频一区| 亚洲美腿欧美偷拍| 免费美女久久99| 国产成人综合亚洲网站| 99久久亚洲一区二区三区青草| 欧美中文字幕一区| 久久久精品人体av艺术| 一区二区在线观看不卡| 奇米影视在线99精品| 成人丝袜视频网| 欧美伊人精品成人久久综合97 | av电影一区二区| 欧美军同video69gay| 久久久国产一区二区三区四区小说| 国产精品日日摸夜夜摸av| 亚洲国产日韩av| 国产精品996| 欧美中文字幕一区| 日本一区二区三级电影在线观看 | 777色狠狠一区二区三区| 久久嫩草精品久久久精品| 亚洲老司机在线| 国产精品伊人色| 欧美日韩1234| 中文字幕在线一区| 黄页视频在线91| 欧美日韩一区三区| 国产精品国产自产拍高清av| 精品一区二区三区在线观看国产 | 日本韩国欧美三级| 久久久国产一区二区三区四区小说| 亚洲国产精品自拍| 91网上在线视频| 国产欧美日韩在线观看| 美女国产一区二区| 欧美无乱码久久久免费午夜一区| 国产精品美女视频| 国产精品白丝jk黑袜喷水| 精品毛片乱码1区2区3区| 亚洲高清中文字幕| 在线一区二区三区四区五区 | 日韩福利电影在线观看| 91国偷自产一区二区三区成为亚洲经典 | 日本一区二区三区久久久久久久久不| 天天影视色香欲综合网老头| 欧美性感一类影片在线播放| 一区二区三区在线视频播放| 99这里只有精品| 成人欧美一区二区三区1314| 国产不卡免费视频| 国产日韩欧美高清| 成人一区二区三区| 久久精品一区四区| 国产精品538一区二区在线| 精品国产91亚洲一区二区三区婷婷| 日韩高清在线一区| 日韩欧美久久久| 久久精品国产网站| 久久精品免费在线观看| 国产成人亚洲精品狼色在线| 久久精品夜色噜噜亚洲a∨| 国产iv一区二区三区| 中文无字幕一区二区三区| 成人丝袜高跟foot| 一区二区三区在线免费视频| 欧美日本一区二区三区四区| 爽爽淫人综合网网站| 日韩欧美成人午夜| 国产福利精品一区二区| 国产精品国产三级国产aⅴ入口 | 性欧美大战久久久久久久久| 717成人午夜免费福利电影| 久久国产精品露脸对白| 欧美精品一区二区精品网| 国产成人久久精品77777最新版本| 欧美韩日一区二区三区| 91视频在线观看免费| 亚洲成av人影院| 久久综合九色综合97婷婷| 成人av在线电影| 日韩专区在线视频| 久久亚洲二区三区| 色哟哟在线观看一区二区三区| 亚洲国产aⅴ成人精品无吗| 精品999久久久| 91污片在线观看| 久久9热精品视频| 亚洲欧洲国产日韩| 56国语精品自产拍在线观看| 国产成人精品午夜视频免费| 一区二区三区欧美日韩| 日韩欧美国产综合| 91在线观看下载| 国产在线精品免费| 亚洲国产裸拍裸体视频在线观看乱了| 精品国产电影一区二区| 91日韩精品一区| 黄色成人免费在线| 亚洲成人综合网站| 亚洲国产电影在线观看| 欧美区一区二区三区| 白白色亚洲国产精品| 免费在线看一区| 一区二区三区日本| 亚洲国产高清在线观看视频| 91精品蜜臀在线一区尤物| gogogo免费视频观看亚洲一| 麻豆精品视频在线观看视频| 一区二区三区小说| 国产欧美一区二区三区在线看蜜臀| 欧美另类变人与禽xxxxx| 色婷婷狠狠综合| 成人综合在线观看| 久99久精品视频免费观看| 亚洲h精品动漫在线观看| 亚洲欧美一区二区三区久本道91| 久久九九影视网| 久久亚区不卡日本| 久久综合色综合88| 日韩欧美美女一区二区三区| 欧美视频完全免费看| av亚洲精华国产精华| 国产成+人+日韩+欧美+亚洲| 国产一区二区精品久久91| 久久精品国产久精国产| 奇米影视一区二区三区| 天天爽夜夜爽夜夜爽精品视频| 亚洲精品伦理在线| 亚洲女同女同女同女同女同69| 国产精品视频九色porn| 国产精品久久久久久久久晋中 | 色综合久久久久久久| 成人爽a毛片一区二区免费| 国产成人亚洲精品青草天美| 国产一区二区三区电影在线观看 | 欧美日韩精品一区二区三区蜜桃| 色偷偷88欧美精品久久久 | 亚洲国产日韩综合久久精品| 一区二区视频在线看| 亚洲综合一区在线| 亚洲国产人成综合网站| 午夜av一区二区三区| 午夜视频一区在线观看| 日本91福利区| 激情成人综合网| av一区二区久久| 在线欧美日韩国产| 欧美福利电影网| 欧美mv和日韩mv国产网站| 国产免费成人在线视频| 亚洲精品免费一二三区| 视频一区中文字幕国产| 狠狠色狠狠色合久久伊人| 成人一区二区视频| 欧美性xxxxxx少妇| 精品国产一区二区三区久久久蜜月 | 欧美主播一区二区三区| 欧美一级在线观看| 国产欧美久久久精品影院| 水野朝阳av一区二区三区| 精品亚洲porn| 99精品在线免费| 欧美剧情电影在线观看完整版免费励志电影| 欧美一区二区三区免费视频| 亚洲国产精品成人久久综合一区| 亚洲精品国产成人久久av盗摄 | 粉嫩av一区二区三区在线播放| 91在线观看美女| 欧美一激情一区二区三区| 国产精品久久久久久久蜜臀| 日本亚洲三级在线| 成人免费高清视频在线观看| 欧美日韩国产首页在线观看| 久久久久高清精品| 亚洲成人动漫精品| av一区二区三区| 欧美精品一区二区三区蜜桃 | 久久精品视频在线免费观看| 亚洲一区二区偷拍精品| 国产99久久久国产精品潘金|