image annotateImages

Scénario Performance : Segmentation de Tumeurs sur un Grand Volume de Scanners

Scénario de test & Cas d'usage

Contexte Métier

Un institut de recherche médicale doit préparer un jeu de données de visualisation pour des milliers de scanners cérébraux. Un modèle de Deep Learning a déjà produit des masques de segmentation binaire pour chaque scanner, stockés dans une table séparée. Ce test valide la capacité de l'action à joindre et annoter un grand volume d'images avec des masques de segmentation, en appliquant une palette de couleurs et une transparence pour une meilleure visibilité.
À propos du Set : image

Traitement, manipulation et analyse d'images.

Découvrir toutes les actions de image
Préparation des Données

Crée deux tables CAS volumineuses : 'SCANNERS_ORIGINAUX' (simulant 10 000 images de scanners) et 'MASQUES_SEGMENTATION' (simulant les masques correspondants). Les colonnes '_image_' et '_mask_' sont laissées vides car on ne peut charger d'images, mais la structure et le volume des données sont représentatifs d'un cas d'usage réel. La jointure se fera sur la variable 'scan_id'.

Copié !
1DATA casuser.SCANNERS_ORIGINAUX (promote=yes) casuser.MASQUES_SEGMENTATION (promote=yes);
2 LENGTH scan_id $30 _image_ image _mask_ image;
3 DO i = 1 to 10000;
4 scan_id = 'SCAN_' || put(i, z8.);
5 /* La colonne _image_ serait normalement remplie par un load d'images */
6 OUTPUT casuser.SCANNERS_ORIGINAUX;
7 
8 /* La colonne _mask_ contiendrait l'image du masque de segmentation */
9 OUTPUT casuser.MASQUES_SEGMENTATION;
10 END;
11 stop;
12RUN;

Étapes de réalisation

1
Annotation des scanners en joignant la table d'images originales avec la table de masques. On applique une palette de couleur 'HOT' sur le masque avec une transparence de 40% pour voir le scanner original en dessous.
Copié !
1PROC CAS;
2 image.annotateImages /
3 TABLE={name='SCANNERS_ORIGINAUX'}
4 casOut={name='SCANNERS_SUPERPOSES', replace=true, label='Scanners avec masques de tumeur'}
5 annotations={{annotation={
6 annotationType='SEGMENTATION',
7 image='_mask_',
8 TABLE={name='MASQUES_SEGMENTATION', on={'scan_id'}},
9 colorMap='HOT',
10 transparency=40
11 }}}
12 images={id='scan_id', image='_image_'};
13RUN;
14QUIT;
2
Vérification que la table de sortie a été créée et contient le même nombre d'enregistrements que la table d'entrée, confirmant que l'opération à grande échelle a réussi.
Copié !
1 
2PROC CASUTIL;
3tableInfo caslib='CASUSER' name='SCANNERS_SUPERPOSES';
4QUIT;
5 

Résultat Attendu


L'action s'exécute avec succès sur les 10 000 enregistrements. Une table 'SCANNERS_SUPERPOSES' est créée, contenant les images originales des scanners sur lesquelles sont superposés les masques de segmentation. Les zones de tumeur (définies par les masques) apparaissent colorées selon la palette 'HOT' avec une transparence de 40%. Le test démontre la capacité de l'action à gérer une volumétrie importante et une jointure de tables pour l'annotation.