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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? segapi.cpp

?? 這是一個關(guān)于圖像邊緣檢測的小程序
?? CPP
?? 第 1 頁 / 共 4 頁
字號:
		nWeight[1][1][2] =  0 ;   
		nWeight[1][2][0] = -1 ;   
		nWeight[1][2][1] = -1 ;   
		nWeight[1][2][2] = -1 ;   
		
		
		
		//這個變量用來表示Laplacian算子象素值
		int nTmp[3][3];
		
		// 臨時變量
		double dGrad   ;
		double dGradOne;
		double dGradTwo;
		
		// 模板循環(huán)控制變量
		int yy ;
		int xx ;
		
		
		// 下面開始利用Prewitt算子進行計算,為了保證計算所需要的
		// 的數(shù)據(jù)位于圖像數(shù)據(jù)的內(nèi)部,下面的兩重循環(huán)的條件是
		// y<nHeight-1 而不是y<nHeight,相應的x方向也是x<nWidth-1
		// 而不是x<nWidth
		for(y=1; y<nHeight-1 ; y++ )
			for(x=1 ; x<nWidth-1 ; x++ )
			{
				dGrad    = 0 ; 
				dGradOne = 0 ;
				dGradTwo = 0 ;
				// Laplacian算子需要的各點象素值
				
				// 模板第一行
				nTmp[0][0] = lpImage[(y-1)*nSaveWidth + x - 1 ] ; 
				nTmp[0][1] = lpImage[(y-1)*nSaveWidth + x     ] ; 
				nTmp[0][2] = lpImage[(y-1)*nSaveWidth + x + 1 ] ; 
				
				// 模板第二行
				nTmp[1][0] = lpImage[y*nSaveWidth + x - 1 ] ; 
				nTmp[1][1] = lpImage[y*nSaveWidth + x     ] ; 
				nTmp[1][2] = lpImage[y*nSaveWidth + x + 1 ] ; 
				
				// 模板第三行
				nTmp[2][0] = lpImage[(y+1)*nSaveWidth + x - 1 ] ; 
				nTmp[2][1] = lpImage[(y+1)*nSaveWidth + x     ] ; 
				nTmp[2][2] = lpImage[(y+1)*nSaveWidth + x + 1 ] ; 
				
				// 計算梯度
				for(yy=0; yy<3; yy++)
					for(xx=0; xx<3; xx++)
					{
						dGradOne += nTmp[yy][xx] * nWeight[0][yy][xx] ;
						dGradTwo += nTmp[yy][xx] * nWeight[1][yy][xx] ;
					}
					dGrad = dGradOne*dGradOne + dGradTwo*dGradTwo  ;
					dGrad = sqrt(dGrad) ;
					// 梯度值寫入內(nèi)存
					*(pdGrad+y*nWidth+x)=dGrad;
			}
}

/*************************************************************************
 *
 * \函數(shù)名稱:
 *   EdgeTrack()
 *
 * \輸入?yún)?shù):
 *   CDib * pDib					- 指向CDib類的指針,含有原始圖象信息
 *   unsigned char * pUnEdgeTrack	- 指向邊界跟蹤結(jié)果的指針
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   pUnEdgeTrack指針指向的數(shù)據(jù)區(qū)存儲了邊界跟蹤的結(jié)果,其中1(邏輯)表示
 *	 對應象素為邊界點,0表示為非邊界點
 *
 *   串行邊界分割
 *
 *************************************************************************
 */
