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

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

?? restore.cpp

?? VC++數字圖像處理 配套光盤
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
	//對結果圖像進行反FFT
	fourn(fftSrc,nn,2,-1);

	//確定歸一化因子	
	MaxNum = 0.0;
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			fftSrc[(2*lLineBytes)*j + 2*i + 1] = 
				sqrt(fftSrc[(2*lLineBytes)*j + 2*i + 1] * fftSrc[(2*lLineBytes)*j + 2*i + 1]\
						+fftSrc[(2*lLineBytes)*j + 2*i + 2] * fftSrc[(2*lLineBytes)*j + 2*i + 2]);
			if( MaxNum < fftSrc[(2*lLineBytes)*j + 2*i + 1])
				MaxNum = fftSrc[(2*lLineBytes)*j + 2*i + 1];
		}
	}
	
	//轉換為圖像,加噪
	char point;

	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			if ( i + j == ((int)((i+j)/8))*8)
			{
				point = -16;
			}
			else
			{
				point = 0;
			}

			// 指向源圖像倒數第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

			*lpSrc = (unsigned char) (fftSrc[(2*lLineBytes)*j + 2*i + 1]*255.0/MaxNum + point);
		}
	}

	delete fftSrc;
	delete fftKernel;
	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   WienerDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 *
 * 返回值:
 *   BOOL               - 維納濾波復原操作成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像進行維納濾波復原操作。
 *
 ************************************************************************/

BOOL WINAPI WienerDIB (LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	//循環變量
	long i;
	long j;

	//像素值
	unsigned char pixel;

	// 圖像每行的字節數
	LONG lLineBytes;

	//用于做FFT的數組
	double *fftSrc,*fftKernel,*fftNoise;
	double a,b,c,d,e,f,multi;
	//二維FFT的長度和寬度
	unsigned long nn[3];
	//圖像歸一化因子
	double MaxNum;

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);

	double dPower = log((double)lLineBytes)/log(2.0);
	if(dPower != (int) dPower)
	{
		return false;
	}
	dPower = log((double)lHeight)/log(2.0);
	if(dPower != (int) dPower)
	{
		return false;
	}

	fftSrc = new double [lHeight*lLineBytes*2+1];
	fftKernel = new double [lHeight*lLineBytes*2+1];
	fftNoise = new double [lHeight*lLineBytes*2+1];

	nn[1] = lHeight;
	nn[2] = lLineBytes;

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

			fftSrc[(2*lLineBytes)*j + 2*i + 1] = (double)pixel;
			fftSrc[(2*lLineBytes)*j + 2*i + 2] = 0.0;
	
			if(i < 5 && j == 0)
			{
				fftKernel[(2*lLineBytes)*j + 2*i + 1] = 1/5.0;
			}
			else
			{
				fftKernel[(2*lLineBytes)*j + 2*i + 1] = 0.0;
			}
			fftKernel[(2*lLineBytes)*j + 2*i + 2] = 0.0;
			if ( i + j == ((int)((i+j)/8))*8)
			{
				fftNoise [(2*lLineBytes)*j + 2*i + 1]= -16.0;
			}
			else
			{
				fftNoise [(2*lLineBytes)*j + 2*i + 1]= 0.0;
			}
			fftNoise[(2*lLineBytes)*j + 2*i + 2] = 0.0;

		}
	}

	srand((unsigned)time(NULL));
	
	//對源圖像進行FFT
	fourn(fftSrc,nn,2,1);
	//對卷積核圖像進行FFT
	fourn(fftKernel,nn,2,1);
	//對噪聲圖像進行FFT
	fourn(fftNoise,nn,2,1);

	for (i = 1;i <lHeight*lLineBytes*2;i+=2)
	{
			a = fftSrc[i];
			b = fftSrc[i+1];
			c = fftKernel[i];
			d = fftKernel[i+1];
			e = fftNoise[i];
			f = fftNoise[i+1];
			multi = (a*a + b*b)/(a*a + b*b - e*e - f*f);
			if (c*c + d*d > 1e-3)
			{
				fftSrc[i] = ( a*c + b*d ) / ( c*c + d*d ) / multi;
				fftSrc[i+1] = ( b*c - a*d ) / ( c*c + d*d )/multi;
			}
	}

	//對結果圖像進行反FFT
	fourn(fftSrc,nn,2,-1);

	//確定歸一化因子
	MaxNum = 0.0;
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			fftSrc[(2*lLineBytes)*j + 2*i + 1] = 
				sqrt(fftSrc[(2*lLineBytes)*j + 2*i + 1] * fftSrc[(2*lLineBytes)*j + 2*i + 1]\
						+fftSrc[(2*lLineBytes)*j + 2*i + 2] * fftSrc[(2*lLineBytes)*j + 2*i + 2]);
			if( MaxNum < fftSrc[(2*lLineBytes)*j + 2*i + 1])
				MaxNum = fftSrc[(2*lLineBytes)*j + 2*i + 1];
		}
	}
	
	//轉換為圖像
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向源圖像倒數第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lLineBytes * j + i;

			*lpSrc = (unsigned char) (fftSrc[(2*lLineBytes)*j + 2*i + 1]*255.0/MaxNum );
		}
	}

	delete fftSrc;
	delete fftKernel;
	delete fftNoise;
	// 返回
	return true;
}


