![]() |
ImagePulser V5.2.4
Simplification des images prises avec une webcam
|
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"
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. | |
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).
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.
r | Pointeur vers la structure Robot. |
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.
I | Image à partir de laquelle le contour est généré. |
file_name | Nom du file_input où les points du contour seront sauvegardés. |
repository | Chemin du répertoire où le file_input sera stocké. |
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.
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.
I | Image à analyser. |
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.
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.
c | Contour initial. |
j1 | Index de début du segment du contour. |
j2 | Index de fin du segment du contour. |
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.
c | Contour à approximer. |
j1 | Index de début du segment du contour. |
j2 | Index de fin du segment du contour. |
Calcule un point sur une courbe de Bézier de degré 2.
Calcule le point sur une courbe de Bézier de degré 2.
b2 | Courbe de Bézier de degré 2. |
t | Paramètre de la courbe (0 <= t <= 1). |
Calcule un point sur une courbe de Bézier de degré 3.
Calcule le point sur une courbe de Bézier de degré 3.
b3 | Courbe de Bézier de degré 3. |
t | Paramètre de la courbe (0 <= t <= 1). |
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.
c | Liste des contours à analyser. |
Calcule et affiche le nombre total de segments formés entre les points de chaque contour.
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.
c | Liste de contours à évaluer. |
Calcule et affiche le nombre de segments transformés en courbes de Bézier de degré 2.
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.
c | Liste de contours à évaluer. |
Calcule et affiche le nombre de segments transformés en courbes de Bézier de degré 3.
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.
c | Liste des contours à traiter. |
Utilisé pour simplifier la représentation des contours, par exemple en réduisant le nombre de points.
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.
b2 | Courbe de Bézier de degré 2. |
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.
c | Contour à représenter. |
file_name | Nom du file_input de sortie. |
height | Hauteur du file_input de sortie. |
width | Largeur du file_input de sortie. |
Génère un file_input EPS avec les points du contour connectés par des lignes droites.
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.
c | Liste des contours. |
file_name | Nom de base pour les file_inputs de sortie. |
height | Hauteur des file_inputs de sortie. |
width | Largeur des file_inputs de sortie. |
repository | Chemin du répertoire de sortie. |
Chaque contour de la liste est transformé en un file_input .eps indépendant.
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.
c | Liste des contours à traiter. |
file_name | Nom du file_input de sortie sans l'extension. |
height | Hauteur de la zone de dessin. |
width | Largeur de la zone de dessin. |
repository | Chemin du répertoire où le file_input sera sauvegardé. |
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.
c | Liste des contours à traiter. |
file_name | Nom du file_input pour la sauvegarde. |
height | Hauteur de l'image originale. |
width | Largeur de l'image originale. |
repository | Chemin du dossier où le file_input sera sauvegardé. |
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.
c | Contour à représenter. |
file_name | Nom du file_input de sortie. |
height | Hauteur du file_input de sortie. |
width | Largeur 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.
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.
P1 | Point à partir duquel mesurer la distance. |
b2 | Courbe de Bézier de degré 2. |
ti | Paramètre de la courbe de Bézier indiquant le point spécifique à mesurer. |
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.
P1 | Point pour lequel calculer la distance. |
b3 | Courbe de Bézier de degré 3. |
ti | Valeur du paramètre t. |
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.
I | Image à analyser. |
Cette fonction recherche le premier pixel noir ayant un voisin blanc dans l'image, ce qui indique le début d'un contour potentiel.
bool image_white | ( | Image | I | ) |
Vérifie si une image est entièrement blanche.
Vérifie si l'image est entièrement blanche.
I | Image à vérifier. |
Cette fonction parcourt chaque pixel de l'image pour déterminer si tous sont blancs.
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.
r | Pointeur vers la structure Robot à initialiser. |
x | Coordonnée x de départ du robot. |
y | Coordonnée y de départ du robot. |
o | Orientation 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.
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.
I | Image originale à masquer. |
Cette fonction crée une image de masque indiquant les positions des pixels noirs qui sont des points de départ de contours.
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.
r | Pointeur 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é.
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.
r | Pointeur vers le robot dont l'orientation doit être mise à jour. |
x | Coordonnée x du pixel actuel du robot. |
y | Coordonnée y du pixel actuel du robot. |
I | Image 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.
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.
r | Pointeur vers la structure Robot. |
Orientation orient | ( | Robot * | r | ) |
Renvoie l'orientation actuelle du robot.
Récupère l'orientation actuelle du robot.
r | Pointeur vers la structure Robot. |
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.
c | Liste des contours à enregistrer. |
file_name | Nom du file_input de sortie. |
repository | Chemin 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.
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.
r | Pointeur vers la structure Robot. |
x | Pointeur vers la variable où sera stockée la position x actuelle. |
y | Pointeur vers la variable où sera stockée la position y actuelle. |
Cette fonction permet d'accéder aux coordonnées actuelles du robot.
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.
r | Pointeur vers le robot dont on souhaite connaître la position devant. |
x | Pointeur vers l'entier où stocker la coordonnée x du pixel devant le robot. |
y | Pointeur 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.
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.
T | Tableau de points du contour. |
j1 | Index de début de l'intervalle à simplifier. |
j2 | Index de fin de l'intervalle à simplifier. |
d | Distance seuil pour la simplification. |
Cet algorithme réduit le nombre de points dans un contour en préservant sa forme générale.
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.
C | Contour à simplifier. |
j1 | Indice de début de segment du contour. |
j2 | Indice de fin de segment du contour. |
d | Distance seuil pour la simplification. |
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.
C | Contour à simplifier. |
j1 | Indice de début du segment de contour à traiter. |
j2 | Indice de fin du segment de contour à traiter. |
d | Seuil de distance pour la simplification. |
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).
r | Pointeur 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.
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).
r | Pointeur 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.