void EdgeTrack(CDib * pDib, unsigned char * pUnEdgeTrack)
{
	static int nDx[8]={-1,-1,-1, 0, 0, 1, 1, 1};
	static int nDy[8]={-1, 0, 1,-1, 1,-1, 0, 1};

	// 遍歷圖象的縱坐標
	int y;

	// 遍歷圖象的橫坐標
	int x;

	// 圖象的長寬大小
	CSize sizeImage		= pDib->GetDimensions();
	int nWidth			= sizeImage.cx		;
	int nHeight			= sizeImage.cy		;
	
	// 指向梯度數(shù)據(jù)的指針
	double * pdGrad;

	// 按照圖像的大小開辟內(nèi)存空間,存儲梯度計算的結(jié)果
	pdGrad=new double[nHeight*nWidth];

    // 調(diào)用Roberts算子求梯度
	RobertsOperator(pDib, pdGrad);

	// 定義當前象素梯度值
	double dCurrGrad = 0;
	
	// 定義最大梯度值
	double dMaxGrad;

	// 設(shè)置初值
	dMaxGrad = 0;

	// 最大梯度值對應的象素點坐標
	int nPx;
	int nPy;

	nPx = 0;
	nPy = 0;

	// 求梯度最大值所在的象素點坐標
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			dCurrGrad = pdGrad[y*nWidth + x] ;
			if( dMaxGrad< dCurrGrad )
			{
				dMaxGrad = dCurrGrad;
				nPx = x ;
				nPy = y ; 
			}
		}
	}

	// 初始化
	memset(pUnEdgeTrack,0,sizeof(unsigned char)*nWidth*nHeight);
	dCurrGrad = pdGrad[nPy*nWidth + nPx] ;

	// 從(nPx,nPy)點開始進行邊界跟蹤
	pUnEdgeTrack[nPy*nWidth + nPx] = 255 ;

	// 循環(huán)變量,遍歷當前象素的8鄰域
	int i ;

	int yy;
	int xx;
	
	int nDetX;
	int nDetY;

	while(dCurrGrad>10)
	{
		// 設(shè)置當前點為邊界點
		pUnEdgeTrack[nPy*nWidth + nPx] = 255 ;

		dMaxGrad = 0 ;
		for(i=0; i<8; i++)
		{
			nDetX=nDx[i];
			nDetY=nDy[i];
			y = nPy + nDetY;
			x = nPx + nDetX;

			// 判斷是否在圖像內(nèi)部
			if(x>=0 && x<nWidth && y>=0 && y<nHeight)
			{
				if( ( pdGrad[y*nWidth + x] > dMaxGrad)  && ( pUnEdgeTrack[y*nWidth + x] == 0) )
				{
					dMaxGrad = pdGrad[y*nWidth + x] ;
					yy = y;
					xx = x;
				}
			}
		}
		// 下一個邊界點的梯度,橫縱坐標
		dCurrGrad = dMaxGrad ;
		nPy = yy;
		nPx = xx;
	}

	//釋放內(nèi)存
	delete pdGrad;
	pdGrad = NULL;

}

/*************************************************************************
 *
 * \函數(shù)名稱:
 *   MakeGauss()
 *
 * \輸入?yún)?shù):
 *   double sigma									        - 高斯函數(shù)的標準差
 *   double **pdKernel										- 指向高斯數(shù)據(jù)數(shù)組的指針
 *   int *pnWindowSize										- 數(shù)據(jù)的長度
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   這個函數(shù)可以生成一個一維的高斯函數(shù)的數(shù)字數(shù)據(jù),理論上高斯數(shù)據(jù)的長度應
 *   該是無限長的,但是為了計算的簡單和速度,實際的高斯數(shù)據(jù)只能是有限長的
 *   pnWindowSize就是數(shù)據(jù)長度
 *   
 *************************************************************************
 */
void MakeGauss(double sigma, double **pdKernel, int *pnWindowSize)
{
	// 循環(huán)控制變量
	int i   ;
	
	// 數(shù)組的中心點
	int nCenter;

	// 數(shù)組的某一點到中心點的距離
	double  dDis  ; 

	double PI = 3.14159;
	// 中間變量
	double  dValue; 
	double  dSum  ;
	dSum = 0 ; 
	
	// 數(shù)組長度,根據(jù)概率論的知識,選取[-3*sigma, 3*sigma]以內(nèi)的數(shù)據(jù)。
	// 這些數(shù)據(jù)會覆蓋絕大部分的濾波系數(shù)
	*pnWindowSize = 1 + 2 * ceil(3 * sigma);
	
	// 中心
	nCenter = (*pnWindowSize) / 2;
	
	// 分配內(nèi)存
	*pdKernel = new double[*pnWindowSize] ;
	
	for(i=0; i< (*pnWindowSize); i++)
	{
		dDis = (double)(i - nCenter);
		dValue = exp(-(1/2)*dDis*dDis/(sigma*sigma)) / (sqrt(2 * PI) * sigma );
		(*pdKernel)[i] = dValue ;
		dSum += dValue;
	}
	
	// 歸一化
	for(i=0; i<(*pnWindowSize) ; i++)
	{
		(*pdKernel)[i] /= dSum;
	}
}