BOOL fourn(double * data, unsigned long nn[], int ndim, int isign)
{
	int idim;
	unsigned long i1,i2,i3,i2rev,i3rev,ip1,ip2,ip3,ifp1,ifp2;
	unsigned long ibit,k1,k2,n,nprev,nrem,ntot;
	double tempi,tempr;
	double theta,wi,wpi,wpr,wr,wtemp;

	for (ntot=1,idim=1;idim<=ndim;idim++)
		ntot *= nn[idim];
	nprev=1;
	for (idim=ndim;idim>=1;idim--) {
		n=nn[idim];
		nrem=ntot/(n*nprev);
		ip1=nprev << 1;
		ip2=ip1*n;
		ip3=ip2*nrem;
		i2rev=1;
		for (i2=1;i2<=ip2;i2+=ip1) {
			if (i2 < i2rev) {
				for (i1=i2;i1<=i2+ip1-2;i1+=2) {
					for (i3=i1;i3<=ip3;i3+=ip2) {
						i3rev=i2rev+i3-i2;
						SWAP(data[i3],data[i3rev]);
						SWAP(data[i3+1],data[i3rev+1]);
					}
				}
			}
			ibit=ip2 >> 1;
			while (ibit >= ip1 && i2rev > ibit) {
				i2rev -= ibit;
				ibit >>= 1;
			}
			i2rev += ibit;
		}
		ifp1=ip1;
		while (ifp1 < ip2) {
			ifp2=ifp1 << 1;
			theta=isign*6.28318530717959/(ifp2/ip1);
			wtemp=sin(0.5*theta);
			wpr = -2.0*wtemp*wtemp;
			wpi=sin(theta);
			wr=1.0;
			wi=0.0;
			for (i3=1;i3<=ifp1;i3+=ip1) {
				for (i1=i3;i1<=i3+ip1-2;i1+=2) {
					for (i2=i1;i2<=ip3;i2+=ifp2) {
						k1=i2;
						k2=k1+ifp1;
						tempr=wr*data[k2]-wi*data[k2+1];
						tempi=wr*data[k2+1]+wi*data[k2];
						data[k2]=data[k1]-tempr;
						data[k2+1]=data[k1+1]-tempi;
						data[k1] += tempr;
						data[k1+1] += tempi;
					}
				}
				wr=(wtemp=wr)*wpr-wi*wpi+wr;
				wi=wi*wpr+wtemp*wpi+wi;
			}
			ifp1=ifp2;
		}
		nprev *= n;
	}
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   RandomNoiseDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 *
 * 返回值:
 *   BOOL               - 模糊操作成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像進行模糊操作。
 *
 ************************************************************************/

BOOL WINAPI RandomNoiseDIB (LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	//循環變量
	long i;
	long j;

	// 圖像每行的字節數
	LONG lLineBytes;

	//像素值
	unsigned char pixel;

	//噪聲
	BYTE NoisePoint;

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);

	//生成偽隨機種子
	srand((unsigned)time(NULL));

	//在圖像中加噪
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			NoisePoint=rand()/1024;

			// 指向源圖像倒數第j行,第i個象素的指針			
			lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
			
			//取得像素值
			pixel = (unsigned char)*lpSrc;

			*lpSrc = (unsigned char)(pixel*224/256 + NoisePoint);
		}
	}
	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   SaltNoiseDIB()
 *
 * 參數:
 *   LPSTR lpDIBBits    - 指向源DIB圖像指針
 *   LONG  lWidth       - 源圖像寬度(象素數,必須是4的倍數)
 *   LONG  lHeight      - 源圖像高度(象素數)
 *
 * 返回值:
 *   BOOL               - 模糊操作成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像進行模糊操作。
 *
 ************************************************************************/

