?> buildSurface - WeAreCAS
bioMedImage

buildSurface

Descripción

L'action `buildSurface` est un outil spécialisé dans le traitement d'images biomédicales en 3D. Son rôle principal est de construire des surfaces polygonales (maillages 3D) à partir de régions d'intérêt définies par des seuils d'intensité de pixels dans une image volumétrique (comme un scan CT ou IRM). Concrètement, elle permet de transformer un nuage de voxels (pixels 3D) en une représentation géométrique, ce qui est fondamental pour la visualisation 3D, l'analyse morphologique, et la planification chirurgicale.

bioMedImage.buildSurface result=<results> status=<rc> / images={<biomedimageTableIn>}, intensities={<double-1> <, double-2, ...>}, outputFaces={<casouttable>}, outputVertices={<casouttable>}, smoothing={<binarySmoothingParms>}, thresholds={{<buildSurfaceThresholds-1>} <, {buildSurfaceThresholds-2}>, ...};
Parámetros
ParámetroDescripción
imagesSpécifie la table CAS d'entrée contenant les images biomédicales 3D à traiter. Cette table doit être correctement formatée, généralement par une action en amont comme `loadDicomData`.
intensitiesUne liste de valeurs d'intensité de pixel. L'action génère une surface pour chaque valeur d'intensité spécifiée, créant un maillage qui représente l'isosurface à ce niveau de gris.
outputFacesSpécifie la table CAS de sortie pour stocker les faces (polygones, généralement des triangles) de la surface générée. Chaque ligne représente une face définie par les identifiants de ses sommets.
outputVerticesSpécifie la table CAS de sortie pour stocker les sommets (vertices) de la surface générée. Chaque ligne contient les coordonnées (x, y, z) d'un sommet.
smoothingParamètres optionnels pour lisser la surface générée, ce qui peut réduire l'aspect 'en escalier' (aliasing) inhérent à la conversion voxel-maillage.
thresholdsUne liste de paires de seuils (bas et haut). L'action génère une surface qui englobe toutes les régions où l'intensité des pixels se situe entre ces seuils. C'est une alternative à `intensities` pour définir des régions volumétriques plutôt que des isosurfaces.
Preparación de datos
Préparation des données d'imagerie biomédicale

L'action `buildSurface` opère sur une table d'images biomédicales 3D déjà chargée en mémoire dans CAS. Il n'est pas possible de créer des données DICOM réalistes avec un simple DATA STEP. La méthode standard consiste à utiliser l'action `loadDicomData` de l'action set `bioMedImage` pour charger une série d'images DICOM depuis un chemin accessible par le serveur CAS. Le code ci-dessous est un exemple conceptuel montrant comment charger des fichiers DICOM dans une table CAS nommée `my_3d_images`, qui sera ensuite utilisée par les exemples `buildSurface`.

/* ÉTAPE PRÉALABLE : Charger des images DICOM dans une table CAS */
proc cas;
   bioMedImage.loadDicomData result=r status=s /
      path="/chemin/vers/vos/fichiers/dicom/"
      casout={name="my_3d_images", caslib="casuser", replace=true};
quit;

/* NOTE : Vous devez remplacer '/chemin/vers/vos/fichiers/dicom/' par un chemin réel contenant des fichiers DICOM accessibles par votre environnement CAS. */

Ejemplos

Cet exemple de base utilise le paramètre `intensities` pour générer une surface 3D correspondant à tous les voxels ayant une valeur d'intensité de 1000. C'est la méthode la plus directe pour visualiser une structure spécifique si son intensité est connue et homogène.

Código SAS® / CAS
¡Copiado!
1PROC CAS;
2 bioMedImage.buildSurface /
3 images={TABLE={name="my_3d_images"}},
4 intensities={1000},
5 outputFaces={name="faces_simple", caslib="casuser", replace=true},
6 outputVertices={name="vertices_simple", caslib="casuser", replace=true};
7RUN;
8QUIT;
Resultado :
Deux tables CAS sont créées dans la caslib `casuser` : `faces_simple` et `vertices_simple`. La table `vertices_simple` contient les coordonnées 3D des sommets de la surface, et la table `faces_simple` définit les triangles qui composent le maillage en se référant aux identifiants des sommets. Le log SAS affichera un résumé de l'opération et les noms des tables de sortie.

Contrairement à `intensities` qui crée une surface à une valeur exacte, `thresholds` permet de définir une surface englobant une plage de valeurs. Cet exemple génère un maillage pour la région où les intensités des voxels sont comprises entre 800 et 1200. C'est utile pour extraire des structures dont l'intensité n'est pas parfaitement uniforme.

Código SAS® / CAS
¡Copiado!
1PROC CAS;
2 bioMedImage.buildSurface /
3 images={TABLE={name="my_3d_images"}},
4 thresholds={{low=800, high=1200}},
5 outputFaces={name="faces_seuil", caslib="casuser", replace=true},
6 outputVertices={name="vertices_seuil", caslib="casuser", replace=true};
7RUN;
8QUIT;
Resultado :
Deux nouvelles tables, `faces_seuil` et `vertices_seuil`, sont créées. Elles représentent la surface 3D qui délimite la région où les valeurs de voxels sont comprises entre 800 et 1200. Le maillage résultant peut être plus complexe que celui d'une simple isosurface.

Les surfaces générées directement à partir de données voxels peuvent avoir un aspect brut ou 'en escalier'. Le paramètre `smoothing` permet d'adoucir le maillage. Ici, nous appliquons 5 itérations de lissage avec un facteur de relaxation de 0.5. Un facteur plus élevé produit un lissage plus prononcé. Cette technique est essentielle pour obtenir des visualisations plus esthétiques et des mesures morphologiques plus précises.

Código SAS® / CAS
¡Copiado!
1PROC CAS;
2 bioMedImage.buildSurface /
3 images={TABLE={name="my_3d_images"}},
4 intensities={1000},
5 smoothing={iterations=5, relaxationFactor=0.5},
6 outputFaces={name="faces_lissees", caslib="casuser", replace=true},
7 outputVertices={name="vertices_lisses", caslib="casuser", replace=true};
8RUN;
9QUIT;
Resultado :
Les tables `faces_lissees` et `vertices_lisses` sont générées. En comparant cette surface à celle de l'exemple simple, on observerait une géométrie plus douce, avec des arêtes vives et des artefacts en escalier atténués. Le log SAS confirmera l'application des paramètres de lissage.

FAQ

Quelle est la fonction principale de l'action buildSurface ?
Quels sont les paramètres d'entrée et de sortie obligatoires ?
Comment peut-on définir les régions pour lesquelles la surface doit être construite ?
Est-il possible de lisser la surface générée et comment ?
Quelle est la différence entre les tables de sortie 'outputFaces' et 'outputVertices' ?