/*************************************************************************
 *
 * \函數(shù)名稱:
 *   GaussianSmooth()
 *
 * \輸入?yún)?shù):
 *   unsigned char * pUnchImg				- 指向圖象數(shù)據(jù)的指針
 *   int nWidth											- 圖象數(shù)據(jù)寬度
 *   int nHeight										- 圖象數(shù)據(jù)高度
 *   double dSigma									- 高斯函數(shù)的標準差
 *   unsigned char * pUnchSmthdImg	- 指向經(jīng)過平滑之后的圖象數(shù)據(jù)
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   為了抑止噪聲,采用高斯濾波對圖象進行濾波,濾波先對x方向進行,然后對
 *   y方向進行。
 *   
 *************************************************************************
 */
void GaussianSmooth(unsigned char *pUnchImg, int nWidth, int nHeight, 
										double sigma, unsigned char * pUnchSmthdImg)
{
	// 循環(huán)控制變量
  int y;
	int x;
	
	int i;
	
	// 高斯濾波器的數(shù)組長度
	
	int nWindowSize;
	
	//  窗口長度的1/2
	int	nHalfLen;   
	
	// 一維高斯數(shù)據(jù)濾波器
	double *pdKernel ;
	
	// 高斯系數(shù)與圖象數(shù)據(jù)的點乘
	double  dDotMul     ;
	
	// 高斯濾波系數(shù)的總和
	double  dWeightSum     ;          
  
	// 中間變量
	double * pdTmp ;
	
	// 分配內(nèi)存
	pdTmp = new double[nWidth*nHeight];
	
	// 產(chǎn)生一維高斯數(shù)據(jù)濾波器
	// MakeGauss(sigma, &dKernel, &nWindowSize);
	MakeGauss(sigma, &pdKernel, &nWindowSize) ;
	
	// MakeGauss返回窗口的長度,利用此變量計算窗口的半長
	nHalfLen = nWindowSize / 2;
	
  // x方向進行濾波
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			dDotMul		= 0;
			dWeightSum = 0;
			for(i=(-nHalfLen); i<=nHalfLen; i++)
			{
				// 判斷是否在圖象內(nèi)部
				if( (i+x) >= 0  && (i+x) < nWidth )
				{
					dDotMul += (double)pUnchImg[y*nWidth + (i+x)] * pdKernel[nHalfLen+i];
					dWeightSum += pdKernel[nHalfLen+i];
				}
			}
			pdTmp[y*nWidth + x] = dDotMul/dWeightSum ;
		}
	}
	
	// y方向進行濾波
	for(x=0; x<nWidth; x++)
	{
		for(y=0; y<nHeight; y++)
		{
			dDotMul		= 0;
			dWeightSum = 0;
			for(i=(-nHalfLen); i<=nHalfLen; i++)
			{
				// 判斷是否在圖象內(nèi)部
				if( (i+y) >= 0  && (i+y) < nHeight )
				{
					dDotMul += (double)pdTmp[(y+i)*nWidth + x] * pdKernel[nHalfLen+i];
					dWeightSum += pdKernel[nHalfLen+i];
				}
			}
			pUnchSmthdImg[y*nWidth + x] = (unsigned char)(int)dDotMul/dWeightSum ;
		}
	}

	// 釋放內(nèi)存
	delete []pdKernel;
	pdKernel = NULL ;
	
	delete []pdTmp;
	pdTmp = NULL;
}


/*************************************************************************
 *
 * \函數(shù)名稱:
 *   DirGrad()
 *
 * \輸入?yún)?shù):
 *   unsigned char *pUnchSmthdImg					- 經(jīng)過高斯濾波后的圖象
 *   int nWidht														- 圖象寬度
 *   int nHeight      										- 圖象高度
 *   int *pnGradX                         - x方向的方向?qū)?shù)
 *   int *pnGradY                         - y方向的方向?qū)?shù)
 * \返回值:
 *   無
 *
 * \說明:
 *   這個函數(shù)計算方向倒數(shù),采用的微分算子是(-1 0 1) 和 (-1 0 1)'(轉(zhuǎn)置)
 *   計算的時候?qū)吔缦笏夭捎昧颂厥馓幚? *   
 *   
 *************************************************************************
 */
