?>
Annote les images d'une table avec des métadonnées contenues dans cette même table. Cette action est fondamentale pour superposer des informations visuelles, telles que des boîtes englobantes, des lignes, des points ou des masques de segmentation, directement sur les images. C'est une étape cruciale dans les pipelines de vision par ordinateur pour la visualisation des résultats de détection d'objets, de segmentation sémantique ou d'autres analyses d'images.
| Paramètre | Description |
|---|---|
| annotations | Spécifie les annotations à réaliser par l'action. |
| casOut | Spécifie la table de sortie pour contenir les images annotées. |
| copyVars | Spécifie les variables à copier de la table d'entrée vers la table de sortie. |
| decode | Spécifie les paramètres liés au décodage des images avant l'annotation. |
| images | Spécifie la table d'images d'entrée à annoter. |
| annotationType | Définit le type d'annotation à appliquer : 'LINES' (lignes), 'POINTS' (points), 'PROTOBUF' (boîtes englobantes, polygones), ou 'SEGMENTATION' (masques). |
| representation | Définit comment les données d'annotation sont structurées dans la table d'entrée, généralement en spécifiant la colonne qui les contient. |
| colorMap | Pour 'SEGMENTATION', spécifie la palette de couleurs (par exemple, 'JET', 'HOT', 'COOL') à utiliser pour visualiser les masques. |
| transparency | Pour 'SEGMENTATION', définit le pourcentage de transparence (0-100) de la superposition du masque sur l'image originale. |
| thickness | Pour 'LINES', spécifie l'épaisseur de la ligne en pixels. |
| radius | Pour 'POINTS', spécifie le rayon du point en pixels. |
| r, g, b | Spécifient les valeurs des canaux Rouge, Vert et Bleu (0-255) pour définir la couleur des annotations comme les lignes ou les points. |
Ce bloc de code SAS crée une table CAS nommée `IMAGES_TO_ANNOTATE`. Il charge des images à partir d'un chemin spécifié (`/path/to/your/images/`) dans la caslib `CASUSER`. Cette table contiendra les images qui seront ensuite utilisées pour l'annotation. Assurez-vous que le chemin d'accès aux images est correct et que la caslib est active.
1 PROC casutil; load path="/path/to/your/images/" casout="IMAGES_TO_ANNOTATE" caslib="CASUSER"; QUIT;
Cet exemple simple montre comment annoter des images avec des points. Il suppose qu'une table `IMAGES_WITH_POINTS` existe et contient une colonne `_points_` avec les coordonnées des points à dessiner. L'action `annotateImages` lit cette table, dessine les points en rouge sur chaque image, et sauvegarde le résultat dans une nouvelle table `IMAGES_ANNOTATED_POINTS`.
| 1 | PROC CAS; image.annotateImages / TABLE={name="IMAGES_WITH_POINTS"} casout={name="IMAGES_ANNOTATED_POINTS", replace=true} annotations={{annotation={annotationType="POINTS", representation={representationType="SINGLE_COLUMN", columnName="_points_"}, r=255, radius=5}}}; RUN; QUIT; |
Cet exemple détaillé illustre comment superposer des masques de segmentation sur des images. Il utilise deux tables : une contenant les images originales (`MY_IMAGES`) et une autre contenant les masques de segmentation (`MY_MASKS`). L'action `annotateImages` fusionne ces deux sources, applique une palette de couleurs 'JET' aux masques avec une transparence de 50%, et sauvegarde les images annotées dans la table `IMAGES_ANNOTATED_SEGMENTATION`.
| 1 | PROC CAS; image.annotateImages / TABLE={name="MY_IMAGES"} casout={name="IMAGES_ANNOTATED_SEGMENTATION", replace=true} annotations={{annotation={annotationType="SEGMENTATION", image="mask_image_column", TABLE={name="MY_MASKS", caslib="CASUSER"}, colorMap="JET", transparency=50}}}; RUN; QUIT; |
Cet exemple montre comment dessiner des lignes sur des images. Il prend en entrée la table `IMAGES_WITH_LINES` qui doit contenir une colonne `_lines_` définissant les coordonnées des points de départ et d'arrivée de chaque ligne. L'action dessine des lignes bleues d'une épaisseur de 3 pixels et enregistre les images modifiées dans la table `IMAGES_ANNOTATED_LINES`.
| 1 | PROC CAS; image.annotateImages / TABLE={name="IMAGES_WITH_LINES"} casout={name="IMAGES_ANNOTATED_LINES", replace=true} annotations={{annotation={annotationType="LINES", representation={representationType="SINGLE_COLUMN", columnName="_lines_"}, b=255, thickness=3}}}; RUN; QUIT; |