ImagePulser V5.2.4
Simplification des images prises avec une webcam
Chargement...
Recherche...
Aucune correspondance
Référence du fichier /Users/vasilisskarleas/Library/Mobile Documents/com~apple~CloudDocs/Documents/University Sorbonne/3rd year/S6/c-project-rob-3-eleves-gr-2-1/Imagination/contour.c

Implémentation des fonctions de gestion d'un robot pour le tracé de contours dans une image. Plus de détails...

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <stdbool.h>
#include "geometry.h"
#include "contour.h"
#include "image.h"
Graphe des dépendances par inclusion de contour.c:

Fonctions

void init_robot (Robot *r, int x, int y, Orientation o)
 Initialise un robot avec les coordonnées et l'orientation spécifiées.
 
void move_forward (Robot *r)
 Déplace le robot d'une position en avant selon son orientation.
 
void turn_left (Robot *r)
 Oriente le robot de 90 degrés vers la gauche par rapport à sa direction actuelle.
 
void turn_right (Robot *r)
 Oriente le robot de 90 degrés vers la droite par rapport à sa direction actuelle.
 
void position (Robot *r, int *x, int *y)
 Récupère et renvoie la position actuelle du robot.
 
int abscissa (Robot *r)
 Renvoie la coordonnée x de la position actuelle du robot.
 
int ordinate (Robot *r)
 Renvoie la coordonnée y de la position actuelle du robot.
 
Orientation orient (Robot *r)
 Renvoie l'orientation actuelle du robot.
 
void position_forward (Robot *r, int *x, int *y)
 Calcule la position du pixel situé directement devant le robot.
 
void new_orientation (Robot *r, int x, int y, Image I)
 Détermine la nouvelle orientation du robot basée sur les pixels voisins.
 
Point find_departure_pixel (Image I)
 Identifie le pixel de départ pour le tracé de contours dans une image.
 
Image mask_image (Image I)
 Crée un masque de l'image identifiant le début des contours.
 
bool image_white (Image I)
 Vérifie si une image est entièrement blanche.
 
Contour algo_contour (Image I, char *file_name, char *repository)
 Génère un contour à partir de l'image donnée et enregistre les points du contour dans un file_input texte.
 
Liste_Contours algo_contours (Image I)
 Renvoie la liste de tous les contours détectés dans une image.
 
void pbm_contour_to_txt (Liste_Contours c, char *file_name, char *repository)
 Enregistre les points de contour d'une image PBM dans un file_input texte.
 
void contours_data (Liste_Contours c)
 Affiche le nombre total de segments et de contours d'une liste de contours.
 
void contours_data_simplification (Liste_Contours c)
 Simplifie les données de contours pour l'affichage ou l'analyse.
 
void contours_data_bezier (Liste_Contours c)
 Affiche le nombre de courbes de Bézier de degré 2 pour chaque contour.
 
void contours_data_bezier3 (Liste_Contours c)
 Affiche le nombre de courbes de Bézier de degré 3 pour chaque contour.
 
void create_postscript (Contour c, char *file_name, int height, int width)
 Crée un file_input .eps représentant le contour donné en utilisant la méthode de simplification par segment (trait).
 
void create_postscript_fill (Contour c, char *file_name, int height, int width)
 Crée un file_input .eps avec remplissage pour le contour donné.
 
void create_postscript_contours (Liste_Contours c, char *file_name, int height, int width, char *repository)
 Génère un file_input .eps pour chaque contour de la liste, en utilisant la méthode de remplissage.
 
Contour simplification_douglas_peucker (Tableau_Point T, int j1, int j2, double d)
 Simplifie de manière récursive un contour en utilisant l'algorithme de Douglas Peucker.
 
Point calcul_ct_bezier2 (Bezier2 b2, double t)
 Calcule un point sur une courbe de Bézier de degré 2.
 
Point calcul_ct_bezier3 (Bezier3 b3, double t)
 Calcule un point sur une courbe de Bézier de degré 3.
 
Bezier3 conversion_bezier2_to_bezier3 (Bezier2 b2)
 Convertit une courbe de Bézier de degré 2 en une courbe de Bézier de degré 3.
 
Bezier2 bezier2_approximation (Contour c, int j1, int j2)
 Approxime un contour par une courbe de Bézier de degré 2. La fonction calcule les points de contrôle optimaux pour la courbe.
 
double distance_point_bezier2 (Point P1, Bezier2 b2, double ti)
 Calcule la distance entre un point et une courbe de Bézier de degré 2 à un paramètre t spécifique.
 
