?> annotateImages - WeAreCAS
image

annotateImages

Beschreibung

Die Aktion `annotateImages` im Aktionssatz `image` wird verwendet, um Bilder in einer CAS-Tabelle mit Metadaten zu versehen, die in derselben oder einer anderen Tabelle enthalten sind. Dies ermöglicht das Zeichnen von Formen, Text oder das Überlagern von Segmentierungsmasken direkt auf die Bilder. Diese Funktion ist besonders nützlich für die Visualisierung von Ergebnissen der Bildanalyse, wie z. B. Objekterkennung, oder zur Vorbereitung von Trainingsdaten für Deep-Learning-Modelle.

proc cas; image.annotateImages / annotations={{annotation={annotationType='LINES' | 'POINTS' | 'PROTOBUF' | 'SEGMENTATION', ...}}}, casOut={name='table-name', ...}, images={table={name='table-name', ...}, ...}; run;
Einstellungen
ParameterBeschreibung
annotationsGibt eine Liste von Annotationen an, die auf die Bilder angewendet werden sollen. Jede Annotation wird als Wörterbuch mit einem `annotationType` und den entsprechenden Parametern definiert.
casOutGibt die Ausgabetabelle an, in der die annotierten Bilder gespeichert werden sollen.
copyVarsGibt eine Liste von Variablen an, die von der Eingabetabelle in die Ausgabetabelle kopiert werden sollen.
decodeGibt an, ob die Bilder vor der Annotation dekodiert werden sollen. Dies ist erforderlich, wenn die Bilder in einem komprimierten Format vorliegen.
imagesGibt die Eingabetabelle an, die die zu annotierenden Bilder enthält, sowie die Spalten, die Bilddaten, IDs und andere Metadaten enthalten.
annotationTypeGibt den Typ der durchzuführenden Annotation an. Mögliche Werte sind 'LINES', 'POINTS', 'PROTOBUF' und 'SEGMENTATION'.
thicknessGibt die Dicke (in Pixel) für Linienannotationen an.
radiusGibt den Radius (in Pixel) für Punktannotationen an.
colorMapGibt die Farbkarte an, die für Segmentierungsannotationen verwendet wird.
transparencyGibt die Transparenz (in Prozent) für Segmentierungsüberlagerungen an.
Datenaufbereitung
Erstellung von Beispieldaten

Dieser Code lädt Bilder aus einem angegebenen Pfad in eine CAS-Tabelle. Die Tabelle `my_images` enthält dann die Bilder, die für die Annotation verwendet werden können. Zusätzlich wird eine zweite Tabelle `annotations_data` erstellt, die die Koordinaten für die Annotationen enthält.

proc cas;
   loadactionset 'image';
   /* Laden von Bildern in eine CAS-Tabelle */
   image.loadImages /
      path='path/to/your/images/'
      casOut={name='my_images', caslib='CASUSER'};

   /* Erstellen einer Tabelle mit Annotationsdaten (z.B. für Rechtecke) */
   data casuser.annotations_data;
      length _image_ $200;
      _image_ = 'image1.jpg'; _x_=50; _y_=50; _width_=100; _height_=80; _label_='Objekt1'; output;
      _image_ = 'image2.png'; _x_=20; _y_=30; _width_=120; _height_=100; _label_='Objekt2'; output;
   run;

   /* Zusammenführen der Bildtabelle mit den Annotationsdaten */
   proc sql;
      create table casuser.images_with_annotations as
      select a.*, b._x_, b._y_, b._width_, b._height_, b._label_
      from casuser.my_images as a
      join casuser.annotations_data as b
      on a._path_ = b._image_;
   quit;
run;

Beispiele

