vector<Detection> NonMaximumSuppression::eliminateRedundantDetections(vector<Detection> candidates) const {
	if (overlapThreshold == 1.0) // with this threshold, there would be an endless loop - this check assumes distinct bounding boxes
		return candidates;
	sortByScore(candidates);
	vector<vector<Detection>> clusters = cluster(candidates);
	return getMaxima(clusters);
}
示例#2
0
文件: odile.c 项目: xzar/megauav2013
int deplacement_zero()
{
#ifdef DEBUG2
printf("entrer deplacement_zero odile.c\n");	
#endif

#ifdef DEBUGIA1
struct timeval start,stop,res;
#endif
	
	open_capture(0,160,120);
	if ( !capture ) 
	{
		fprintf( stderr, "ERROR: capture is NULL \n" );
		getchar();
		return -1;
	}
	//recuperation d une premiere image pour avoir les dimensions
	IplImage* frame = cvQueryFrame( capture );
	//recuperation des dimensions de l image
	CvSize taille = cvGetSize(frame);
	int tailleInt = taille.width * taille.height;

	//creation des image et matrices intermediaires
	IplImage* frameGray = cvCreateImage(taille,8,1);
	float* matriceGradX = malloc(sizeof(float)*tailleInt);
	float* matriceGradY = malloc(sizeof(float)*tailleInt);
	float* matriceHarris= malloc(sizeof(float)*tailleInt);
	float** tabHarris = (float **)malloc(sizeof(float*)*_NBHARRIS);
	float** tabHarrisPrec = (float **)malloc(sizeof(float*)*_NBHARRIS);
	char * imageData;
	int j;

	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarris[j]=(float*)malloc(sizeof(float)*3);
		
    }
	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarrisPrec[j]=(float*)malloc(sizeof(float)*3);
		
    }
	vecteur *tabVect = (vecteur*) malloc(sizeof(vecteur)*_NBHARRIS);
	vecteur vecteurMoy;
	vecteurMoy.x = 0; vecteurMoy.y=0;
	int nbVect = 0;
	
	
	
	while(status == MODE_AUTO)
	{
#ifdef DEBUGIA1	
gettimeofday(&start,NULL);
#endif
		//Recuperation de l image de la camera
		frame = cvQueryFrame( capture );
	
		if ( ! frame  )
		{
			fprintf( stderr, "ERROR: pas d'image\n" );
			return -1;
		}
		
		imageData = frameGray->imageData;

		
		//Passage en niveau de gris	
		RGBTOGRAY_1CANAL(frame, frameGray);

		
		//Sobel pour les gradients
		SobelHV(imageData,taille.height, taille.width, matriceGradX, matriceGradY);
		
		
		//Detecteur de Harris
		harris(matriceHarris, matriceGradX, matriceGradY, tailleInt);
	
		//Maxima de Harris
		getMaxima(matriceHarris, taille.height, taille.width, tabHarris, _NBHARRIS);
		
		
		//Matching des points pour trouver les vecteurs
		nbVect = calcul_vecteur_interet(tabHarrisPrec, tabHarris, _NBHARRIS, _SEUIL_DISTANCE, tabVect);
		
		
		//Moyenne des vecteurs
		calcul_moyenne_vecteur(tabVect, nbVect,&vecteurMoy);
		
		for(j=0;j<_NBHARRIS;j++)
  		{

			  tabHarrisPrec[j][0] = tabHarris[j][0];
			  tabHarrisPrec[j][1] = tabHarris[j][1];
			  tabHarrisPrec[j][2] = tabHarris[j][2];
		}
		
#ifdef DEBUGIA1		
		printf("nbVecteur Match = %d \nVecteur moyen  = %d %d\n",nbVect,vecteurMoy.x,vecteurMoy.y);
		gettimeofday(&stop,NULL);
		timersub(&stop, &start, &res);
		printf("time Harris= %d %d\n",(int)res.tv_sec, (int)res.tv_usec);
#endif

		pilote_IA(vecteurMoy,1000, 255);
				
	}

	cvReleaseCapture( &capture );

#ifdef DEBUG2
printf("FIN deplacement_zero odile.c\n");	
#endif
	return 0;


}
示例#3
0
文件: odile.c 项目: xzar/megauav2013
int prise_photo()
{
#ifdef DEBUG2
printf("entrer prise_photo odile.c\n");	
#endif

	struct timeval start,stop,res;

	open_capture(0,160,120);

	if ( !capture ) 
	{
		fprintf( stderr, "ERROR: capture is NULL \n" );
		getchar();
		return -1;
	}	

	//recuperation d une premiere image pour avoir les dimensions
	IplImage* frame = cvQueryFrame( capture );
	//recuperation des dimensions de l image
	CvSize taille = cvGetSize(frame);
	int tailleInt = taille.width * taille.height;
	
	//creation des image et matrices intermediaires

	IplImage* frameGray = cvCreateImage(taille,8,1);
	
	float* matriceGradX = malloc(sizeof(float)*tailleInt);
	float* matriceGradY = malloc(sizeof(float)*tailleInt);
	float* matriceHarris= malloc(sizeof(float)*tailleInt);
	float** tabHarris = (float **)malloc(sizeof(float*)*_NBHARRIS);
	char * imageData;
	char* buffer = (char*) malloc(sizeof(char)*20);
	int i=0,j;
	
	for(j=0;j<_NBHARRIS;j++)
    {
	   tabHarris[j]=(float*)malloc(sizeof(float)*3);	
    }

	while(i < 30)
	{
		
		//Recuperation de l image de la camera
		frame = cvQueryFrame( capture );
	
		if ( ! frame  )
		{
			fprintf( stderr, "ERROR: pas d'image\n" );
			return -1;
		}
		
		imageData = frameGray->imageData;

		gettimeofday(&start,NULL);
		//Passage en niveau de gris	
		RGBTOGRAY_1CANAL(frame, frameGray);
		
		//Sobel pour les gradients
		SobelHV(imageData,taille.height, taille.width, matriceGradX, matriceGradY);
				
		//Detecteur de Harris
		harris(matriceHarris, matriceGradX, matriceGradY, tailleInt);
	
		//Maxima de Harris
		getMaxima(matriceHarris, taille.height, taille.width, tabHarris, _NBHARRIS);
		for(j=0;j<_NBHARRIS;j++)
  		{
			
			Dessine_croix(imageData,taille.height, taille.width,tabHarris[j][1],tabHarris[j][0]);
		}		
		if(i > 19){
			sprintf(buffer,"image%d.jpg",i-19);
			cvSaveImage(buffer,frameGray,0);
		}
		i++;
		gettimeofday(&stop,NULL);
		timersub(&stop, &start, &res);
		printf("time Harris = %i,%d sec i= %d\n",(int)res.tv_sec, (int)res.tv_usec,i);
	}
	
	cvReleaseCapture( &capture );
	exit(0);
#ifdef DEBUG2
printf("sortie prise_photo odile.c\n");	
#endif
	return 0;
}