Contour simplification_douglas_peucker_bezier2 (Contour C, int j1, int j2, double d)
 Applique la méthode de simplification de Douglas-Peucker à une approximation de Bézier de degré 2.
 
void create_postscript_contours_bezier2 (Liste_Contours c, char *file_name, int height, int width, char *repository)
 Création d'un file_input PostScript pour les contours représentés par des courbes de Bézier de degré 2. Cette fonction génère un file_input .eps qui contient les instructions pour dessiner les contours avec des courbes de Bézier.
 
Bezier3 bezier3_approximation (Contour c, int j1, int j2)
 Approximation d'un contour par une courbe de Bézier de degré 3. Cette fonction calcule les points de contrôle pour une courbe de Bézier de degré 3 basée sur les points du contour donné.
 
double distance_point_bezier3 (Point P1, Bezier3 b3, double ti)
 Calcule la distance entre un point donné et une courbe de Bézier de degré 3 à un paramètre t spécifique.
 
Contour simplification_douglas_peucker_bezier3 (Contour C, int j1, int j2, double d)
 Simplification directe par approximation des contours vers courbes de Bézier de degré 3.
 
void create_postscript_contours_bezier3 (Liste_Contours c, char *file_name, int height, int width, char *repository)
 Création du file_input EPS pour liste des contours simplifiés par la méthode des courbes de Bézier de degré 3.
 

Description détaillée

Implémentation des fonctions de gestion d'un robot pour le tracé de contours dans une image.

Ce file_input contient les définitions des fonctions nécessaires pour initialiser et manipuler un robot chargé de lire et suivre les contours dans une image de type PBM (Portable Bitmap).

Documentation des fonctions

◆ abscissa()

int abscissa ( Robot * r)

Renvoie la coordonnée x de la position actuelle du robot.

Récupère la coordonnée x de la position actuelle du robot.

Paramètres
rPointeur vers la structure Robot.
Renvoie
La position x actuelle du robot.

◆ algo_contour()

Contour algo_contour ( Image I,
char * file_name,
char * repository )

Génère un contour à partir de l'image donnée et enregistre les points du contour dans un file_input texte.

Calcule et extrait les contours d'une image.

Paramètres
IImage à partir de laquelle le contour est généré.
file_nameNom du file_input où les points du contour seront sauvegardés.
repositoryChemin du répertoire où le file_input sera stocké.
Renvoie
Contour Liste des points formant le contour.

Identifie le pixel de départ pour le contour, initialise un robot à cette position et trace le contour en suivant les changements d'orientation du robot.

◆ algo_contours()

Liste_Contours algo_contours ( Image I)

Renvoie la liste de tous les contours détectés dans une image.

Extrait tous les contours d'une image.

Paramètres
IImage à analyser.
Renvoie
Liste_Contours Liste de tous les contours trouvés.

Cette fonction applique un masque pour isoler les contours dans l'image et les trace en utilisant un robot suivant un algorithme de suivi de bordure.

◆ bezier2_approximation()

Bezier2 bezier2_approximation ( Contour c,
int j1,
int j2 )

Approxime un contour par une courbe de Bézier de degré 2. La fonction calcule les points de contrôle optimaux pour la courbe.

Approxime un contour par une courbe de Bézier de degré 2.

Paramètres
cContour initial.
j1Index de début du segment du contour.
j2Index de fin du segment du contour.
Renvoie
Bezier2 Courbe de Bézier de degré 2 approchée.

◆ bezier3_approximation()

Bezier3 bezier3_approximation ( Contour c,
int j1,
int j2 )

Approximation d'un contour par une courbe de Bézier de degré 3. Cette fonction calcule les points de contrôle pour une courbe de Bézier de degré 3 basée sur les points du contour donné.

Approxime un contour par une courbe de Bézier de degré 3.

Paramètres
cContour à approximer.
j1Index de début du segment du contour.
j2Index de fin du segment du contour.
Renvoie
Bezier3 Courbe de Bézier de degré 3 résultante.

◆ calcul_ct_bezier2()

Point calcul_ct_bezier2 ( Bezier2 b2,
double t )

Calcule un point sur une courbe de Bézier de degré 2.

Calcule le point sur une courbe de Bézier de degré 2.

Paramètres
b2Courbe de Bézier de degré 2.
tParamètre de la courbe (0 <= t <= 1).
Renvoie
Point sur la courbe de Bézier au paramètre t.

◆ calcul_ct_bezier3()

Point calcul_ct_bezier3 ( Bezier3 b3,
double t )

Calcule un point sur une courbe de Bézier de degré 3.

Calcule le point sur une courbe de Bézier de degré 3.