Dieses Beispiel zeichnet einen einzelnen roten Punkt mit einem Radius von 5 Pixeln in jedes Bild der Tabelle `my_images`.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 image.annotateImages /
3 images={TABLE={name='my_images', caslib='CASUSER'}}
4 annotations={{
5 annotation={annotationType='POINTS', representation={representationType='SINGLE_COLUMN', columnName='_points_'}, r=255, radius=5}
6 }}
7 casOut={name='annotated_points', caslib='CASUSER', replace=true};
8RUN;
Ergebnis :
Eine neue CAS-Tabelle mit dem Namen `annotated_points` wird in der CASUSER-Bibliothek erstellt. Sie enthält die Originalbilder mit einem roten Punkt an den in der Spalte `_points_` angegebenen Koordinaten.

Dieses Beispiel verwendet die zuvor erstellte Tabelle `images_with_annotations`, um Rechtecke um Objekte zu zeichnen. Die Koordinaten (`_x_`, `_y_`, `_width_`, `_height_`) und die Farbe werden verwendet, um Linien zu zeichnen, die ein Rechteck bilden. Es wird davon ausgegangen, dass die Tabelle `images_with_annotations` Spalten für die Koordinaten und eine Beschriftung enthält.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 image.annotateImages /
3 images={TABLE={name='images_with_annotations', caslib='CASUSER'}}
4 annotations={{
5 /* Zeichnet die obere Linie des Rechtecks */
6 annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='_x_', y1='_y_', x2_expr='_x_ + _width_', y2='_y_'}, r=255, g=0, b=0, thickness=3}
7 },{
8 /* Zeichnet die untere Linie des Rechtecks */
9 annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='_x_', y1_expr='_y_ + _height_', x2_expr='_x_ + _width_', y2_expr='_y_ + _height_'}, r=255, g=0, b=0, thickness=3}
10 },{
11 /* Zeichnet die linke Linie des Rechtecks */
12 annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1='_x_', y1='_y_', x2='_x_', y2_expr='_y_ + _height_'}, r=255, g=0, b=0, thickness=3}
13 },{
14 /* Zeichnet die rechte Linie des Rechtecks */
15 annotation={annotationType='LINES', representation={representationType='MULTI_COLUMN', x1_expr='_x_ + _width_', y1='_y_', x2_expr='_x_ + _width_', y2_expr='_y_ + _height_'}, r=255, g=0, b=0, thickness=3}
16 }}
17 casOut={name='annotated_rectangles', caslib='CASUSER', replace=true};
18RUN;
Ergebnis :
Eine neue CAS-Tabelle `annotated_rectangles` wird erstellt. Jedes Bild in dieser Tabelle enthält ein rotes Rechteck, das um das Objekt gemäß den Koordinaten aus der Tabelle `images_with_annotations` gezeichnet wurde.

Dieses Beispiel überlagert eine Segmentierungsmaske auf die Originalbilder. Es wird angenommen, dass eine Tabelle `segmentation_masks` existiert, die eine Spalte `_image_` mit den Maskenbinärdaten enthält. Die Maske wird mit einer Transparenz von 50% und der 'JET'-Farbkarte überlagert.

SAS® / CAS-Code
Kopiert!
1PROC CAS;
2 image.annotateImages /
3 images={TABLE={name='my_images', caslib='CASUSER'}}
4 annotations={{
5 annotation={annotationType='SEGMENTATION', TABLE={name='segmentation_masks', caslib='CASUSER'}, colorMap='JET', transparency=50}
6 }}
7 casOut={name='annotated_segmentation', caslib='CASUSER', replace=true};
8RUN;
Ergebnis :
Eine neue CAS-Tabelle `annotated_segmentation` wird erstellt. Jedes Bild wird mit der entsprechenden Segmentierungsmaske überlagert, was die Visualisierung von Bildsegmentierungsergebnissen ermöglicht.

FAQ

Was macht die `annotateImages`-Aktion?
Welche Parameter sind für die `annotateImages`-Aktion erforderlich?
Wofür wird der `annotations`-Parameter verwendet?
Was ist der Zweck des `casOut`-Parameters?
Welche Funktion hat der `images`-Parameter?
Welche Arten von Anmerkungen sind mit `annotationType` möglich?
Wie kann ich die Farbe von Linien- oder Punktanmerkungen steuern?
Was bewirkt der `decode`-Parameter?