亚洲欧美第一页_禁久久精品乱码_粉嫩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一区二区三区免费野_久草精品视频
欧美一级国产精品| 色综合久久精品| 日韩免费在线观看| 日本不卡高清视频| 欧美zozo另类异族| 激情综合网最新| 久久日韩精品一区二区五区| 国产精品自在欧美一区| 国产欧美久久久精品影院| 成人av网在线| 亚洲va韩国va欧美va| 欧美绝品在线观看成人午夜影视| 美女视频一区二区三区| 久久精品视频在线免费观看| 成人激情免费电影网址| 亚洲老妇xxxxxx| 日韩区在线观看| 高清成人在线观看| 一区二区三区四区中文字幕| 欧美二区三区的天堂| 久久爱www久久做| 亚洲欧美在线视频观看| 欧美三级在线看| 国产精品亚洲第一| 亚洲一区视频在线| 精品欧美黑人一区二区三区| 99精品视频在线免费观看| 日韩电影免费在线看| 国产欧美日韩综合精品一区二区| 色综合天天综合给合国产| 免费视频最近日韩| 综合精品久久久| 日韩精品自拍偷拍| 91成人网在线| 国产精品18久久久久| 亚洲在线视频一区| 久久精品在线观看| 欧美日韩在线不卡| 成+人+亚洲+综合天堂| 青青草原综合久久大伊人精品| 国产精品美女久久久久av爽李琼| 欧美日本免费一区二区三区| 国产91清纯白嫩初高中在线观看 | 国产精品久久久久久久久免费相片 | 欧美激情一区二区三区四区| 欧美日韩午夜影院| 成人免费视频一区二区| 欧美aaaaaa午夜精品| 亚洲精品乱码久久久久久日本蜜臀| 日韩精品一区二区三区在线观看| 色婷婷精品大在线视频| 国产精品一区三区| 日韩av在线播放中文字幕| 亚洲欧美在线另类| 国产日韩欧美电影| 精品电影一区二区三区 | 国产激情视频一区二区在线观看 | 一本色道a无线码一区v| 国产乱子伦视频一区二区三区 | 日韩成人一级大片| 一区二区三区免费看视频| 欧美国产成人精品| 国产日韩欧美精品电影三级在线| 欧美一级在线观看| 欧美日韩国产乱码电影| 在线精品视频小说1| 99精品在线观看视频| 成人激情校园春色| 东方欧美亚洲色图在线| 国产一区二区美女| 国产乱一区二区| 国产美女娇喘av呻吟久久| 久久精工是国产品牌吗| 老司机精品视频在线| 美女在线一区二区| 麻豆视频观看网址久久| 麻豆国产精品官网| 韩日精品视频一区| 国产一区高清在线| 国模一区二区三区白浆| 国产一区二区在线视频| 狠狠狠色丁香婷婷综合久久五月| 韩国av一区二区三区在线观看| 九九视频精品免费| 国产一区二区久久| 国产不卡高清在线观看视频| 高清久久久久久| 91免费国产在线| 91精品1区2区| 欧美巨大另类极品videosbest | 成人免费毛片aaaaa**| hitomi一区二区三区精品| 91在线免费播放| 欧美中文字幕一二三区视频| 精品视频一区二区三区免费| 3atv一区二区三区| 精品嫩草影院久久| 中文字幕免费在线观看视频一区| 国产精品毛片a∨一区二区三区 | 亚洲成人av中文| 免费亚洲电影在线| 国产福利精品一区二区| 99精品1区2区| 欧美日产在线观看| 久久精品夜夜夜夜久久| 亚洲欧美一区二区三区孕妇| 亚洲v中文字幕| 国产一区二区三区免费看| hitomi一区二区三区精品| 欧美日韩国产首页在线观看| 26uuu亚洲婷婷狠狠天堂| 国产精品美女久久久久久久| 亚洲成人激情综合网| 激情深爱一区二区| 97久久超碰国产精品电影| 欧美日韩国产欧美日美国产精品| 日韩你懂的在线播放| **欧美大码日韩| 舔着乳尖日韩一区| 国产成人啪午夜精品网站男同| 欧美自拍偷拍午夜视频| 久久久综合九色合综国产精品| 亚洲欧美激情视频在线观看一区二区三区| 亚洲第一成人在线| 国产精品77777| 欧美日韩三级一区二区| 国产精品免费久久| 日本不卡一二三区黄网| 色综合婷婷久久| 精品国产精品网麻豆系列 | 午夜视频一区在线观看| 国产福利一区二区三区视频在线| 欧美三区在线观看| 国产精品久久久久久久蜜臀| 日本不卡1234视频| 欧美中文字幕久久| 国产精品麻豆欧美日韩ww| 免费观看日韩电影| 欧美在线免费观看视频| 欧美国产成人在线| 激情综合网最新| 制服丝袜亚洲网站| 亚洲在线视频免费观看| 菠萝蜜视频在线观看一区| 久久你懂得1024| 日韩av电影免费观看高清完整版 | 不卡一区二区三区四区| 日韩视频在线永久播放| 午夜精品一区二区三区电影天堂| 99久久婷婷国产| 中文成人av在线| 国产成人自拍网| 久久综合久色欧美综合狠狠| 日韩av电影一区| 4438成人网| 日本中文字幕一区二区视频| 欧美丝袜第三区| 亚洲国产欧美另类丝袜| 欧美系列日韩一区| 亚洲黄色免费网站| 色欧美日韩亚洲| 亚洲精品欧美激情| 色婷婷综合中文久久一本| 国产精品国产三级国产| av欧美精品.com| 中文字幕一区二区在线观看| 9色porny自拍视频一区二区| 国产精品福利一区| 99精品欧美一区二区蜜桃免费| 国产精品乱码妇女bbbb| aaa亚洲精品| 亚洲免费观看高清完整版在线 | 国产69精品久久777的优势| 国产亚洲一区二区在线观看| 国产一区二区精品在线观看| 久久午夜老司机| 国产成人亚洲综合a∨婷婷图片| 国产日韩欧美不卡| 99国产一区二区三精品乱码| 亚洲自拍偷拍麻豆| 欧美日韩mp4| 国内精品久久久久影院一蜜桃| 国产亚洲欧美日韩日本| 国产成人日日夜夜| 国产精品成人网| 欧美天天综合网| 日本va欧美va精品发布| 久久综合色一综合色88| 成人av免费在线观看| 夜夜嗨av一区二区三区中文字幕| 欧美日韩国产美| 国内成人精品2018免费看| 国产精品美女久久久久久久网站| 色悠悠久久综合| 日本aⅴ亚洲精品中文乱码| 国产午夜精品福利| 一本一道综合狠狠老| 日韩精品一级中文字幕精品视频免费观看 | 国产精品欧美精品| 欧美日精品一区视频|