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

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

?? restore.cpp

?? 影像處理程序 基本的影像處理算法
?? 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一区二区三区免费野_久草精品视频
日韩一卡二卡三卡四卡| 国产91精品欧美| 美女一区二区久久| 国产精品一区二区三区四区| 91国产免费观看| 亚洲国产高清不卡| 美女视频黄 久久| 亚洲精品久久嫩草网站秘色| 美女一区二区在线观看| 波多野结衣在线aⅴ中文字幕不卡| 欧美日韩另类国产亚洲欧美一级| 国产精品免费aⅴ片在线观看| 免费成人在线观看| 在线免费一区三区| 亚洲欧美影音先锋| 国产成人精品亚洲777人妖| 欧美一区二区三区喷汁尤物| 亚洲一区二区精品3399| 粉嫩av一区二区三区在线播放| 日韩区在线观看| 日本中文在线一区| 欧美日韩精品高清| 亚洲成在线观看| 欧美在线观看一区二区| 亚洲欧美色综合| 99re这里只有精品6| 中文字幕欧美一| 不卡影院免费观看| 国产精品全国免费观看高清 | jlzzjlzz亚洲日本少妇| 精品三级在线看| 麻豆免费精品视频| 欧美变态tickle挠乳网站| 免费观看日韩av| 欧美久久一二三四区| 亚洲成av人片在线| 91精品免费在线观看| 免费一级片91| www久久精品| 国产一区二区免费视频| 久久久久高清精品| 粉嫩高潮美女一区二区三区| 中文字幕在线观看一区二区| 99精品1区2区| 午夜久久久影院| 日韩色视频在线观看| 国产在线视频精品一区| 久久中文娱乐网| 99视频有精品| 激情五月播播久久久精品| 色天使久久综合网天天| 亚洲国产色一区| 7777精品伊人久久久大香线蕉| 青青草视频一区| 亚洲精品一区二区三区影院 | 91免费版在线看| 亚洲一区二区三区中文字幕在线| 欧美视频日韩视频| 日韩影院精彩在线| 国产欧美日本一区视频| 在线免费亚洲电影| 裸体一区二区三区| 国产精品剧情在线亚洲| 欧美日韩在线播放| 国产91综合一区在线观看| 亚洲影院理伦片| 国产午夜久久久久| 欧美日韩精品欧美日韩精品一| 国产一区高清在线| 亚洲一区二区视频| 国产欧美日韩另类视频免费观看| 欧美综合色免费| 国内精品视频666| 一区二区三区精品久久久| 欧美岛国在线观看| 色婷婷精品久久二区二区蜜臂av| 日本sm残虐另类| 18欧美亚洲精品| 精品国产乱子伦一区| 色乱码一区二区三区88| 精品一区二区三区欧美| 亚洲最大的成人av| 国产欧美一区二区精品秋霞影院| 欧美日韩久久一区二区| av网站一区二区三区| 美女视频第一区二区三区免费观看网站| 中文字幕一区二区不卡| 久久综合视频网| 欧美婷婷六月丁香综合色| 国产成人综合在线观看| 蜜桃av噜噜一区| 亚洲一区在线播放| 国产精品久久久爽爽爽麻豆色哟哟| 在线不卡一区二区| 色婷婷激情综合| 国产成人免费av在线| 青娱乐精品视频| 亚洲第一成年网| 樱桃国产成人精品视频| 中文字幕一区二区三区在线播放 | 国产精品福利在线播放| 久久日一线二线三线suv| 717成人午夜免费福利电影| 色婷婷精品大在线视频| 99久久久无码国产精品| 国产91丝袜在线18| 激情深爱一区二区| 九九**精品视频免费播放| 日av在线不卡| 蜜桃视频在线一区| 免费人成在线不卡| 奇米色一区二区| 青青草伊人久久| 蜜桃传媒麻豆第一区在线观看| 五月婷婷激情综合| 日本午夜精品一区二区三区电影 | 日韩欧美一区二区视频| 欧美高清性hdvideosex| 91麻豆精品国产无毒不卡在线观看| 在线视频国内一区二区| 在线观看不卡视频| 欧美日本在线看| 日韩一区二区三区在线视频| 日韩精品一区国产麻豆| 精品国产制服丝袜高跟| 久久色成人在线| 中文字幕成人在线观看| 亚洲丝袜另类动漫二区| 亚洲三级在线观看| 一区二区三区精品视频在线| 亚洲高清免费视频| 免费成人在线影院| 国产精品亚洲视频| 成人av资源在线| 欧美日韩一区二区三区视频| 欧美日韩国产天堂| 欧美成人a∨高清免费观看| 国产欧美一区二区精品婷婷| 亚洲人成网站色在线观看| 天天色 色综合| 裸体在线国模精品偷拍| 不卡av在线免费观看| 欧美最猛性xxxxx直播| 日韩午夜电影在线观看| 中文字幕av在线一区二区三区| 亚洲欧洲一区二区在线播放| 亚瑟在线精品视频| 国产麻豆9l精品三级站| 色视频一区二区| 2023国产精华国产精品| 亚洲老妇xxxxxx| 久久99国产精品免费| 91色porny蝌蚪| 日韩欧美国产成人一区二区| 亚洲视频一区在线| 麻豆极品一区二区三区| 99久久99久久免费精品蜜臀| 欧美一级日韩免费不卡| 国产精品乱码人人做人人爱| 日日骚欧美日韩| av色综合久久天堂av综合| 欧美一激情一区二区三区| 最新不卡av在线| 久久99国产精品免费网站| 在线免费观看日本一区| 久久久综合视频| 亚洲成av人在线观看| 成人av电影在线网| 日韩精品一区二区在线| 亚洲成人av中文| 99精品视频一区| 久久精品亚洲麻豆av一区二区 | 欧美mv日韩mv国产网站app| 一区二区三区日本| 成人黄色电影在线| 久久日一线二线三线suv| 石原莉奈在线亚洲二区| 在线视频你懂得一区| 国产精品色哟哟网站| 精品一区二区三区的国产在线播放| 在线日韩一区二区| 亚洲欧美另类久久久精品| 国产91精品在线观看| 精品久久人人做人人爱| 日韩电影在线看| 欧美日韩免费在线视频| 一级精品视频在线观看宜春院 | 99热国产精品| 久久久五月婷婷| 久久99久久99| 日韩欧美三级在线| 蜜臀av性久久久久蜜臀av麻豆| 欧美精品一二三| 亚洲成人动漫一区| 欧美日韩aaaaaa| 午夜精品国产更新| 在线播放中文一区| 日本中文在线一区| 日韩你懂的电影在线观看| 久久精品av麻豆的观看方式|