/*************************************************************************************************************************************/ /* */ /* D O N N E E S C O M M U N E S D ' I M A G E S D E T Y P E ' char ' P O U R */ /* L ' E T U D E D E L A C O M P L E X I T E S T R U C T U R E L L E : */ /* */ /* */ /* Author of '$xrC/images_1octet.01$vv$I' : */ /* */ /* Jean-Francois Colonna (LACTAMME, 20130504120645). */ /* */ /*************************************************************************************************************************************/ #define TYPE_OCTET /* Introduit le 20130730102143... */ #ifndef STORE_IMAGE_PLAN /* Cas des images de type 'char' : */ # define dimXb \ dimX # define DimImages \ gMUL2(dimX,dimY) \ /* Dimension introduit le 20140116110716... */ # define IMAGE_TEMPORAIRE_1 \ TypeImage DEFINITION_IMAGE(imageT1,dimY,dimX) \ /* Introduit le 20140113143958... */ # include "images.01.vv.I" TypeImage DEFINITION_IMAGE(image,dimY,dimX); # define gLOAD_IMAGE_PLAN(image,x,y) \ INDEXATION_IMAGE(image,y,x) # define gLOAD_IMAGE_TORE(image,x,y) \ gLOAD_IMAGE_PLAN(image \ ,ADD2(REST(ADD2(REST(SOUS(x,Xmin),dimX),dimX),dimX),Xmin) \ ,ADD2(REST(ADD2(REST(SOUS(y,Ymin),dimY),dimY),dimY),Ymin) \ ) /* Definitions introduites le 20130730092749... */ # define gLOAD_IMAGE_PLAN_BIT_OCTET(image,x,y) \ gLOAD_IMAGE_PLAN(image,x,y) # define gLOAD_IMAGE_TORE_BIT_OCTET(image,x,y) \ gLOAD_IMAGE_TORE(image,x,y) /* Definitions introduites le 20130730104256... */ # define LOAD_IMAGE_PLAN(x,y) \ gLOAD_IMAGE_PLAN(image,x,y) # define LOAD_IMAGE_TORE(x,y) \ gLOAD_IMAGE_TORE(image,x,y) /* Definitions introduites le 20130730092749... */ # define LOAD_IMAGE_PLAN_BIT_OCTET(x,y) \ gLOAD_IMAGE_PLAN(image,x,y) # define LOAD_IMAGE_TORE_BIT_OCTET(x,y) \ gLOAD_IMAGE_TORE(image,x,y) /* Definitions introduites le 20130730103057... */ # define gTRANSFORMATION_NIVEAU(x,y,niveauA,niveauR) \ COND(niveauA==NOIR \ ,niveauA \ ,niveauR \ ) \ /* Definition introduite le 20130904075353... */ # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_01 TypeImage niveau_aleatoire_courant=NOIR; /* Niveau destine a remplacer les niveaux non NOIRs et qui est incremente d'une unite */ /* avant chaque 'gSTORE_IMAGE_PLAN(...)' de facon a n'etre jamais lui-meme NOIR... */ # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND((niveau_aleatoire_courant==BLANC) \ ,(niveau_aleatoire_courant=ADD2(NOIR,1)) \ ,(niveau_aleatoire_courant=ADD2(niveau_aleatoire_courant,1)) \ ) \ ) \ /* Definition introduite le 20130902145025... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_02 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)ADD2(x,y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)ADD2(x,y) \ ) \ ) \ /* Definition introduite le 20130903150219... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_12 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)ADD2(x,y) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_03 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)MUL2(x,y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)MUL2(x,y) \ ) \ ) \ /* Definition introduite le 20130903150219... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_13 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)MUL2(x,y) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_04 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)(x))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)(x) \ ) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_14 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)(x) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_05 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)(y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)(y) \ ) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_15 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)(y) \ ) \ /* Definition introduite le 20130904075353... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_06 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)MUL2(x,y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)OUEX(x,y) \ ) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_16 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)OUEX(x,y) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_07 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)MUL2(x,y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)OUIN(x,y) \ ) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_17 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)OUIN(x,y) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_08 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,COND(((TypeImage)MUL2(x,y))==NOIR \ ,ADD2(NOIR,1) \ ,(TypeImage)ETLO(x,y) \ ) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_18 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)ETLO(x,y) \ ) \ /* Definition introduite le 20150820212758... */ # else # endif # ifdef ENRICHIR_LES_NIVEAUX_NON_NOIRS__METHODE_09 # define TRANSFORMATION_NIVEAU(x,y,niveau) \ gTRANSFORMATION_NIVEAU(x,y \ ,niveau \ ,(TypeImage)SOUS(x,y) \ ) \ /* Definition introduite le 20150909130905... */ # else # endif # ifdef QUANTIFIER_LES_NIVEAUX___METHODE_01 # ifndef QUANTIFICATEUR # define QUANTIFICATEUR \ (1) # else # endif int quantificateur=QUANTIFICATEUR; double renormalisateur=gDIVI((double)BLANC,(double)gMUL2(gDIVI(BLANC,QUANTIFICATEUR),QUANTIFICATEUR)); /* Le renormalisateur introduit le 20130910144143 permet de garantir l'acces a 'BLANC'... */ # define TRANSFORMATION_NIVEAU(x,y,niveau) \ MUL2(renormalisateur,MUL2(DIVI(niveau,quantificateur),quantificateur)) \ /* Definition introduite le 20130909143521... */ # else # endif # ifndef TRANSFORMATION_NIVEAU # define TRANSFORMATION_NIVEAU(x,y,niveau) \ (niveau) \ /* Definition introduite le 20130902142725... */ # else # endif # ifdef DUPLICATION_POINT__METHODE_01 # ifndef DELTA_X # define DELTA_X \ (0) # else # endif # ifndef DELTA_Y # define DELTA_Y \ (0) # else # endif int delta_X=DELTA_X; int delta_Y=DELTA_Y; # define DUPLICATION_POINT(sequence_rangement_point) \ { \ int Xpave=Xplan; \ int Ypave=Yplan; \ { \ int Xplan; \ int Yplan; \ \ for (Xplan=(Xpave-delta_X) ; Xplan <= (Xpave+delta_X) ; Xplan++) \ { \ for (Yplan=(Ypave-delta_Y) ; Yplan <= (Ypave+delta_Y) ; Yplan++) \ { \ if ( ((Xplan >= Xmin) && (Xplan <= Xmax)) \ && ((Yplan >= Ymin) && (Yplan <= Ymax)) \ ) \ { \ sequence_rangement_point \ } \ else \ { \ } \ } \ } \ } \ } \ /* Definition introduite le 20130916143624... */ # else # endif # ifndef DUPLICATION_POINT # define DUPLICATION_POINT(sequence_rangement_point) \ { \ sequence_rangement_point \ } \ /* Definition introduite le 20130916143153... */ # else # endif # define gSTORE_IMAGE_PLAN(image,x,y,niveau) \ { \ int Xplan=x; \ int Yplan=y; \ /* Les variables {Xplan,Yplan} ont ete introduites le 20130916143624 a cause de la */ \ /* procedure 'DUPLICATION_POINT(...)' afin de pouvoir les redefinir explicitement et */ \ /* et donc de pouvoir iterer dessus a l'interieur de 'DUPLICATION_POINT(...)'... */ \ \ DUPLICATION_POINT(INDEXATION_IMAGE(image,Yplan,Xplan) = TRANSFORMATION_NIVEAU(Xplan,Yplan,niveau);) \ } # define gSTORE_IMAGE_TORE(image,x,y,niveau) \ { \ int Xtore=ADD2(REST(ADD2(REST(SOUS(x,Xmin),dimX),dimX),dimX),Xmin); \ int Ytore=ADD2(REST(ADD2(REST(SOUS(y,Ymin),dimY),dimY),dimY),Ymin); \ \ gSTORE_IMAGE_PLAN(image,Xtore,Ytore,niveau); \ /* L'espace [Xmin,Xmax]x[Ymin,Ymax] est torique et ce afin de garantir le nombre de points */ \ /* marques dans une image (introduit le 20130505091302). On notera le double 'REST(...)' */ \ /* destine a garantir que le calcul donne un nombre positif... */ \ } # define STORE_IMAGE_PLAN(x,y,niveau) \ { \ gSTORE_IMAGE_PLAN(image,x,y,niveau); \ } # define STORE_IMAGE_TORE(x,y,niveau) \ { \ gSTORE_IMAGE_TORE(image,x,y,niveau); \ } # define ACCES_IMAGE_REELLE(nom_de_l_image_reelle) \ /* On notera que 'image_reelle' ne peut etre un argument ci-dessus a cause de l'usage de */ \ /* cette procedure 'ACCES_IMAGE_REELLE(...)' dans 'MAIN(...)' qui n'autorise pas la */ \ /* presence de virgules a l'interieur de son argument... */ \ { \ FILE *Fdescripteur; \ \ Fdescripteur = fopen(nom_de_l_image_reelle,"r"); \ fread(image_reelle,1,GDimImages,Fdescripteur); \ /* Le 20140127115547, 'GDimImages' a remplace 'DimImages' par "symetrie" avec ce qui */ \ /* est fait dans 'v $xrC/images_1bit.01$vv$I GDimImages'... */ \ \ INITIALISATION_IMAGE(image_reelle[((y-Ymin)*dimX) + (x-Xmin)]); \ } \ /* Procedure introduite le 20130626112654... */ # define ACCES_IMAGE_SYNTHETIQUE(nom_de_l_image_synthetique) \ { \ ACCES_IMAGE_REELLE(nom_de_l_image_synthetique); \ } \ /* Procedure introduite le 20150128100429... */ # ifdef NE_PAS_SORTIR_LE_FICHIER_IMAGE # define SORTIE_DU_FICHIER_IMAGE \ { \ } # else # define SORTIE_DU_FICHIER_IMAGE \ { \ CONVOLUTION_IMAGE; \ TRANSFORMATION_IMAGE; \ /* Les transformations ont ete introduites le 20140113114557... */ \ \ write(STDOUT,image,DimImages); \ } # endif #else /* Cas des images de type 'bit'... */ #endif