Paramètres
b3Courbe de Bézier de degré 3.
tParamètre de la courbe (0 <= t <= 1).
Renvoie
Point sur la courbe de Bézier au paramètre t.

◆ contours_data()

void contours_data ( Liste_Contours c)

Affiche le nombre total de segments et de contours d'une liste de contours.

Affiche les données des contours sur le terminal.

Paramètres
cListe des contours à analyser.

Calcule et affiche le nombre total de segments formés entre les points de chaque contour.

◆ contours_data_bezier()

void contours_data_bezier ( Liste_Contours c)

Affiche le nombre de courbes de Bézier de degré 2 pour chaque contour.

Affiche des informations sur les courbes de Bézier pour les contours sur le terminal.

Paramètres
cListe de contours à évaluer.

Calcule et affiche le nombre de segments transformés en courbes de Bézier de degré 2.

◆ contours_data_bezier3()

void contours_data_bezier3 ( Liste_Contours c)

Affiche le nombre de courbes de Bézier de degré 3 pour chaque contour.

Affiche des informations sur les courbes de Bézier de degré 3 sur le terminal.

Paramètres
cListe de contours à évaluer.

Calcule et affiche le nombre de segments transformés en courbes de Bézier de degré 3.

◆ contours_data_simplification()

void contours_data_simplification ( Liste_Contours c)

Simplifie les données de contours pour l'affichage ou l'analyse.

Affiche les données des contours simplifiés sur le terminal.

Paramètres
cListe des contours à traiter.

Utilisé pour simplifier la représentation des contours, par exemple en réduisant le nombre de points.

◆ conversion_bezier2_to_bezier3()

Bezier3 conversion_bezier2_to_bezier3 ( Bezier2 b2)

Convertit une courbe de Bézier de degré 2 en une courbe de Bézier de degré 3.

Convertit une courbe de Bézier de degré 2 en une courbe de degré 3.

Paramètres
b2Courbe de Bézier de degré 2.
Renvoie
Bezier3 Courbe de Bézier de degré 3 résultante.

◆ create_postscript()

void create_postscript ( Contour c,
char * file_name,
int height,
int width )

Crée un file_input .eps représentant le contour donné en utilisant la méthode de simplification par segment (trait).

Génère un file_input EPS contenant la représentation graphique d'un contour en mode trait.

Paramètres
cContour à représenter.
file_nameNom du file_input de sortie.
heightHauteur du file_input de sortie.
widthLargeur du file_input de sortie.

Génère un file_input EPS avec les points du contour connectés par des lignes droites.

◆ create_postscript_contours()

void create_postscript_contours ( Liste_Contours c,
char * file_name,
int height,
int width,
char * repository )

Génère un file_input .eps pour chaque contour de la liste, en utilisant la méthode de remplissage.

Génère un file_input EPS pour une liste de contours donnés.

Paramètres
cListe des contours.
file_nameNom de base pour les file_inputs de sortie.
heightHauteur des file_inputs de sortie.
widthLargeur des file_inputs de sortie.
repositoryChemin du répertoire de sortie.

Chaque contour de la liste est transformé en un file_input .eps indépendant.

◆ create_postscript_contours_bezier2()

void create_postscript_contours_bezier2 ( Liste_Contours c,
char * file_name,
int height,
int width,
char * repository )

Création d'un file_input PostScript pour les contours représentés par des courbes de Bézier de degré 2. Cette fonction génère un file_input .eps qui contient les instructions pour dessiner les contours avec des courbes de Bézier.

Crée un file_input EPS pour des courbes de Bézier de degré 2.

Paramètres
cListe des contours à traiter.
file_nameNom du file_input de sortie sans l'extension.
heightHauteur de la zone de dessin.
widthLargeur de la zone de dessin.
repositoryChemin du répertoire où le file_input sera sauvegardé.

◆ create_postscript_contours_bezier3()

void create_postscript_contours_bezier3 ( Liste_Contours c,
char * file_name,
int height,
int width,
char * repository )

Création du file_input EPS pour liste des contours simplifiés par la méthode des courbes de Bézier de degré 3.

Crée un file_input EPS pour des courbes de Bézier de degré 3.

Cette fonction génère un file_input EPS qui contient la représentation des contours d'une image, simplifiés par des courbes de Bézier de degré 3. Elle sauvegarde chaque contour en utilisant les courbes de Bézier pour une représentation vectorielle précise.

Paramètres
cListe des contours à traiter.
file_nameNom du file_input pour la sauvegarde.
heightHauteur de l'image originale.
widthLargeur de l'image originale.
repositoryChemin du dossier où le file_input sera sauvegardé.

◆ create_postscript_fill()

