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

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

?? restore.cpp

?? 提供了圖像識別
?? CPP
?? 第 1 頁 / 共 2 頁
字號:
// ************************************************************************
//  文件名:restore.cpp
//
//  圖像復原API函數庫:
//
//  DIBNoRestriction()			- 圖像模糊
//  DIBInverseFilter()			- 圖像逆濾波復原
//  DIBNoiseDegeneration()		- 圖像模糊加噪
//  DIBWinnerFilter()			- 圖像維納濾波
//	DIBMotionDegeneration()		- 圖像運動模糊
//	DIBMotionRestore()			- 圖像運動模糊復原
//
// *************************************************************************


#include "stdafx.h"
#include "GlobalApi.h"
#include "Cdib.h"

#include <math.h>
#include <direct.h>
#include <complex>
using namespace std;

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

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

BOOL WINAPI DIBNoRestriction(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;

	// 實際進行付立葉變換的寬度和高度
	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;
	
	//圖像歸一化因子
	double MaxNum;
	
	//輸入圖象的長和寬必須為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];

	// 將數據存入時域數組
	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);
			}
			else
			{
				pCTH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
			}
			pCFH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
		}
	}

	//對源圖像進行FFT
	::DIBFFT_2D(pCTSrc, lLineBytes, lHeight, pCFSrc);
	
	//對變換核圖像進行FFT
	::DIBFFT_2D(pCTH, lLineBytes, lHeight, pCFH);

	//頻域相乘
	for (i = 0;i <lHeight*lLineBytes;i++)
	{
		pCFSrc[i] = pCFSrc[i]*pCFH[i];
	}

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

	//確定歸一化因子
	MaxNum = 0.0;
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			temp = sqrt(pCTSrc[ lLineBytes*j + i ].real() * pCTSrc[ lLineBytes*j + i ].real()
						+pCTSrc[lLineBytes*j + i ].imag() * pCTSrc[ lLineBytes*j +i].imag());
			
			//選擇歸一化因子
			if( MaxNum < temp)
				MaxNum = temp;
		}
	}
	
	//轉換為圖像
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向源圖像倒數第j行,第i個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;
	
			*lpSrc = (unsigned char) (pCTSrc[(lLineBytes)*j + i].real()*255.0/MaxNum);
		}
	}
	
	//釋放存儲空間
	delete pCTSrc;
	delete pCTH;

	delete pCFSrc;
	delete pCFH;

	// 返回
	return true;
}

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

BOOL WINAPI DIBInverseFilter (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 tempre, tempim, a, b, c, d;

	// 實際進行付立葉變換的寬度和高度
	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;
	
	//圖像歸一化因子
	double MaxNum;
	
	//輸入退化圖象的長和寬必須為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];

	// 將退化圖象數據存入時域數組
	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);
			}
			else
			{
				pCTH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
			}
			pCFH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
		}
	}

	//對退化圖像進行FFT
	::DIBFFT_2D(pCTSrc, lLineBytes, lHeight, pCFSrc);
	
	//對變換核圖像進行FFT
	::DIBFFT_2D(pCTH, lLineBytes, lHeight, pCFH);
	
	//頻域相除
	for (i = 0;i <lHeight*lLineBytes;i++)
	{
		a = pCFSrc[i].real();
		b = pCFSrc[i].imag();
		c = pCFH[i].real();
		d = pCFH[i].imag();
		
		//如果頻域值太小,不予考慮
		if (c*c + d*d > 1e-3)
		{
			tempre = ( a*c + b*d ) / ( c*c + d*d );
			tempim = ( b*c - a*d ) / ( c*c + d*d );
		}

		pCFSrc[i]= complex<double>(tempre , tempim);
	}

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

	//確定歸一化因子
	MaxNum=300;

	//轉換為復原圖像
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 指向復原圖像倒數第j行,第i個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;
	
			*lpSrc = (unsigned char) (pCTSrc[(lLineBytes)*j + i].real()*255.0/MaxNum);
		}
	}
	
	//釋放存儲空間
	delete pCTSrc;
	delete pCTH;

	delete pCFSrc;
	delete pCFH;

	// 返回
	return true;
}

/*************************************************************************
 *
 * 函數名稱:
 *   DIBNoiseDegeneration()
 *
 * 參數:
 *   CDib  *pDib       - 指向CDib類的指針
 *
 * 返回值:
 *   BOOL               - 模糊加噪操作成功返回TRUE,否則返回FALSE。
 *
 * 說明:
 *   該函數用來對DIB圖像進行模糊加噪操作。
 *
 ************************************************************************/

