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)); }
//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; } }
//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; }