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

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

?? restore.cpp

?? VC++數(shù)字圖像處理 配套光盤
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ************************************************************************
//  文件名:restore.cpp
//
//  圖像復原API函數(shù)庫:
//
//  BlurDIB()			- 圖像模糊
//  InverseDIB()	    - 圖像逆濾波
//  NoiseBlurDIB()		- 圖像模糊加噪
//  WienerDIB()			- 圖像維納濾波
//	RandomNoiseDIB()	- 圖像中加入隨機噪聲
//	SaltNoiseDIB()		- 圖像中加入椒鹽噪聲
//  fourn()				- n維FFT
//
// *************************************************************************

#include "stdafx.h"
#include "restore.h"
#include "DIBAPI.h"

#include <math.h>
#include <direct.h>

#define SWAP(a,b) tempr=(a);(a)=(b);(b)=tempr

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

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

	//像素值
	unsigned char pixel;

	// 圖像每行的字節(jié)數(shù)
	LONG lLineBytes;

	//用于做FFT的數(shù)組
	double *fftSrc,*fftKernel;
	//二維FFT的長度和寬度
	unsigned long nn[3];
	//圖像歸一化因子
	double MaxNum;

	// 計算圖像每行的字節(jié)數(shù)
	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];

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

	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向源圖像倒數(shù)第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 < 5)
			{
				fftKernel[(2*lLineBytes)*j + 2*i + 1] = 1/25.0;
			}
			else
			{
				fftKernel[(2*lLineBytes)*j + 2*i + 1] = 0.0;
			}
			fftKernel[(2*lLineBytes)*j + 2*i + 2] = 0.0;
		}
	}

	//對源圖像進行FFT
	fourn(fftSrc,nn,2,1);
	//對卷積核圖像進行FFT
	fourn(fftKernel,nn,2,1);

	//頻域相乘
	for (i = 1;i <lHeight*lLineBytes*2;i+=2)
	{
		fftSrc[i] = fftSrc[i] * fftKernel[i] - fftSrc[i+1] * fftKernel[i+1];
		fftSrc[i+1] = fftSrc[i] * fftKernel[i+1] + fftSrc[i+1] * fftKernel[i];
	}

	//對結果圖像進行反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++)
		{
			// 指向源圖像倒數(shù)第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;
	// 返回
	return true;
}

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

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

	//像素值
	unsigned char pixel;

	// 圖像每行的字節(jié)數(shù)
	LONG lLineBytes;

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

	// 計算圖像每行的字節(jié)數(shù)
	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];

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

	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向源圖像倒數(shù)第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;
		}
	}

	//對源圖像進行FFT
	fourn(fftSrc,nn,2,1);
	//對卷積核圖像進行FFT
	fourn(fftKernel,nn,2,1);

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

	//對結果圖像進行反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++)
		{
			// 指向源圖像倒數(shù)第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;
	// 返回
	return true;
}

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

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

	//像素值
	unsigned char pixel;

	// 圖像每行的字節(jié)數(shù)
	LONG lLineBytes;

	//用于做FFT的數(shù)組
	double *fftSrc,*fftKernel;
	//二維FFT的長度和寬度
	unsigned long nn[3];
	//圖像歸一化因子
	double MaxNum;

	// 計算圖像每行的字節(jié)數(shù)
	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];

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

	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向源圖像倒數(shù)第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;
		}
	}

	//對源圖像進行FFT
	fourn(fftSrc,nn,2,1);
	//對卷積核圖像進行FFT
	fourn(fftKernel,nn,2,1);

	//頻域相乘
	for (i = 1;i <lHeight*lLineBytes*2;i+=2)
	{
		fftSrc[i] = fftSrc[i] * fftKernel[i] - fftSrc[i+1] * fftKernel[i+1];
		fftSrc[i+1] = fftSrc[i] * fftKernel[i+1] + fftSrc[i+1] * fftKernel[i];
	}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本人妖一区二区| 久久久99免费| 亚洲一区二区偷拍精品| 欧美日韩dvd在线观看| 美女精品自拍一二三四| 国产农村妇女毛片精品久久麻豆 | 正在播放一区二区| 亚洲高清不卡在线| 精品国产一区a| 国产福利不卡视频| 免费久久精品视频| 亚洲免费在线播放| 国产99精品国产| 久久久久综合网| 91亚洲永久精品| 久久av中文字幕片| 午夜精品久久久久久久99樱桃| 国产精品国产三级国产aⅴ原创| 欧美日韩国产影片| 国产suv精品一区二区6| 日本不卡高清视频| 国产日韩欧美精品电影三级在线| 欧美精品日韩一本| 成av人片一区二区| 亚洲成人免费av| 亚洲视频你懂的| 国产日产亚洲精品系列| 日韩美一区二区三区| 成人黄动漫网站免费app| 爽好久久久欧美精品| 日韩一级二级三级精品视频| 欧美日韩一级黄| 91性感美女视频| 99久久99久久精品免费观看| 成人精品国产一区二区4080| 六月婷婷色综合| 亚洲精品亚洲人成人网| 亚洲欧洲日韩一区二区三区| 中文字幕不卡在线播放| 国产亚洲欧洲997久久综合| 欧美在线不卡视频| 欧美日韩午夜在线| 欧美午夜在线观看| 欧美视频精品在线观看| 日本精品一区二区三区四区的功能| 久久爱www久久做| 国产在线播放一区三区四| 九一久久久久久| 精品一区二区三区在线观看| 亚洲成人黄色小说| 天天操天天色综合| 亚洲综合色噜噜狠狠| 一区二区三区蜜桃网| 国产精品美女久久久久aⅴ国产馆| 26uuu精品一区二区三区四区在线 26uuu精品一区二区在线观看 | 欧洲av一区二区嗯嗯嗯啊| 欧美写真视频网站| 欧美精品日韩综合在线| 精品国精品国产| 国产精品欧美综合在线| 亚洲精品第1页| 亚洲国产你懂的| 老司机精品视频在线| 国产经典欧美精品| 在线中文字幕一区| 精品久久久久久无| 欧美韩国日本一区| 一区二区三区免费看视频| 午夜视频一区二区三区| 久久99精品一区二区三区| 丁香一区二区三区| 在线一区二区三区四区五区 | 午夜免费欧美电影| 国产99久久久精品| 欧美日韩一区二区不卡| 日韩视频免费观看高清完整版在线观看| 欧美日韩国产在线播放网站| 日韩精品一区二区三区视频在线观看| 久久美女艺术照精彩视频福利播放 | 91免费视频网| 91精品国产综合久久久久久久久久| 日本一区二区电影| 日韩va亚洲va欧美va久久| 精品中文字幕一区二区小辣椒 | 欧美日韩一区二区三区不卡| 国产欧美日韩卡一| 免费av成人在线| 91蝌蚪porny| 成人免费一区二区三区视频 | 欧美日韩激情在线| 亚洲日本在线a| 国产成人午夜视频| 精品国产乱码久久久久久图片| 一区二区三区成人在线视频| 不卡视频在线观看| 久久精品一区二区三区不卡| 亚洲国产欧美在线人成| a亚洲天堂av| 久久精品欧美一区二区三区麻豆 | 91精品麻豆日日躁夜夜躁| 亚洲一区视频在线观看视频| 成人免费三级在线| 中国色在线观看另类| 国产a精品视频| 日韩欧美国产一区二区在线播放| 天天操天天干天天综合网| 成人国产视频在线观看 | 亚洲小说春色综合另类电影| 国产成人精品亚洲日本在线桃色 | 麻豆精品国产传媒mv男同| 在线精品观看国产| 亚洲国产综合色| 日韩一区二区免费高清| 麻豆极品一区二区三区| 亚洲精品一区在线观看| 午夜精品久久久久久久久久久| 在线免费观看日韩欧美| 午夜a成v人精品| 91麻豆精品久久久久蜜臀| 日韩国产欧美三级| 制服丝袜国产精品| 麻豆91在线播放免费| 中文字幕色av一区二区三区| 欧美专区亚洲专区| 国产伦精品一区二区三区免费迷| 国产精品久久久久aaaa樱花| 在线影院国内精品| 国产成a人无v码亚洲福利| 一区二区三区高清不卡| 成人午夜在线免费| 精品国产3级a| 精品成人一区二区三区四区| 国产精品国产三级国产有无不卡 | 国产精品久久久久久久久久免费看| 中文字幕一区二区三区在线不卡| 亚洲永久精品国产| 一本一道久久a久久精品| 美日韩一级片在线观看| 麻豆91免费观看| 蜜臀av在线播放一区二区三区 | 精品制服美女丁香| 狠狠网亚洲精品| 国产成人精品网址| 大陆成人av片| 色噜噜狠狠成人中文综合| 日本高清无吗v一区| 欧美日韩高清在线播放| 日韩精品中文字幕在线一区| 日韩欧美在线不卡| 日本乱人伦aⅴ精品| 日韩免费一区二区| 亚洲天堂福利av| 国产一区二区三区日韩| 一本一本大道香蕉久在线精品| 日本一二三不卡| www日韩大片| 国产精品久线在线观看| 亚洲综合色视频| 国内精品在线播放| 97精品国产97久久久久久久久久久久| 欧美体内she精高潮| 亚洲精品在线免费观看视频| 国产精品久久影院| 欧美精品一区二区三区在线| 丝袜国产日韩另类美女| 久久综合狠狠综合| 久久精品水蜜桃av综合天堂| 亚洲男帅同性gay1069| 26uuu亚洲综合色| 国产精品丝袜91| 亚洲一区二区三区在线| 欧美变态口味重另类| 久久亚洲一级片| 性久久久久久久| 粉嫩一区二区三区在线看| 中文字幕一区二区三区不卡在线| 欧美一区二区视频在线观看2022| 国产精品中文有码| 一区二区在线观看视频| 最好看的中文字幕久久| 欧美一区二区三区婷婷月色| 高清不卡在线观看av| 亚洲成人免费av| 手机精品视频在线观看| 懂色av中文一区二区三区| 亚洲第一搞黄网站| 亚洲国产电影在线观看| 欧美在线一二三四区| 免费人成在线不卡| 亚洲色图在线播放| 日韩你懂的在线播放| 91麻豆免费看片| 亚洲天堂成人在线观看| 成人av电影在线播放| 日本aⅴ精品一区二区三区| 成人免费小视频| 色香蕉成人二区免费| 2021国产精品久久精品| 国产美女视频91| 精品久久久久久久久久久久久久久 |