BOOL WINAPI DIBNoiseDegeneration (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;

	//轉換為圖像,加噪
	unsigned char NoisePoint;
	
	//臨時變量
	double temp;

	//圖像歸一化因子
	double MaxNum;

	// 實際進行付立葉變換的寬度和高度
	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;
		
	// 為時域和頻域的數組分配空間
	pCTSrc = new complex<double> [lHeight*lLineBytes];
	pCTH   = new complex<double> [lHeight*lLineBytes];
	
	pCFSrc = new complex<double> [lHeight*lLineBytes];
	pCFH   = new complex<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);
			}
			else
			{
				pCTH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
			}
			
			// 頻域賦零值
			pCFH[ lLineBytes*j + i ] = complex<double>(0.0 , 0.0);
		}
	}

	//對源圖像進行FFT
	::DIBFFT_2D(pCTSrc, lLineBytes, lHeight, pCFSrc);
	
	//對變換核圖像進行FFT
	::DIBFFT_2D(pCTH, lLineBytes, lHeight, pCFH);

	//頻域相乘
	for (i = 0;i <lHeight*lLineBytes;i++)
	{
		pCFSrc[i] = pCFSrc[i]*pCFH[i];
	}

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

	//確定歸一化因子
	MaxNum = 0.0;
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			temp = sqrt(pCTSrc[ lLineBytes*j + i ].real() * pCTSrc[ lLineBytes*j + i ].real()
						+pCTSrc[lLineBytes*j + i ].imag() * pCTSrc[ lLineBytes*j +i].imag());
			
			//選擇歸一化因子
			if( MaxNum < temp)
				MaxNum = temp;
		}
	}
	
	//生成偽隨機數種子
	srand((unsigned)time(NULL));

	//轉換為圖像,并加入偽隨機噪聲
	for (j = 0;j < lHeight ;j++)
	{
		for(i = 0;i < lLineBytes ;i++)
		{
			// 產生的噪聲
			NoisePoint = rand()/2048-8;
			
			// 指向源圖像倒數第j行,第i個象素的指針			
 			lpSrc = (unsigned char *)lpDIBBits + lLineBytes * j + i;
	
			// 時域加噪,存儲象素值
			*lpSrc = (unsigned char) (pCTSrc[(lLineBytes)*j + i].real()*255.0/MaxNum + NoisePoint);
			
			//如果象素值過大,直接賦值255
			if(*lpSrc > 255)
				*lpSrc = 255 ;

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美日韩亚洲另类| 在线免费观看一区| 国产亚洲一本大道中文在线| 国产一区激情在线| 久久久午夜精品| 成人h版在线观看| 亚洲日本免费电影| 欧美性大战久久久久久久| 亚洲成人www| 日韩精品在线一区| 波多野洁衣一区| 亚洲综合丝袜美腿| 亚洲精品一区二区三区四区高清| 高清成人免费视频| 一区二区三区四区精品在线视频| 欧美人与性动xxxx| 国产一区二区不卡| 一区二区三区四区不卡视频| 日韩视频免费观看高清完整版在线观看 | 欧美日韩视频在线第一区| 婷婷六月综合亚洲| 亚洲国产成人午夜在线一区| 欧美亚洲禁片免费| 精品一区二区精品| 亚洲欧美日本在线| 日韩三级高清在线| 一本大道久久精品懂色aⅴ| 丝袜美腿亚洲一区| 国产精品久久久久久久浪潮网站| 欧美高清精品3d| 丁香婷婷深情五月亚洲| 亚洲成人免费av| 中文字幕精品一区| 欧美一区二区三区日韩视频| 成人免费av资源| 麻豆国产欧美日韩综合精品二区| 国产日本欧洲亚洲| 欧美精品亚洲二区| www.色精品| 韩国在线一区二区| 性做久久久久久免费观看 | 欧美片在线播放| 丁香亚洲综合激情啪啪综合| 国内偷窥港台综合视频在线播放| 亚洲视频网在线直播| 亚洲精品一区二区精华| 欧美亚洲日本一区| 99精品久久99久久久久| 国产综合成人久久大片91| 亚洲亚洲精品在线观看| 中文字幕字幕中文在线中不卡视频| 精品免费国产二区三区| 欧美日韩国产美| 色婷婷综合激情| 成人18精品视频| 韩国中文字幕2020精品| 日本va欧美va瓶| 午夜视频一区在线观看| 亚洲精选视频在线| 国产精品三级在线观看| 亚洲精品在线观看网站| 欧美mv日韩mv国产网站| 日韩欧美亚洲另类制服综合在线| 欧美日产国产精品| 欧美熟乱第一页| 精品视频一区二区三区免费| 一本到高清视频免费精品| 北条麻妃一区二区三区| 丁香网亚洲国际| 国产电影一区二区三区| 精品影视av免费| 精品一区二区久久| 韩国毛片一区二区三区| 久久99精品国产.久久久久| 热久久国产精品| 免费在线观看一区二区三区| 午夜精品久久久久久久 | 免费不卡在线观看| 免费日本视频一区| 久久99精品国产.久久久久| 九一久久久久久| 极品少妇一区二区三区精品视频| 久久国产精品色婷婷| 国内精品写真在线观看| 国产.欧美.日韩| 91在线云播放| 欧美手机在线视频| 欧美v日韩v国产v| 国产欧美日韩久久| 亚洲色图欧美偷拍| 午夜精品福利一区二区三区蜜桃| 日韩高清在线观看| 国产一区91精品张津瑜| 成人avav在线| 欧美日本在线播放| 精品精品国产高清a毛片牛牛| 久久色成人在线| 成人欧美一区二区三区小说| 亚洲资源在线观看| 免费视频一区二区| 成人午夜私人影院| 欧美性欧美巨大黑白大战| 日韩欧美一区二区不卡| 国产午夜精品美女毛片视频| 亚洲欧美日韩久久精品| 天堂影院一区二区| 国产精品夜夜嗨| 欧美色图在线观看| 久久影视一区二区| 亚洲激情一二三区| 韩国av一区二区三区四区| 97成人超碰视| 国产精品电影一区二区三区| 亚洲综合一区二区三区| 久热成人在线视频| 一本大道久久a久久综合婷婷| 日韩一级免费一区| 亚洲精品亚洲人成人网在线播放| 日韩国产精品大片| 99在线精品免费| 亚洲精品一区二区三区福利| 亚洲一区二区三区四区在线观看| 国产麻豆91精品| 91精品久久久久久久久99蜜臂| 国产日韩精品一区二区三区| 香蕉久久一区二区不卡无毒影院 | av在线播放一区二区三区| 欧美精品 日韩| 中文字幕亚洲在| 激情伊人五月天久久综合| 91福利国产成人精品照片| 久久久精品中文字幕麻豆发布| 亚洲高清免费一级二级三级| 粉嫩欧美一区二区三区高清影视 | 激情成人午夜视频| 精品视频一区三区九区| 中文字幕中文乱码欧美一区二区| 麻豆视频观看网址久久| 欧洲在线/亚洲| 中文字幕一区二区三区在线播放| 捆绑紧缚一区二区三区视频| 欧美日韩视频不卡| 一区二区三区四区不卡在线 | 色视频一区二区| 国产精品久久久久久户外露出 | 国产精品亚洲专一区二区三区| 欧美性猛交一区二区三区精品| 国产精品久久久久久久久免费丝袜 | 亚洲福利一区二区三区| 99国产一区二区三精品乱码| 国产婷婷色一区二区三区| 麻豆中文一区二区| 欧美一级理论片| 蜜臀av一级做a爰片久久| 制服丝袜av成人在线看| 一区二区激情小说| 91麻豆文化传媒在线观看| 国产精品丝袜久久久久久app| 国产一区中文字幕| 精品日产卡一卡二卡麻豆| 免费一级片91| 欧美成人一区二区三区片免费| 三级精品在线观看| 日韩一区二区精品| 久久国产欧美日韩精品| 2021中文字幕一区亚洲| 国产在线视频一区二区三区| 精品久久国产老人久久综合| 激情六月婷婷综合| 久久这里只有精品6| 国产盗摄视频一区二区三区| 国产片一区二区| 不卡一区二区三区四区| 国产精品高潮呻吟久久| 91一区二区三区在线播放| 亚洲人成影院在线观看| 欧美色视频在线观看| 亚洲va欧美va人人爽午夜| 欧美激情在线一区二区| 国产精品一二三区在线| 国产精品理伦片| 日本韩国一区二区| 日韩黄色一级片| 久久综合九色综合97婷婷女人 | 国产精品欧美一级免费| 不卡视频免费播放| 亚洲主播在线观看| 日韩欧美一二三区| 高清国产一区二区| 亚洲国产精品久久人人爱| 日韩精品一区二区三区视频在线观看 | 久久99精品久久久久婷婷| 国产三级欧美三级| 色综合久久天天| 日本午夜一本久久久综合| 久久久久久久久久久99999| 91论坛在线播放| 久久精品国产一区二区三区免费看 | 亚洲欧美另类综合偷拍| 欧美日韩另类国产亚洲欧美一级|