-
Notifications
You must be signed in to change notification settings - Fork 0
/
fonctions.h
203 lines (121 loc) · 5.81 KB
/
fonctions.h
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#ifndef FONCTIONS_H
#define FONCTIONS_H
// Structures Pixe, Aretes et Sommet
typedef struct {
int R;
int G;
int B;
} Pixel;
typedef struct {
double arete_haut;
double arete_bas;
double arete_droite;
double arete_gauche;
double arete_haut_droit;
double arete_haut_gauche;
double arete_bas_droit;
double arete_bas_gauche;
} Aretes;
typedef struct {
Pixel *pixel1;
Pixel *pixel2;
Aretes *aretes;
int x;
int y;
} Sommet;
// Structure Element et File
typedef struct element {
Sommet* valeur;
struct element *suivant;
} Element;
typedef struct {
Element *premier;
} File;
//Fonction qui enfile un element dans une file
void Enfiler(File *file, Sommet *sommet);
// Fonction qui defile une file
Sommet* Defiler(File *file);
// Fonction qui initialise une file
File *InitialisationFile(void);
// Fonction delta
double delta(Pixel p1, Pixel p2);
// Fonction qui calcule la capacite des aretes
double CapaF(Pixel p11, Pixel p21, Pixel p12, Pixel p22);
//Fonction qui construit les aretes entre les deux images
Aretes *ConstructionAretes(int i, int j, int h, int l, Pixel I1[h][l], Pixel I2[h][l]);
// Fonction qui libere l'espace occupe par les aretes du graphe
void LibererAretesGraphe(int i, int j, int h, int l, Sommet graphe[h][l]);
// Fonction qui affiche la capacite des aretes entre deux images A ENLEVER
void AfficherAretes(Aretes *aretes);
// Fonction qui met les pixels d'une image/masque dans un tableau
void RemplirTableau(int h, int l, Pixel tab[h][l], FILE *image);
// Fonction qui cree le graphe
void CreationGraphe(int h, int l, Pixel I1[h][l], Pixel I2[h][l], Sommet graphe[h][l]);
// Fonction qui initialise un pixel test
Pixel *InitialisationpixelNeutre();
// Fonction qui initialise les ensembles S et T avec un masque
void InitialisationAvecMasque(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], Pixel M[h][l], Pixel *pixel_neutre);
// Fonction qui initialise les ensembles S et T avec un point aleatoire
void InitialisationAleatoire(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], Pixel *pixel_neutre);
// Fonction qui initialise les ensembles S et T sur les bords
void InitialisationBords(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], Pixel *pixel_neutre);
// Fonction qui initialise l'ensemble S sur un bord et T aleatoirement
void InitialisationBordEtAleatoire(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], Pixel *pixel_neutre);
// Fonction qui initialise a 0 toutes les cases d'un tableau
void Zero(int h, int l, int tableau[h][l]);
// Fonction qui place les sommets de S dans la file
void SommetsDepartDansFile(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], int visite[h][l], int dans_file[h][l], Pixel *pixel_neutre, File *queue);
// Fonction pour le parcours en largeur : place les voisins du sommet depile dans la queue
void EnfilerVoisins(Sommet *actuel, int h, int l, Sommet graphe[h][l], int visite[h][l], int dans_file[h][l], File *queue);
// Fonction qui compte le nombre de pixels dans un tableau
int NombrePixelsDansTableau(int h, int l, Pixel *tab[h][l], Pixel *pixel_neutre);
// Fonction du parcours en largeur
void ParcoursEnLargeur(int h, int l, Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], int visite[h][l], Pixel *pixel_neutre);
// Fonction qui cree le tableau contenant S et T a la fin d'un parcours
void CreationTableauFinal(int h, int l, Pixel *final[h][l], Sommet graphe[h][l], Pixel *S[h][l], Pixel *T[h][l], int visite[h][l], Pixel *pixel_neutre);
// Fonction qui cree l'image de sortie
void CreationImageFinal(char *nom_image, int h, int l, Pixel *final[h][l]);
// Fonction de floutage sur un pixel
void FlouPixel(int i, int j, int h, int l, Sommet graphe[h][l], int visite[h][l], Pixel *final[h][l]);
// Fonction de floutage qui module la distance
void Flou(int h, int l, Sommet graphe[h][l], int visite[h][l], Pixel *final[h][l]);
// Fonctions et structures pour l'algorithme de karger
//Structures Cellule et Liste
typedef struct cellule {
double arete;
int coord_x;
int coord_y;
struct cellule *suivant;
} Cellule;
typedef struct {
Cellule *premier;
} Liste;
// Fonction qui initialise une Liste
Liste *InitialisationListe();
// Fonction qui insere un nouvel element dans une Liste
void Insertion(Liste *liste, double arete, int i, int j);
// Fonction qui cree un tableai contenant une liste chainee des aretes de chaque sommet
void CreationVoisins(int h, int l, Liste *voisins[h][l], Sommet graphe[h][l]);
// Structures CelluleSommet et ListeSommets permettant de creer une liste de sommets
typedef struct cellulesommet {
Sommet *sommetcellule;
int coord2_x;
int coord2_y;
struct cellulesommet *suivant;
} CelluleSommet;
typedef struct {
CelluleSommet *tete;
} ListeSommets;
// Fonction qui initialise une liste de sommets
ListeSommets *InitialisationListeSommets(void);
// Fonction qui insere un sommet dans une liste de sommets
void InsertionSommet(ListeSommets *liste, Sommet *sommet, int i, int j);
// Fonction qui supprime l'arete dont les coordonnées sont i et j dans la liste d'aretes de u
void SupprimerArete(int h, int l, int x, int y, Liste *voisins[h][l],int i, int j);
// Fonction qui contracte deux sommets
void Contraction(int h, int l, Sommet u, Sommet v, Sommet graphe[h][l], Liste *voisins[h][l], ListeSommets *tab_liste_sommets[h][l]);
// Fonction qui compte les sommets qui sont encore contractables qui sont mis en 0
int CompterSommetsContractables( int h, int l, int sommets_contractes[h][l]);
// Fonction qui effectue l'algorithme de Karger
void Karger(int h, int l, int sommets_contractes[h][l], Liste *voisins[h][l], Sommet graphe[h][l], Pixel *final[h][l]);
#endif