void DirGrad(unsigned char *pUnchSmthdImg, int nWidth, int nHeight,
										 int *pnGradX , int *pnGradY)
{
	// 循環(huán)控制變量
	int y ;
	int x ;
	
	// 計算x方向的方向?qū)?shù),在邊界出進行了處理,防止要訪問的象素出界
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			pnGradX[y*nWidth+x] = (int) ( pUnchSmthdImg[y*nWidth+min(nWidth-1,x+1)]  
													          - pUnchSmthdImg[y*nWidth+max(0,x-1)]     );
		}
	}

	// 計算y方向的方向?qū)?shù),在邊界出進行了處理,防止要訪問的象素出界
	for(x=0; x<nWidth; x++)
	{
		for(y=0; y<nHeight; y++)
		{
			pnGradY[y*nWidth+x] = (int) ( pUnchSmthdImg[min(nHeight-1,y+1)*nWidth + x]  
																		- pUnchSmthdImg[max(0,y-1)*nWidth+ x ]     );
		}
	}
}
/*************************************************************************
 *
 * \函數(shù)名稱:
 *   GradMagnitude()
 *
 * \輸入?yún)?shù):
 *   int *pnGradX                         - x方向的方向?qū)?shù)
 *   int *pnGradY                         - y方向的方向?qū)?shù)
 *   int nWidht														- 圖象寬度
 *   int nHeight      										- 圖象高度
 *   int *pnMag                           - 梯度幅度   
 *
 * \返回值:
 *   無
 *
 * \說明:
 *   這個函數(shù)利用方向倒數(shù)計算梯度幅度,方向倒數(shù)是DirGrad函數(shù)計算的結(jié)果
 *   
 *************************************************************************
 */