void create_postscript_fill ( Contour c,
char * file_name,
int height,
int width )

Crée un file_input .eps avec remplissage pour le contour donné.

Génère un file_input EPS contenant la représentation graphique d'un contour en mode remplissage.

Paramètres
cContour à représenter.
file_nameNom du file_input de sortie.
heightHauteur du file_input de sortie.
widthLargeur du file_input de sortie.

Génère un file_input EPS avec les points du contour connectés par des lignes droites et le contour rempli.

◆ distance_point_bezier2()

double distance_point_bezier2 ( Point P1,
Bezier2 b2,
double ti )

Calcule la distance entre un point et une courbe de Bézier de degré 2 à un paramètre t spécifique.

Calcule la distance entre un point et une courbe de Bézier de degré 2.

Paramètres
P1Point à partir duquel mesurer la distance.
b2Courbe de Bézier de degré 2.
tiParamètre de la courbe de Bézier indiquant le point spécifique à mesurer.
Renvoie
double Distance calculée.

◆ distance_point_bezier3()

double distance_point_bezier3 ( Point P1,
Bezier3 b3,
double ti )

Calcule la distance entre un point donné et une courbe de Bézier de degré 3 à un paramètre t spécifique.

Calcule la distance entre un point et une courbe de Bézier de degré 3.

Paramètres
P1Point pour lequel calculer la distance.
b3Courbe de Bézier de degré 3.
tiValeur du paramètre t.
Renvoie
double Distance entre le point et la courbe.

◆ find_departure_pixel()

Point find_departure_pixel ( Image I)

Identifie le pixel de départ pour le tracé de contours dans une image.

Trouve les coordonnées du premier pixel noir avec un voisin blanc au-dessus.

Paramètres
IImage à analyser.
Renvoie
Point Coordonnées du pixel de départ trouvé dans l'image.

Cette fonction recherche le premier pixel noir ayant un voisin blanc dans l'image, ce qui indique le début d'un contour potentiel.

◆ image_white()

bool image_white ( Image I)

Vérifie si une image est entièrement blanche.

Vérifie si l'image est entièrement blanche.

Paramètres
IImage à vérifier.
Renvoie
bool Vrai si l'image est totalement blanche, faux sinon.

Cette fonction parcourt chaque pixel de l'image pour déterminer si tous sont blancs.

◆ init_robot()

void init_robot ( Robot * r,
int x,
int y,
Orientation o )

Initialise un robot avec les coordonnées et l'orientation spécifiées.

Initialise le robot à une position donnée avec une orientation spécifique.

Paramètres
rPointeur vers la structure Robot à initialiser.
xCoordonnée x de départ du robot.
yCoordonnée y de départ du robot.
oOrientation initiale du robot.

Cette fonction assigne la position et l'orientation initiales au robot. Elle prépare le robot à naviguer dans l'image selon les consignes qui lui seront ultérieurement fournies.

◆ mask_image()

Image mask_image ( Image I)

Crée un masque de l'image identifiant le début des contours.

Crée un masque de l'image mettant en évidence les pixels de départ pour les contours.

Paramètres
IImage originale à masquer.
Renvoie
Image Masque de l'image indiquant les départs de contours.

Cette fonction crée une image de masque indiquant les positions des pixels noirs qui sont des points de départ de contours.

◆ move_forward()

void move_forward ( Robot * r)

Déplace le robot d'une position en avant selon son orientation.

Avance le robot d'une position dans la direction de son orientation actuelle.

Paramètres
rPointeur vers la structure Robot.

Cette fonction modifie les coordonnées du robot en fonction de son orientation actuelle. Elle permet au robot de progresser d'une unité dans la direction vers laquelle il est orienté.

◆ new_orientation()

void new_orientation ( Robot * r,
int x,
int y,
Image I )

Détermine la nouvelle orientation du robot basée sur les pixels voisins.

Calcule la nouvelle orientation du robot en fonction de son environnement immédiat.

Paramètres
rPointeur vers le robot dont l'orientation doit être mise à jour.
xCoordonnée x du pixel actuel du robot.
yCoordonnée y du pixel actuel du robot.
IImage dans laquelle le robot opère.

Cette fonction ajuste l'orientation du robot en analysant les pixels voisins immédiats. Le robot pivote en fonction de la couleur des pixels adjacents pour suivre le contour dans l'image.

◆ ordinate()

int ordinate ( Robot * r)

Renvoie la coordonnée y de la position actuelle du robot.

Récupère la coordonnée y de la position actuelle du robot.

Paramètres
rPointeur vers la structure Robot.
Renvoie
La position y actuelle du robot.

◆ orient()

