image

annotateImages

L'essentiel
Auf einen Blick
Im Bereich der maschinellen Bildverarbeitung ist die präzise Darstellung von Analyseergebnissen oft genauso wichtig wie die Berechnung selbst. Die Funktion annotateImages übernimmt genau diese Aufgabe, indem sie grafische Informationen wie Begrenzungsrahmen, Linien oder komplexe Segmentierungsmasken aus den Metadaten einer CAS-Tabelle extrahiert und direkt auf die entsprechenden Bilddaten projiziert. Dies ermöglicht eine sofortige visuelle Überprüfung von Objekterkennungs-Algorithmen. Dieser Abschnitt widmet sich den häufigsten Anwenderfragen und bietet detaillierte Lösungen zur Handhabung dieser Visualisierungs-Action.

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
annotations Gibt 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.
casOut Gibt die Ausgabetabelle an, in der die annotierten Bilder gespeichert werden sollen.
copyVars Gibt eine Liste von Variablen an, die von der Eingabetabelle in die Ausgabetabelle kopiert werden sollen.
decode Gibt an, ob die Bilder vor der Annotation dekodiert werden sollen. Dies ist erforderlich, wenn die Bilder in einem komprimierten Format vorliegen.
images Gibt die Eingabetabelle an, die die zu annotierenden Bilder enthält, sowie die Spalten, die Bilddaten, IDs und andere Metadaten enthalten.
annotationType Gibt den Typ der durchzuführenden Annotation an. Mögliche Werte sind 'LINES', 'POINTS', 'PROTOBUF' und 'SEGMENTATION'.
thickness Gibt die Dicke (in Pixel) für Linienannotationen an.
radius Gibt den Radius (in Pixel) für Punktannotationen an.
colorMap Gibt die Farbkarte an, die für Segmentierungsannotationen verwendet wird.
transparency Gibt die Transparenz (in Prozent) für Segmentierungsüberlagerungen an.
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.

Kopiert!
1PROC CAS;
2 LOADACTIONSET 'image';
3 /* Laden von Bildern in eine CAS-Tabelle */
4 image.loadImages /
5 path='path/to/your/images/'
6 casOut={name='my_images', caslib='CASUSER'};
7 
8 /* Erstellen einer Tabelle mit Annotationsdaten (z.B. für Rechtecke) */
9 DATA casuser.annotations_data;
10 LENGTH _image_ $200;
11 _image_ = 'image1.jpg'; _x_=50; _y_=50; _width_=100; _height_=80; _label_='Objekt1'; OUTPUT;
12 _image_ = 'image2.png'; _x_=20; _y_=30; _width_=120; _height_=100; _label_='Objekt2'; OUTPUT;
13 RUN;
14 
15 /* Zusammenführen der Bildtabelle mit den Annotationsdaten */
16 PROC SQL;
17 create TABLE casuser.images_with_annotations as
18 select a.*, b._x_, b._y_, b._width_, b._height_, b._label_
19 from casuser.my_images as a
20 join casuser.annotations_data as b
21 on a._path_ = b._image_;
22 QUIT;
23RUN;

Beispiele

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

SAS® / CAS-Code Code wartet auf Validierung durch die Community
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 Code wartet auf Validierung durch die Community
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 Code wartet auf Validierung durch die Community
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?

Zugehörige Szenarien

Anwendungsfall
Standardfall: Visuelle Qualitätskontrolle für Elektronikbauteile

Ein Hersteller von Elektronikkomponenten verwendet ein automatisiertes Inspektionssystem, um potenzielle Defekte wie Kratzer oder falsche Lötstellen zu erkennen. Die Ergebnisse ...

Anwendungsfall
Performancetest: Segmentierungsmasken auf tausenden Satellitenbildern anwenden

Ein Agrartechnologie-Unternehmen analysiert Satellitenbilder, um Landnutzungsklassen (z.B. Wald, Wasser, Ackerland) zu identifizieren. Ein Deep-Learning-Modell hat bereits für j...

Anwendungsfall
Grenzfall: Verarbeitung medizinischer Bilder mit fehlenden und ungültigen Annotationsdaten

Ein Krankenhaus analysiert Röntgenbilder, um Anomalien zu identifizieren. Die Daten zur Markierung dieser Anomalien (als Punkte) werden manuell von verschiedenen Teams erfasst, ...