void GradMagnitude(int *pnGradX, int *pnGradY, int nWidth, int nHeight, int *pnMag)
{
	
	// 循環(huán)控制變量
	int y ;
	int x ;

	// 中間變量
	double dSqtOne;
	double dSqtTwo;
	
	for(y=0; y<nHeight; y++)
	{
		for(x=0; x<nWidth; x++)
		{
			dSqtOne = pnGradX[y*nWidth + x] * pnGradX[y*nWidth + x];
			dSqtTwo = pnGradY[y*nWidth + x] * pnGradY[y*nWidth + x];
			pnMag[y*nWidth + x] = (int)(sqrt(dSqtOne + dSqtTwo) + 0.5);
		}
	}
}
/*************************************************************************
 *
 * \函數(shù)名稱:
 *   NonmaxSuppress()
 *
 * \輸入?yún)?shù):
 *   int *pnMag                - 梯度圖
 *   int *pnGradX							 - x方向的方向?qū)?shù)	
 *   int *pnGradY              - y方向的方向?qū)?shù)

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
综合亚洲深深色噜噜狠狠网站| 欧美高清视频一二三区 | 奇米综合一区二区三区精品视频| 在线精品视频一区二区三四| 一区二区国产视频| 欧美三级乱人伦电影| 午夜精品在线看| 日韩视频免费观看高清在线视频| 蜜乳av一区二区三区| 久久影院视频免费| 成av人片一区二区| 一区二区三区日韩精品视频| 欧美日韩免费在线视频| 久久福利资源站| 日本一区二区不卡视频| 91麻豆视频网站| 同产精品九九九| 久久女同性恋中文字幕| 99在线精品视频| 日日摸夜夜添夜夜添精品视频 | 日韩免费一区二区| 国产成人在线观看免费网站| 亚洲欧美电影院| 欧美美女激情18p| 国产麻豆91精品| 亚洲网友自拍偷拍| 久久精品夜色噜噜亚洲aⅴ| 色婷婷久久综合| 激情综合色综合久久综合| 中文字幕在线不卡国产视频| 欧美精品第1页| 成人的网站免费观看| 日韩激情视频在线观看| 欧美激情一区在线观看| 91精品视频网| 91啪九色porn原创视频在线观看| 麻豆91精品视频| 亚洲九九爱视频| 欧美精品一区二区三| 在线视频你懂得一区| 国产69精品久久99不卡| 日日夜夜精品视频天天综合网| 国产精品国产精品国产专区不蜜 | 欧美午夜一区二区| 国产精品性做久久久久久| 亚洲国产日韩在线一区模特| 久久久久国产精品麻豆ai换脸 | 久久这里只有精品6| 欧美性猛交xxxxxxxx| 成人免费视频视频| 精品无码三级在线观看视频| 午夜视频一区二区| 亚洲精品一二三| 日韩国产在线观看一区| 综合色天天鬼久久鬼色| 日本一区二区三区在线观看| 日韩一区二区三区高清免费看看| 欧美影院一区二区三区| 99精品在线观看视频| 国产麻豆精品在线| 久久精品国产99国产精品| 午夜欧美在线一二页| 亚洲欧洲综合另类| 国产精品乱码一区二三区小蝌蚪| 亚洲精品一区二区在线观看| 日韩丝袜情趣美女图片| 欧美日韩免费高清一区色橹橹 | 欧美亚洲动漫精品| 色综合久久久久| 91女厕偷拍女厕偷拍高清| 成人免费高清在线| 国产aⅴ综合色| 成人午夜视频在线观看| 国产精品原创巨作av| 国产一区二区三区精品视频| 久久av资源网| 国产精品中文字幕欧美| 国产河南妇女毛片精品久久久| 国产一区二区三区久久悠悠色av| 狠狠色综合日日| 国产一区二区三区免费播放| 国产一区三区三区| 国产成人亚洲精品狼色在线| 国产精品亚洲专一区二区三区| 国产一区二区美女| 成人午夜私人影院| 日本久久一区二区三区| 91成人在线免费观看| 欧美日韩一二三区| 91精品国产综合久久久久久久| 日韩一区国产二区欧美三区| 欧美大片日本大片免费观看| 2017欧美狠狠色| 中文字幕乱码日本亚洲一区二区| 中文字幕免费不卡在线| 成人午夜激情影院| av福利精品导航| 欧美色视频在线观看| 日韩午夜三级在线| 国产女同互慰高潮91漫画| 成人欧美一区二区三区在线播放| 亚洲精品国产高清久久伦理二区| 亚洲成人先锋电影| 黄色成人免费在线| av中文字幕不卡| 欧美日韩aaaaaa| 久久亚洲综合色| 亚洲视频一区在线观看| 午夜一区二区三区视频| 国产一区二区三区黄视频 | 欧美美女一区二区三区| 精品国产一区久久| 中文字幕一区二区三区精华液| 一区二区三区欧美亚洲| 捆绑调教美女网站视频一区| 成人少妇影院yyyy| 777欧美精品| 中文av字幕一区| 日日噜噜夜夜狠狠视频欧美人| 国产成人午夜99999| 在线免费观看日韩欧美| 久久网站热最新地址| 亚洲一区二区精品3399| 狠狠网亚洲精品| 欧美性大战久久| 国产精品女主播在线观看| 日日夜夜精品视频免费| av动漫一区二区| 精品99999| 婷婷开心久久网| 99国产精品久久久久久久久久| 日韩一区二区三区精品视频| 亚洲欧美乱综合| 国产成人福利片| 欧美一级专区免费大片| 亚洲精品视频免费观看| 国产精品亚洲人在线观看| 欧美电影影音先锋| 亚洲乱码中文字幕| 国产a久久麻豆| 26uuu亚洲综合色欧美| 五月天久久比比资源色| 一本色道综合亚洲| 国产欧美一区二区精品仙草咪| 日本va欧美va精品| 欧美制服丝袜第一页| 最新国产成人在线观看| 国产精品一区在线| 精品久久久久久久久久久久久久久 | 91福利小视频| 国产亚洲制服色| 免费成人深夜小野草| 欧美色网站导航| 亚洲免费视频中文字幕| 成人av在线网站| 久久精品男人天堂av| 精久久久久久久久久久| 日韩欧美激情在线| 日韩福利视频网| 在线成人午夜影院| 性感美女久久精品| 欧美性猛片xxxx免费看久爱| 亚洲精品高清在线| 在线中文字幕一区二区| 亚洲人xxxx| 91九色最新地址| 一区二区三区中文在线观看| 91天堂素人约啪| 亚洲精品国产高清久久伦理二区| 91女神在线视频| 亚洲自拍偷拍综合| 欧美色老头old∨ideo| 亚洲国产成人精品视频| 欧美日韩午夜在线| 五月激情六月综合| 欧美一级二级三级蜜桃| 久久99在线观看| 久久欧美中文字幕| 成人a级免费电影| 亚洲人成影院在线观看| 色婷婷精品久久二区二区蜜臀av| 亚洲综合在线五月| 欧亚洲嫩模精品一区三区| 久久精品一区二区三区不卡牛牛| 亚洲一区免费观看| 欧美老肥妇做.爰bbww视频| 免费在线观看一区| 欧美精品一区二区三区四区| 国产99精品视频| 有坂深雪av一区二区精品| 欧美日韩亚洲综合| 久久99精品国产麻豆婷婷洗澡| 久久精品在这里| 91麻豆6部合集magnet| 午夜成人免费电影| 国产香蕉久久精品综合网| 色av一区二区| 美女看a上一区| 国产精品久久一级| 欧美精品久久天天躁|