Beispiel #1
0
void CVisGradient::DoProcessing()
{
	Uint8 * pInputImage = (Uint8*)m_iportInput.GetBuffer();
	Uint8 * pGradientImage = (Uint8*)m_oportResult.GetBuffer();

	// Use the IMGLIB for this.
	IMG_sobel( pInputImage, pGradientImage, m_unResultWidth, m_unResultHeight);

}
Beispiel #2
0
void JSPreCtrl(int framenum)
{
	int i,j,k,m,n;
	int thvalue;

	UINT8 *pImageCur,*pImageBK,*pImageBKTemp;

	//JSRunNextCounter();

	//更新临时背景  用于对前后幁差计算

	for(k=0;k<1;k++)
	{
		//m=2*JSgTargetCounterNow+k;
		m=k;
		memset(JSProX[m],0,sizeof(int)*TWIDTH);
		memset(JSProXDif[m],0,sizeof(int)*TWIDTH);
		memset(JSProXSobel[k],0,sizeof(int)*TWIDTH);
		memset(JSProXSobelLow[k],0,sizeof(int)*TWIDTH);

		pImageCur=JSpFrameCur[k];
	    pImageBK=JSFrameBK[k];

	    thvalue=25;//30

	    JSGetRectCor(k);

	    //高速平滑
	    SmoothGauss(pImageCur+(JSy_up-1)*TWIDTH,TWIDTH,JSy_down-JSy_up+2,TWIDTH);

	    //背景差
		for(j=JSy_up;j<JSy_down;j++)
		{
			//n=j*TWIDTH+JSx_left;
			for(i=JSx_left;i<JSx_right;i++)
			{
				//if(abs(pImageCur[n]-pImageBKTemp[n++])>thvalue)
				if(abs(pImageCur[j*TWIDTH+i]-pImageBK[j*TWIDTH+i])>thvalue)
				{
					JSProX[m][i]++;//ProY[2*k][j]++;
				}
			}
		}
		//幁间差
		if(JSgFrameCounter==0)
	    	pImageBKTemp=JSFrameBKTemp[2*9+k];
	    else
	    	pImageBKTemp=JSFrameBKTemp[2*(JSgFrameCounter-1)+k];
		for(j=JSy_up;j<JSy_down;j++)
		{
			//n=j*TWIDTH+JSx_left;
			for(i=JSx_left;i<JSx_right;i++)
			{
				//if(abs(pImageCur[n]-pImageBKTemp[n++])>thvalue)
				if(abs(pImageCur[j*TWIDTH+i]-pImageBKTemp[(j-JSy_up)*TWIDTH+i])>20)
				{
					JSProXDif[m][i]++;//ProY[2*k][j]++;
				}
			}
		}


		IMG_sobel(pImageCur+JSy_up*TWIDTH,JSFrameTmp+JSy_up*TWIDTH,TWIDTH,JSy_down-JSy_up);//当前图像 寻找垂直边缘

		for(j=JSy_up;j<JSy_down-2;j++)//sobel之后,少了后面2行的
		{
			for(i=JSx_left;i<JSx_right;i++)
			{
				if(JSFrameTmp[j*TWIDTH+i]>50)//存在大边缘,
				{
					JSProXSobel[k][i]++;
				}
				if(JSFrameTmp[j*TWIDTH+i]>30)//存在微小边缘,用于辅助背景差(如果前景根本就没有边缘,则不认为是目标,马上当背景)
				{
					JSProXSobelLow[k][i]++;
				}
			}
		}

		//更新临时背景,即上一佂图像保存,用于计算佂间差
		pImageBKTemp=JSFrameBKTemp[2*JSgFrameCounter+k];
		for(j=JSy_up;j<JSy_down;j++)
			for(i=JSx_left;i<JSx_right;i++)
			{
				//pImageBKTemp2[j*TWIDTH+i]=pImageBKTemp[j*TWIDTH+i];
				pImageBKTemp[(j-JSy_up)*TWIDTH+i]=pImageCur[j*TWIDTH+i];
			}

		if(framenum==8)
		{
			UpdateBackGround(pImageCur,pImageBK,JSx_left,JSx_right,JSy_up,JSy_down,0);
		}

	}
	JSgFrameCounter++;
	if(JSgFrameCounter>9)JSgFrameCounter=0;//循环
}