Dieses Kapitel beschreibt Operatoren für die Texturinspektion.
Mit der Texturinspektion können mit wenigen Parametereinstellungen texturierte Oberflächen auf Fehler überprüft werden. Der Algorithmus benötigt ein Training mit Bildern von fehlerfreier Textur. Bei dem Training werden Texturmerkmale aus den Trainingsbildern extrahiert und dazu genutzt, auf der Basis eines Gaussian Mixture Model (GMM) Klassifikators ein Texturinspektionsmodell zu trainieren. Nach dem erfolgreichen Training können Bilder der gleichen Textur mit dem Texturinspektionsmodell verglichen werden und somit potentielle Fehler identifiziert werden. Texturinspektion arbeitet auf einer Bildpyramide, so dass unterschiedliche Frequenzbereiche der Textur untersucht werden.
Im Folgenden werden die einzelnen Schritte, die zur Texturinspektion benötigt werden, kurz beschrieben.
Zuerst wird ein Texturinspektionsmodell mit
angelegt oder mit
eingelesen.
Der Operator
fügt dem Texturinspektionsmodell neue Trainingsbilder hinzu.
Die mit
zugefügten Bilder
können mit einem Aufruf von
add_texture_inspection_model_image
wieder abgefragt werden. Falls
alle oder ein Teil der Bilder nicht mehr zur Texturinspektion verwendet
werden sollen, so können diese Bilder mit Hilfe des Operators
get_texture_inspection_model_image
aus dem Modell entfernt werden.
remove_texture_inspection_model_image
Das Texturinspektionsmodell wird mit
trainiert.
Während des Trainings wird eine Bildpyramide erzeugt. Für jede
Pyramidenstufe wird ein Gaussian Mixture
Model (GMM) trainiert und eine Fehlerschwelle ('novelty_threshold'
)
bestimmt. Diese Schwelle ermöglicht beim Anwenden der Texturinspektion die
Klassifikation von jedem Pixel in fehlerhafte und fehlerfreie Textur.
Nach dem Training können die Fehlerschwellen mit
abgefragt werden.
get_texture_inspection_model_param
Verschiedene Parameter beeinflussen das Training. Sie können mit
gesetzt werden.
Das folgende Vorgehen für das Training wird empfohlen:
Setzen von initialen Parametern, wenn nötig:
'patch_normalization'
: Wird dieser Parameter auf
'weber'
gesetzt, werden die Texturmerkmale normalisiert und
das Texturinspektionsmodell wird robust gegen
Beleuchtungsänderungen. Hier ist zu beachten, dass eine
Normalisierung nicht immer gewünscht ist, z.B. wenn die Helligkeit
ein wichtiges Merkmal bei der Unterscheidung zwischen fehlerhafter
und fehlerfreier Textur darstellt. In diesem Fall ist eine
kontrollierte Beleuchtung für eine erfolgreiche Klassifizierung
zwingend notwendig.
'patch_rotational_robustness'
: Wird dieser Parameter auf
'true'
gesetzt, werden die Texturmerkmale so sortiert, dass
das Texturinspektionsmodell robust gegen Rotationsänderungen
wird. Dies kann hilfreich sein, wenn es schwierig ist, alle möglichen
Orientierungen der Textur durch Trainingsbilder abzudecken.
Trainieren des Texturinspektionsmodells (mit den Default-Parametern): Das initiale Training des Texturinspektionsmodells kann viel Zeit in Anspruch nehmen. Die benötigte Zeit ist abhängig von der Anzahl der Trainingsbilder und deren Auflösung. Mögliche Strategien zum Verringern der Trainingszeit:
Zoomen der Bilder: Häufig funktioniert die Texturinspektion sogar besser mit niedrig aufgelösten Bildern. Ist bekannt, dass nicht die volle Auflösung der Bilder benötigt wird, kann das Zoomen der Bilder einen signifikanten Zeitvorteil bringen. Zoomt man ein Bild z.B. mit Faktor 2, kann dies die Trainingszeit um Faktor 4 beschleunigen.
Beschleunigen des Trainings: Ein weiterer, aber auch riskanterer
Ansatz ist es, den Schwellwert, der bestimmt, wann die Optimierung des
Klassifikators beendet wird, mit dem Parameter
'gmm_em_threshold'
z.B. von 0.001 auf 0.1
zu erhöhen. Dies führt zu kürzeren Trainingszeiten aber auch zu einem
möglicherweise weniger genauen Texturinspektionsmodell. Wird dieses
Vorgehen gewählt, ist es strengstens empfohlen, den Schwellwert nach
dem Anpassen der meisten Parameter wieder zu reduzieren.
Prüfen des Trainingsergebnisses: Mit einem Satz von Bildern mit fehlerhafter Textur kann das Ergebnis einer Klassifikation mit dem trainierten Texturinspektionsmodell geprüft werden. Dies wird näher im Abschnitt 'Anwenden des Texturinspektionsmodells' beschrieben. Ist das Ergebnis nicht zufriedenstellend, können weitere Parameter angepasst werden. Die wichtigsten Parameter sind:
'num_levels'
oder 'levels'
: Die Anzahl der benutzten
Pyramidenstufen bzw. die expliziten genutzten Pyramidenstufen. Höhere
Pyramidenstufen funktionieren gut für gröbere Texturmerkmale. Ist die
Textur in den Bildern sehr grob, werden die niedrigeren Pyramidenstufen
eventuell gar nicht für eine erfolgreiche Inspektion benötigt. Um
deutlich an Laufzeit zu sparen, können die entsprechenden Skalen durch
das explizite Setzen der Skalen mittels 'levels'
ausgeschlossen
werden, Wird zum Beispiel 'levels'
auf [1,3] gesetzt, werden im
Training und zum Klassifizieren nur die erste und die dritte Level
verwendet.
'sensitivity'
: Dieser Parameter kontrolliert, wie streng
die Fehlerschwellen ('novelty_threshold'
) gesetzt werden. Somit
kann die Empfindlichkeit gegenüber Texturfehlern eingestellt
werden. Generell führen positive Werte zu einer höheren Empfindlichkeit
des Verfahrens und dadurch zu mehr Texturfehlern. Umgekehrt führen
negative Werte zu einer niedrigeren Empfindlichkeit des Verfahrens und
dadurch zu weniger Texturfehlern.
'novelty_threshold'
: Dieser Parameter setzt die
Fehlerschwellen manuell. Dies kann zur Feinabstimmung genutzt werden,
sollten die Ergebnisse der automatischen Schätzung nicht optimal sein.
Wiederholen des Trainings, wenn nötig: Wurden Parameter angepasst, muss das Texturinspektionsmodell für gewöhnlich neu trainiert werden.
Nach dem erfolgreichen Training kann das Texturinspektionsmodell dazu verwendet werden, texturierte Oberflächen zu klassifizieren. Jedes Testbild kann mit
mit dem Texturinspektionsmodell verglichen werden.
Für jedes Testbild gibt der Operator eine Fehlerregion
('novelty_region'
) zurück, die anzeigt, wo das Bild größere
Abweichungen von den trainierten Trainingsdaten aufweist. Die Fehlerregion
wird durch die Kombination der Fehlerregionen der unterschiedlichen
Bildpyramidenstufen erzeugt. Dabei werden die Fehlerregionen von benachbarten
Skalen miteinander geschnitten. Dadurch wird die Robustheit gegenüber
Rauschen erhöht. Die so entstandenen Schnittflächen werden in der
'novelty_region'
vereinigt. Falls es keine benachbarte Level gibt,
wird die Fehlerregion der entsprechenden Level direkt zu der
'novelty_region'
hinzugefügt. Setzt man zum
Beispiel 'num_levels'
auf 1, so gibt es keine benachbarten Skalen
und die Fehlerregion vom ersten Level wird in 'novelty_region'
zurückgegeben.
Zum Debuggen kann der Parameter 'gen_result_handle'
mit
auf set_texture_inspection_model_param
'true'
gesetzt
werden. Auf diese Weise werden die Novelty-Score-Bilder und die
Fehlerregionen der einzelnen Bildpyramidenstufen in einem Ergebnis-Handle
gespeichert, aus welchem sie wieder mit
ausgelesen werden können. Generell beschreiben die Novelty-Score-Bilder
wie gut jedes Pixel zu dem Texturinspektionsmodell passt, welches im
Trainingsprozess entstanden ist. Die Fehlerregionen der einzelnen
Pyramidenstufen werden dann durch das Anwenden der Fehlerschwelle
('novelty_threshold'
) auf die jeweiligen Novelty-Score-Bilder
berechnet.
Das Inspizieren der Novelty-Score-Bilder und der Fehlerregionen kann
Aufschluss darüber geben, welche Art von Fehlern auf welchen Pyramidenstufen
gefunden werden können. Darauf basierend kann entschieden werden, ob
Parameter für das Training und die Klassifizierung angepasst werden sollten,
z.B., ob es sinnvoll ist, explizit nur bestimmte Pyramidenstufen durch das
Setzen des Parameters 'levels'
auszuwählen.
(1) | (2) |
Die Funktionalität der Texturinspektion wird durch verschiedene Parameter
beeinflusst. Die Parameterwerte können mit
abgefragt und mit
get_texture_inspection_model_param
geändert werden.
set_texture_inspection_model_param
Ein Texturinspektionsmodell kann mit dem Operator
abgespeichert werden. Dabei wird nur
das Texturinspektionsmodell und nicht dem Modell hinzugefügte Bilder
gespeichert. Die hinzugefügten Bilder können mit
write_texture_inspection_model
abgefragt und mit einem Aufruf von
get_texture_inspection_model_image
separat abgespeichert werden.
write_object
Um den Speicherbedarf des Texturinspektionsmodells zu verringern,
können dem Model bereits hinzugefügte Bilder wieder herausgelöscht werden.
Dies erfolgt durch den Operator
.
remove_texture_inspection_model_image
Außerdem kann das Modell mit
und
serialize_texture_inspection_model
serialisiert bzw. deserialisiert
werden.
deserialize_texture_inspection_model
Im Folgenden werden die wichtigsten Begriffe, die im Umfeld der Texturinspektion verwendet werden, beschrieben:
Bilder, die für das Training verwendet werden.
Bilder, die mit dem trainierten Texturinspektionsmodell verglichen werden.
Menge von benachbarten Pixeln.
Grauwerte der Pixel innerhalb eines Patches.
Texturmerkmale, die in einem Trainingsprozess genutzt werden.
Im Testprozess werden die Texturmerkmale der Testbilder mit dem Texturinspektionsmodell verglichen und ihr Neuheitswert (Novelty Score) wird berechnet. Je höher dieser Wert ist, desto wahrscheinlicher ist es, dass das Texturmerkmal nicht zu dem Texturinspektionsmodell passt.
Die Fehlerschwelle (Novelty Threshold) wird im Trainingsprozess geschätzt. Texturmerkmale mit einem Neuheitswert unter der Fehlerschwelle passen zum Texturinspektionsmodell, Texturmerkmale mit einem höheren Neuheitswert passen nicht.
add_texture_inspection_model_image
apply_texture_inspection_model
clear_texture_inspection_model
clear_texture_inspection_result
create_texture_inspection_model
deserialize_texture_inspection_model
get_texture_inspection_model_image
get_texture_inspection_model_param
get_texture_inspection_result_object
read_texture_inspection_model
remove_texture_inspection_model_image
serialize_texture_inspection_model
set_texture_inspection_model_param
train_texture_inspection_model
write_texture_inspection_model