BOOL WINAPI SaltNoiseDIB (LPSTR lpDIBBits, LONG lWidth, LONG lHeight)
{
	// 指向源圖像的指針
	LPSTR	lpSrc;
	
	//循環變量
	long i;
	long j;

	// 圖像每行的字節數
	LONG lLineBytes;

	// 計算圖像每行的字節數
	lLineBytes = WIDTHBYTES(lWidth * 8);

	//生成偽隨機種子
	srand((unsigned)time(NULL));

	//在圖像中加噪
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			if(rand()>31500)
			{
				// 指向源圖像倒數第j行,第i個象素的指針			
				lpSrc = (char *)lpDIBBits + lLineBytes * j + i;
				
				//圖像中當前點置為黑
				*lpSrc = 0;
			}
		}
	}
	// 返回
	return true;
}

#undef SWAP

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产乱码精品1区2区3区| 日韩欧美电影在线| 九九九久久久精品| 亚洲国产wwwccc36天堂| 欧美一区二区三区在线看| av一二三不卡影片| 国产在线国偷精品免费看| 国产女主播视频一区二区| 91精品国产免费| 一本久道中文字幕精品亚洲嫩| 韩国毛片一区二区三区| 美女视频网站久久| 日韩美女视频19| 国产欧美日韩麻豆91| 精品日韩99亚洲| 91毛片在线观看| 成人app在线观看| 国产精品18久久久久久久网站| 亚洲精品中文字幕乱码三区| 一区免费观看视频| 亚洲猫色日本管| 亚洲免费视频中文字幕| 亚洲日本乱码在线观看| 国产精品美女久久久久久久久久久| 欧洲生活片亚洲生活在线观看| av一区二区不卡| 色综合久久中文字幕综合网| 一本久久a久久免费精品不卡| 色综合网色综合| 欧美午夜精品一区二区三区| 欧洲在线/亚洲| 欧美精品久久久久久久多人混战| 欧美日韩精品三区| 日韩一区二区三区免费观看| 精品奇米国产一区二区三区| 日韩视频一区二区在线观看| 精品成人a区在线观看| 国产无一区二区| 久久综合久久综合亚洲| 欧美激情一区二区三区| 国产精品亲子伦对白| 亚洲va国产天堂va久久en| 国产在线一区二区| 一本久久a久久精品亚洲 | 精品国产污污免费网站入口| 国产欧美日本一区二区三区| 亚洲一区二区三区四区五区中文| 美女脱光内衣内裤视频久久网站| 91首页免费视频| 精品对白一区国产伦| 一区二区三区在线视频观看58| 奇米在线7777在线精品| 成人免费视频一区| 欧美一级片免费看| 一区二区国产视频| 成人午夜电影网站| 日韩欧美成人一区| 亚洲国产美女搞黄色| 99精品久久99久久久久| 久久免费看少妇高潮| 日本免费新一区视频| 91麻豆精品在线观看| 日本一区二区免费在线| 捆绑调教美女网站视频一区| 欧美优质美女网站| 国产精品美女视频| 国产成人亚洲精品青草天美| 欧美一区二区视频在线观看2022| 亚洲一区二区在线观看视频| 国产iv一区二区三区| 精品粉嫩超白一线天av| 日韩电影在线一区二区| 欧美日本不卡视频| 午夜视频在线观看一区二区| 91福利社在线观看| 国产精品久久久久久久久图文区 | 亚洲一区在线免费观看| av一区二区三区四区| 日本一二三四高清不卡| 国产成人综合在线观看| 精品国产一二三| 精品夜夜嗨av一区二区三区| 欧美成人一区二区三区片免费| 午夜精品一区在线观看| 欧美视频完全免费看| 亚洲图片有声小说| 欧美视频在线一区| 日韩在线播放一区二区| 91麻豆精品国产91| 亚洲h精品动漫在线观看| 欧美人伦禁忌dvd放荡欲情| 天堂久久久久va久久久久| 51精品久久久久久久蜜臀| 免费亚洲电影在线| 日韩欧美一区二区视频| 国产中文字幕一区| 国产精品久久一级| 色综合久久久久综合体| 亚洲女与黑人做爰| 欧美日韩一级视频| 美女视频免费一区| 国产欧美精品区一区二区三区| 91亚洲永久精品| 午夜影院久久久| 亚洲精品在线免费观看视频| 国产成人在线电影| 亚洲大片一区二区三区| 精品久久久久99| 不卡一区中文字幕| 午夜欧美在线一二页| 久久品道一品道久久精品| 97久久超碰国产精品| 手机精品视频在线观看| 久久久久久久久久久久久女国产乱 | 国产精品第五页| 欧美日韩www| 高清日韩电视剧大全免费| 亚洲综合色网站| 久久久久久毛片| 欧美亚洲一区二区在线| 国产精品资源在线看| 一区二区三区在线免费视频| 欧美一区二区播放| 91视视频在线观看入口直接观看www | 亚洲精品videosex极品| 日韩欧美激情四射| 一本大道久久精品懂色aⅴ| 另类小说色综合网站| 亚洲欧美aⅴ...| 国产三级精品视频| 日韩三级免费观看| 色婷婷av久久久久久久| 狠狠色狠狠色综合| 免费观看日韩av| 亚洲午夜av在线| 亚洲丝袜美腿综合| 久久精品一区八戒影视| 欧美一二区视频| 欧美色图片你懂的| 91婷婷韩国欧美一区二区| 国产精品一区二区三区四区| 蜜臀va亚洲va欧美va天堂| 亚洲主播在线观看| 综合在线观看色| 中文字幕免费不卡在线| 久久亚洲精精品中文字幕早川悠里 | 中文字幕日韩av资源站| 欧美国产综合色视频| 精品久久久影院| 日韩午夜中文字幕| 欧美日韩一本到| 欧美性感一区二区三区| 色婷婷av一区二区三区gif | 欧美三级视频在线播放| 91久久精品一区二区| aaa欧美日韩| 成人性生交大片免费看在线播放 | 亚洲国产精品成人久久综合一区 | 亚洲色图欧美偷拍| 国产精品麻豆网站| 国产精品欧美久久久久一区二区| 日本一区二区三区dvd视频在线| 久久综合狠狠综合久久综合88 | 亚洲一级二级三级| 亚洲一区二区综合| 亚洲成人av福利| 日韩av在线播放中文字幕| 琪琪一区二区三区| 国产在线播放一区三区四| 精品亚洲免费视频| 国产精品亚洲专一区二区三区| 丁香桃色午夜亚洲一区二区三区| 成人激情综合网站| 色呦呦一区二区三区| 欧美剧情片在线观看| 91精品国产免费久久综合| 久久久久国产精品厨房| 国产精品高潮呻吟久久| 亚洲成人一区二区在线观看| 美女尤物国产一区| 不卡一区二区在线| 欧美另类变人与禽xxxxx| 337p日本欧洲亚洲大胆色噜噜| 国产精品成人午夜| 日韩精品电影在线| 粉嫩嫩av羞羞动漫久久久| 欧美亚洲一区二区三区四区| 欧美xfplay| 亚洲国产日韩在线一区模特| 毛片一区二区三区| av亚洲精华国产精华| 欧美一区二区在线不卡| 欧美激情在线一区二区三区| 亚洲激情五月婷婷| 青娱乐精品视频| 成人一二三区视频| 国产a区久久久| 欧美夫妻性生活| 欧美国产激情一区二区三区蜜月| 亚洲成人一区二区在线观看|