示例#1
0
	void Multi2DHistogramAgent::operator() (const double val1, const double val2, const double val3) {
		if (val1 < min) return;
		else if (val1 > max) return;

		Histogram2DAgent* histo = FindHistogram(val1);
		histo->operator() (val2,val3);
		return;
	}
// Mean-shift iteration 
void CObjectTracker::FindNextLocation(UBYTE8 *frame)
{
  UBYTE8  iteration = 0;

  FLOAT32 *currentHistogram = new FLOAT32[HISTOGRAM_LENGTH];

  for (iteration=0; iteration<MEANSHIFT_ITARATION_NO; iteration++)
  {
	  FindHistogram(frame,currentHistogram); //current frame histogram
   
      FindWightsAndCOM(frame,currentHistogram);//derive weights and new location
   
      //FindHistogram(frame,currentHistogram);   //uptade histogram
   
      //UpdateInitialHistogram(currentHistogram);//uptade initial histogram
  }

  delete[] currentHistogram, currentHistogram = 0;
}
void CObjectTracker::ObjeckTrackerHandlerByUser(UBYTE8 *frame)
{
   m_cActiveObject = 0;

   if (m_sTrackingObjectTable[m_cActiveObject].Status)
   {
	   if (!m_sTrackingObjectTable[m_cActiveObject].assignedAnObject)
	   {
		   FindHistogram(frame,m_sTrackingObjectTable[m_cActiveObject].initHistogram);
           m_sTrackingObjectTable[m_cActiveObject].assignedAnObject = true;
	   }
	   else
	   {
		   FindNextLocation(frame);    

		   DrawObjectBox(frame);
	   }
   }

}
示例#4
0
//进行一次跟踪
void CObjectTracker::ObjeckTrackerHandlerByUser(IplImage *frame)
{
   m_cActiveObject = 0;

   if (m_sTrackingObjectTable[m_cActiveObject].Status)
   {
    if (!m_sTrackingObjectTable[m_cActiveObject].assignedAnObject)
    {
     //计算目标的初始直方图
     FindHistogram(frame,m_sTrackingObjectTable[m_cActiveObject].initHistogram);
           m_sTrackingObjectTable[m_cActiveObject].assignedAnObject = true;
    }
    else
    {
     //在图像上搜索目标
     FindNextLocation(frame);   

     DrawObjectBox(frame);
    }
   }

}
示例#5
0
void CObjectTracker::FindNextFixScale(IplImage *frame)
{
UBYTE8 iteration = 0;
SINT16 optX, optY;

FLOAT32 *currentHistogram = new FLOAT32[HISTOGRAM_LENGTH];
FLOAT32 dist, optdist=1.0;

for (iteration=0; iteration<MEANSHIFT_ITARATION_NO; iteration++)
{
   FindHistogram(frame,currentHistogram); //current frame histogram, use the last frame location as starting point
  
      FindWightsAndCOM(frame,currentHistogram);//derive weights and new location
  
      //FindHistogram(frame,currentHistogram);   //uptade histogram
  
      //UpdateInitialHistogram(currentHistogram);//uptade initial histogram
   if( ((dist=FindDistance(currentHistogram)) < optdist) || iteration==0 )
   {
    optdist=dist;
    optX=m_sTrackingObjectTable[m_cActiveObject].X;
    optY=m_sTrackingObjectTable[m_cActiveObject].Y;
//      printf("%f->", dist);
   }
   else //bad iteration, then find a better start point for next iteration
   {
   m_sTrackingObjectTable[m_cActiveObject].X=(m_sTrackingObjectTable[m_cActiveObject].X+optX)/2;
   m_sTrackingObjectTable[m_cActiveObject].Y=(m_sTrackingObjectTable[m_cActiveObject].Y+optY)/2;
   }
}//end for
m_sTrackingObjectTable[m_cActiveObject].X=optX;
m_sTrackingObjectTable[m_cActiveObject].Y=optY;
LastDist=optdist; //the latest distance
// printf("/n");

delete[] currentHistogram, currentHistogram = 0;
}