void bifurcation(ImagePNG &originale, string numero)//calcul des bifurcations { const unsigned height=originale.height(); const unsigned width=originale.width(); int somme(0); for (unsigned i=1;i<height-1;i++) { for (unsigned j=1;j<width-1;j++) { if (originale[i][j]==PIXEL_BLACK) { if (compteur_proche(originale,i,j)==3) { originale[i][j]=PIXEL_BLUE; somme++; /* (originale[i+1][j]=PIXEL_BLUE); (originale[i][j+1]=PIXEL_BLUE); (originale[i-1][j]=PIXEL_BLUE); (originale[i][j-1]=PIXEL_BLUE); (originale[i-1][j-1]=PIXEL_BLUE); (originale[i+1][j-1]=PIXEL_BLUE); (originale[i+1][j+1]=PIXEL_BLUE); (originale[i-1][j+1]=PIXEL_BLUE); */ } } } } originale.save("bifurcation"+numero+".png"); }
void verif_minutie(ImagePNG &originale,string numero)//enleve le surplus de bifurc { const unsigned height=originale.height(); const unsigned width=originale.width(); for (unsigned i=9;i<height-9;i++) { for (unsigned j=9;j<width-9;j++) { if (originale[i][j]==PIXEL_BLUE) { if (!compteur_loin(originale,i,j)) { for (unsigned k=i-9;k<i+9;k++) { for (unsigned f=j-9;f<j+9;f++) { if (originale[k][f]==PIXEL_BLUE) { originale[k][f]=PIXEL_BLACK; } } } } } } } originale.save("bifurcation2"+numero+".png"); }
void terminaison(ImagePNG &originale)//pas sur les bords (qu'au milieu) { int somme(0); const unsigned height=originale.height(); const unsigned width=originale.width(); for (unsigned i=8;i<height-8;i++) { for (unsigned j=8;j<width-8;j++) { if (originale[i][j]==PIXEL_BLACK) { if ((compteur_proche(originale,i,j)==1)&&verif_not_bifurc(originale,i,j)) { somme++; originale[i][j]=PIXEL_RED; (originale[i+1][j]=PIXEL_RED); (originale[i][j+1]=PIXEL_RED); (originale[i-1][j]=PIXEL_RED); (originale[i][j-1]=PIXEL_RED); (originale[i-1][j-1]=PIXEL_RED); (originale[i+1][j-1]=PIXEL_RED); (originale[i+1][j+1]=PIXEL_RED); (originale[i-1][j+1]=PIXEL_RED); } } } } originale.save("terminaison.png"); }
void filtre (ImagePNG &gg, string numero)//filtre moyenneur { ImagePNG originale; originale=gg; int gris1,gris2,gris3,gris4,gris5,gris6,gris7,gris8,gris9,total; for (unsigned i=1;i<originale.height()-1;i++) { for (unsigned j=1;j<originale.width()-1;j++) { gris1=(originale[i+1][j].red()+originale[i+1][j].blue()+originale[i+1][j].green())/3; gris2=(originale[i-1][j].red()+originale[i-1][j].blue()+originale[i-1][j].green())/3; gris3=(originale[i][j-1].red()+originale[i][j-1].blue()+originale[i][j-1].green())/3; gris4=(originale[i][j+1].red()+originale[i][j+1].blue()+originale[i][j+1].green())/3; gris5=(originale[i-1][j-1].red()+originale[i-1][j-1].blue()+originale[i-1][j-1].green())/3; gris6=(originale[i+1][j-1].red()+originale[i+1][j-1].blue()+originale[i+1][j-1].green())/3; gris7=(originale[i+1][j+1].red()+originale[i+1][j+1].blue()+originale[i+1][j+1].green())/3; gris8=(originale[i-1][j+1].red()+originale[i-1][j+1].blue()+originale[i-1][j+1].green())/3; gris9=(originale[i][j].red()+originale[i][j].blue()+originale[i][j].green())/3; total=(gris1+gris2+gris3+gris4+gris5+gris6+gris7+gris8+gris9)/9; if (total<180) { gg[i][j]=PIXEL_BLACK; } else { gg[i][j]=PIXEL_WHITE; } } } gg.save("filtre"+numero+".png"); }
unsigned min_largeur( ImagePNG &originale)//calcule le xmin (cf rapport) { // remplace tous les pixels par des pixels blancs const unsigned height=originale.height(); const unsigned width=originale.width(); unsigned min(width); for (unsigned i=1;i<height-1;i++) { for (unsigned j=1;j<width-1;j++) { if (compteur_black(originale,i,j)>6) { if (min>j) { min=j; } } } } return min; }
void squelette( ImagePNG &copie, string numero)//applique toutes les conditions precedentes pour squelettiser { const unsigned height=copie.height(); const unsigned width=copie.width(); for (unsigned i=1;i<height-1;i++) { for (unsigned j=1;j<width-1;j++) { if (copie[i][j]!=PIXEL_WHITE) { if ( (premiere_conditions(copie,i,j))&&(deuxieme_condition(copie,i,j)) && ((troisieme_condition(copie,i,j))||(quatrieme_condition(copie,i,j))) && ((cinquieme_condition(copie,i,j))||(sixieme_condition(copie,i,j)))) { copie[i][j]=PIXEL_WHITE; } } } } copie.save("squelette"+numero+".png"); }
unsigned max_hauteur(ImagePNG &originale)//calcule le ymax (cf rapport) { // remplace tous les pixels par des pixels blancs const unsigned height=originale.height(); const unsigned width=originale.width(); unsigned max(0); for (unsigned i=height-2;i>1;i--) { for (unsigned j=width-2;j>1;j--) { if (compteur_black(originale,i,j)>6) { if(max<i) { max=i; } } } } return max; }
void filtre_median(ImagePNG &originale,string numero)//filtre median { int tab[8]; ImagePNG copie=originale; int gris1,gris2,gris3,gris4,gris5,gris6,gris7,gris8; for (unsigned i=1;i<originale.height()-1;i++) { for (unsigned j=1;j<originale.width()-1;j++) { gris1=(copie[i+1][j].red()+copie[i+1][j].blue()+copie[i+1][j].green())/3; gris2=(copie[i-1][j].red()+copie[i-1][j].blue()+copie[i-1][j].green())/3; gris3=(copie[i][j-1].red()+copie[i][j-1].blue()+copie[i][j-1].green())/3; gris4=(copie[i][j+1].red()+copie[i][j+1].blue()+copie[i][j+1].green())/3; gris5=(copie[i-1][j-1].red()+copie[i-1][j-1].blue()+copie[i-1][j-1].green())/3; gris6=(copie[i+1][j-1].red()+copie[i+1][j-1].blue()+copie[i+1][j-1].green())/3; gris7=(copie[i+1][j+1].red()+copie[i+1][j+1].blue()+copie[i+1][j+1].green())/3; gris8=(copie[i-1][j+1].red()+copie[i-1][j+1].blue()+copie[i-1][j+1].green())/3; tab[0]=gris1; tab[1]=gris2; tab[2]=gris3; tab[3]=gris4; tab[4]=gris5; tab[5]=gris6; tab[6]=gris7; tab[7]=gris8; tab[8]=(copie[i][j].red()+copie[i][j].blue()+copie[i][j].green())/3; tri_a_bulle(tab,8); if(tab[5]<120) { originale[i][j]=PIXEL_BLACK; } else originale[i][j]=PIXEL_WHITE; } } originale.save("filtre_median"+numero+".png"); }
void ecriture(ImagePNG &originale,float largeur, float hauteur, unsigned min_hauteur, unsigned min_largeur,unsigned max_largeur,unsigned max_hauteur,string numero)//ecris dans un fichier texte la signature de l'empreinte { string nom,nom_complet; int compteur(0); nom="ratio"+numero; nom_complet="touch "+nom+".txt"; system(nom_complet.c_str()); ofstream fichier(nom+".txt"); const unsigned height=originale.height(); const unsigned width=originale.width(); for (unsigned i=0;i<height;i++) { for (unsigned j=0;j<width;j++) { if ((originale[i][j]==PIXEL_BLUE))//+(originale[i][j]==PIXEL_RED)) { compteur++; fichier<<round(((i-min_hauteur)/hauteur)*1000)/1000<<" "<<round(((j-min_largeur)/largeur)*1000)/1000<<" "<<round(((max_hauteur-i)/hauteur)*1000)/1000<<" "<<round(((max_largeur-j)/largeur)*1000)/1000<<endl; } } } }