Esempio n. 1
0
 void visit_leaf_0_update(Leaf* self, Tree* children, unsigned int num_children) {
  printf("FTL:   visit  Leaf %s\n", "0");
  self->base.height_delta_0 = (leaf_height_delta_0(self->height_in_delta));
  printf("FTL:     leaf_height_delta_0 %s\n", to_string(self->base.height_delta));
  printf("FTL:         height_in_delta %s\n", to_string(self->height_in_delta));
  self->base.width_delta_0 = (leaf_width_delta_0(self->width_in_delta));
  printf("FTL:     leaf_width_delta_0 %s\n", to_string(self->base.width_delta));
  printf("FTL:         width_in_delta %s\n", to_string(self->width_in_delta));
  
      int height_old = self->base.height;
      self->base.height = (leaf_height(self->height_in, self->base.height_delta, height_old));
  printf("FTL:     leaf_height %s\n", to_string(self->base.height));
  printf("FTL:         height_in %s\n", to_string(self->height_in));
  printf("FTL:         height_delta_0 %s\n", to_string(self->base.height_delta));
  printf("FTL:         height_old_0 %s\n", to_string(height_old));
  
      int width_old = self->base.width;
      self->base.width = (leaf_width(width_old, self->base.width_delta, self->width_in));
  printf("FTL:     leaf_width %s\n", to_string(self->base.width));
  printf("FTL:         width_old_0 %s\n", to_string(width_old));
  printf("FTL:         width_delta_0 %s\n", to_string(self->base.width_delta));
  printf("FTL:         width_in %s\n", to_string(self->width_in));
  self->base.height_delta = (leaf_height_delta(self->base.height, height_old));
  printf("FTL:     leaf_height_delta %s\n", to_string(self->base.height_delta));
  printf("FTL:         height %s\n", to_string(self->base.height));
  printf("FTL:         height_old_0 %s\n", to_string(height_old));
  self->base.width_delta = (leaf_width_delta(width_old, self->base.width));
  printf("FTL:     leaf_width_delta %s\n", to_string(self->base.width_delta));
  printf("FTL:         width_old_0 %s\n", to_string(width_old));
  printf("FTL:         width %s\n", to_string(self->base.width));
 
 }
Esempio n. 2
0
//Adiciona caracteristicas da folha ao vetor de carcterísticas
void add_image_to_vector(char* address, char* image){
 
 //Carrega imagem da Folha
	IplImage* imagem = cvLoadImage(address,0);
 //Usa smooth para reduzir riscos ao lado da folha 
	cvSmooth(imagem, imagem, CV_GAUSSIAN, 5, 5, 5, 5);
 //Threshold da imagem da folha
	cvThreshold(imagem, imagem, 242, 242, CV_THRESH_BINARY); //sem enervamento

       /* !DEBUG */
          /*cvNamedWindow("DEBUG", 1);
          cvShowImage("DEBUG", imagem);
          cvWaitKey(-1);
          cvDestroyWindow("DEBUG");
        	cvReleaseImage(&imagem);*/
       /* !DEBUG */

  float height    = leaf_height(imagem);
  float width     = leaf_width(imagem);
  float area      = leaf_area(imagem);
  float perimeter = leaf_perimeter(imagem);

  char name[MAX_STRING_LENGTH];
  int position; 
  char trash;
 
  sscanf(image, "%s %i %c", name, &position, &trash);

  /* !DEBUG! printf("NAME: %s, POSITION: %i, TRASH: %c \n", name,position, trash); !DEBUG */

  strcpy(species[position].name, name);

  if (species[position].caracteristics[0] ==  0){
     species[position].caracteristics[0] =  height;
     species[position].caracteristics[1] =  width;
     species[position].caracteristics[2] =  area;
     species[position].caracteristics[3] =  perimeter;
  }
  else{
     species[position].caracteristics[0] =  (species[position].caracteristics[0] + height)/2;
     species[position].caracteristics[1] =  (species[position].caracteristics[1] +  width)/2;
     species[position].caracteristics[2] =  (species[position].caracteristics[2] +  area)/2;
     species[position].caracteristics[3] =  (species[position].caracteristics[3] +  perimeter)/2;
  }

}
Esempio n. 3
0
//Faz o reconhecimento da imagem a partir do vetor de características
int recognize(char* file){

 // puts("debug 1");

//Carrega imagem da Folha
	IplImage* imagem = cvLoadImage(file,0);
 //Usa smooth para reduzir riscos ao lado da folha 
	cvSmooth(imagem, imagem, CV_GAUSSIAN, 5, 5, 5, 5);
 //Threshold da imagem da folha
	cvThreshold(imagem, imagem, 242, 242, CV_THRESH_BINARY); //sem enervamento

  float best_choice = FLT_MAX - 1;
  int  i, result;
  float aux;
  float height    = leaf_height(imagem);
  float width     = leaf_width(imagem);
  float area      = leaf_area(imagem);
  float perimeter = leaf_perimeter(imagem);


  for (i = 0; i < MAX_SPECIES_VECTOR; i++) {
    aux = sqrt( 
                pow( (height - species[i].caracteristics[0]),2) + 
                pow( (width  - species[i].caracteristics[1]),2)  + 
                pow( (area   - species[i].caracteristics[2]),2) + 
                pow( (perimeter - species[i].caracteristics[3]),2));
    printf("Distancia %f\n", aux);

    if (aux < best_choice){
        best_choice = aux;
        result = i;
    }
  }

  printf("/nEssa folha pertence a espécie \"%s\"./n", species[result].name );

//  printf("/n%f/n",best_choice);
  return best_choice;
}