Orientation orient ( Robot * r)

Renvoie l'orientation actuelle du robot.

Récupère l'orientation actuelle du robot.

Paramètres
rPointeur vers la structure Robot.
Renvoie
L'orientation actuelle du robot sous forme de valeur énumérée.

◆ pbm_contour_to_txt()

void pbm_contour_to_txt ( Liste_Contours c,
char * file_name,
char * repository )

Enregistre les points de contour d'une image PBM dans un file_input texte.

Sauvegarde les contours extraits dans un file_input texte.

Paramètres
cListe des contours à enregistrer.
file_nameNom du file_input de sortie.
repositoryChemin du dossier où le file_input sera enregistré.

Crée un file_input texte pour chaque contour et y écrit les coordonnées des points.

◆ position()

void position ( Robot * r,
int * x,
int * y )

Récupère et renvoie la position actuelle du robot.

Récupère la position actuelle du robot.

Paramètres
rPointeur vers la structure Robot.
xPointeur vers la variable où sera stockée la position x actuelle.
yPointeur vers la variable où sera stockée la position y actuelle.

Cette fonction permet d'accéder aux coordonnées actuelles du robot.

◆ position_forward()

void position_forward ( Robot * r,
int * x,
int * y )

Calcule la position du pixel situé directement devant le robot.

Récupère la position de la case directement devant le robot.

Paramètres
rPointeur vers le robot dont on souhaite connaître la position devant.
xPointeur vers l'entier où stocker la coordonnée x du pixel devant le robot.
yPointeur vers l'entier où stocker la coordonnée y du pixel devant le robot.

Cette fonction calcule la position du pixel devant le robot en fonction de son orientation actuelle et met à jour les valeurs pointées par x et y avec les nouvelles coordonnées calculées.

◆ simplification_douglas_peucker()

Contour simplification_douglas_peucker ( Tableau_Point T,
int j1,
int j2,
double d )

Simplifie de manière récursive un contour en utilisant l'algorithme de Douglas Peucker.

Simplifie un contour en utilisant la méthode de simplification des segments de Douglas-Peucker.

Paramètres
TTableau de points du contour.
j1Index de début de l'intervalle à simplifier.
j2Index de fin de l'intervalle à simplifier.
dDistance seuil pour la simplification.
Renvoie
Contour Simplifié entre les indices j1 et j2.

Cet algorithme réduit le nombre de points dans un contour en préservant sa forme générale.

◆ simplification_douglas_peucker_bezier2()

Contour simplification_douglas_peucker_bezier2 ( Contour C,
int j1,
int j2,
double d )

Applique la méthode de simplification de Douglas-Peucker à une approximation de Bézier de degré 2.

Simplifie un contour par la méthode des courbes de Bézier de degré 2.

Paramètres
CContour à simplifier.
j1Indice de début de segment du contour.
j2Indice de fin de segment du contour.
dDistance seuil pour la simplification.
Renvoie
Contour Résultat de la simplification, potentiellement composé de plusieurs segments.

◆ simplification_douglas_peucker_bezier3()

Contour simplification_douglas_peucker_bezier3 ( Contour C,
int j1,
int j2,
double d )

Simplification directe par approximation des contours vers courbes de Bézier de degré 3.

Simplifie un contour par la méthode des courbes de Bézier de degré 3.

Cette fonction simplifie un contour en utilisant une approximation par une courbe de Bézier de degré 3, en appliquant l'algorithme de Douglas-Peucker pour calculer la distance entre les points du contour et la courbe de Bézier. Elle vise à réduire le nombre de points tout en conservant la forme générale du contour.

Paramètres
CContour à simplifier.
j1Indice de début du segment de contour à traiter.
j2Indice de fin du segment de contour à traiter.
dSeuil de distance pour la simplification.
Renvoie
Contour simplifié sous forme de points de Bézier de degré 3.

◆ turn_left()

void turn_left ( Robot * r)

Oriente le robot de 90 degrés vers la gauche par rapport à sa direction actuelle.

Tourne le robot à gauche (changement d'orientation).

Paramètres
rPointeur vers la structure Robot.

Cette fonction ajuste l'orientation du robot en tournant à gauche, ce qui modifie son orientation de 90 degrés dans le sens antihoraire.

◆ turn_right()

void turn_right ( Robot * r)

Oriente le robot de 90 degrés vers la droite par rapport à sa direction actuelle.

Tourne le robot à droite (changement d'orientation).

Paramètres
rPointeur vers la structure Robot.

Cette fonction ajuste l'orientation du robot en tournant à droite, ce qui modifie son orientation de 90 degrés dans le sens horaire.