| Operatoren |
adjust_mosaic_images — Anwenden einer automatischen Farbkorrektur auf Bilder in Panoramen.
adjust_mosaic_images(Images : CorrectedImages : From, To, ReferenceImage, HomMatrices2D, EstimationMethod, EstimateParameters, OECFModel : )
adjust_mosaic_images führt eine radiometrische Anpassung von Bildern in Panoramen durch. Die zu korrigierenden Bilder werden im Parameter Images gegeben, die korrigierten Bilder werden in CorrectedImages zurück geliefert.
Die Parameter From und To geben die Start- und Zielindizes der einzelnen Bildpaare innerhalb des Panoramas an. Zu jedem dieser Paare muss im Parameter HomMatrices2D die entsprechende projektive 3x3-Matrix gegeben werden. Der Parameter ReferenceImage legt das Bild fest, dessen Helligkeit und Weißabgleich als Referenz verwendet werden sollen.
Das bedeutet, dass ein Bild über 'perfekte' Belichtung und Weißabgleich verfügt. Alle anderen Bilder werden entsprechend angepasst, so dass deren Belichtung und Weißabgleich dem Referenzbild entspricht. Das Referenzbild wird also nicht verändert, alle anderen Bilder hingegen schon.
EstimationMethod bestimmt, ob nur eine ungenaue, aber dafür schnelle Anpassung durchgeführt werden soll, oder eine langsamere, aber dafür wesentlich genauere. Dies wird mit den Werten 'standard' bzw. 'gold_standard' festgelegt.
Die Verfahren, die mit 'standard' gewählt werden können verwenden nur den durchschnittlichen Grauwertunterschied im Überlappbereich jedes Bildpaares. Wenn 'gold_standard' gewählt ist werden dagegen die Grauwertunterschiede zwischen allen korrespondierenden Bildpunkten im Überlappbereich berücksichtigt.
Die zu minimierende Fehlerfunktion ergibt sich in allen Fällen als die Quadratsumme der Grauwertunterschiede zwischen den Bildern bzw. Bildpunkten.
Die Verfügbarkeit der einzelnen Methoden ist jedoch abhängig von den gewählten EstimateParameters. Dieser Parameter bestimmt, welches Modell zur Bestimmung der radiometrischen Korrektur verwendet werden soll. Es ist prinzipiell immer möglich, die Vignettierung der Bilder durch Angabe von 'vignetting' bestimmen zu lassen. In diesem Fall muss jedoch für EstimationMethod auch 'gold_standard' gewählt werden. Für die sonstigen radiometrischen Korrekturen bietet das Verfahren drei Optionen:
Die Bestimmung der Vignettierung in Bilder basiert auf dem weithin bekannten
1. Die Korrektur mit Hilfe eines additiven Verfahrens. Diese ist lediglich für kleinste Unterschiede zu verwenden. Sie wird durch Angabe des Wertes 'add_gray' in EstimateParameters gewählt. Dieses Modell kann nur alleine mit EstimationMethod = 'standard', oder gemeinsam mit EstimateParameters = 'vignetting' mit EstimationMethod = 'gold_standard' gewählt werden.
Dieses Verfahren basiert auf der Annahme, dass die Grauwertunterschiede zwischen den Bildern dadurch korrigiert werden können, dass zu den Grauwerten in jedem Bild ein bestimmter Term addiert wird. Dies entspricht im Grunde genau einem Aufruf von scale_image für jedes Bild:
scale_image(Image_n,CorrectedImage_n,1.0,Add_n)
mit Add_n dem Korrekturterm für dieses Bild.
2. Die Korrektur mit Hilfe des linearen Verfahrens. In diesem Fall wird angenommen, dass die Eingabebilder mit einer linearen Kamera aufgenommen wurden. Die Unterschiede zwischen den einzelnen Bildern werden als Multiplikationsfaktoren berechnet, mit denen die Bilder korrigiert werden. Dieses Verfahren wird durch Angabe von 'mult_gray' gewählt. Es kann sowohl mit EstimationMethod = 'standard', als auch mit EstimationMethod = 'gold_standard' durchgeführt werden. Die Kombination mit EstimateParameters = 'vignetting' ist ebenfalls möglich, jedoch nur mit EstimationMethod = 'gold_standard'.
Dieses Verfahren basiert auf der Annahme, dass die Grauwertunterschiede zwischen den Bildern dadurch korrigiert werden können, dass die Grauwerte in jedem Bild mit einem bestimmten Faktor multipliziert werden. Dies entspricht wieder genau einem Aufruf von scale_image für jedes Bild:
scale_image(Image_n,CorrectedImage_n,Mult_n,0)
mit Mult_n dem Korrekturfaktor für dieses Bild.
3. Die Korrektur mit Hilfe des kalibrierten Verfahrens. Bei diesem Modell wird angenommen, dass die Eingabebilder mit einer nichtlinearen Kamera aufgenommen wurden. Zur Modellierung der Transferfunktion wird die im Parameter OECFModel gewählte Funktionsklasse verwendet. Zusätzlich werden genau wie im linearen Fall die Unterschiede zwischen den Bildern als Multiplikationsfaktoren berechnet und die Bilder entsprechend korrigiert. Dieses Modell wird durch Angabe von ['mult_gray', 'response'] gewählt und kann nur mit EstimationMethod = 'gold_standard' ausgewählt werden. Eine Kombination mit EstimateParameters = 'vignetting' ist möglich.
Dieses Verfahren ist dem linearen Verfahren ähnlich. In diesem Fall kann die Kamera jedoch eine nichtlineare Antwortfunktion besitzen. Dies bedeutet, dass die Grauwerte der Bilder zuerst wieder linearisiert werden müssen, bevor sie mit einem Skalierungsfaktor multipliziert werden können. Um diesen Schritt vornehmen zu können muss die Antwortfunktion der Kamera bestimmt werden. Da diese normalerweise innerhalb einer Bildsequenz nicht variiert, wird sie als konstant über alle Bilder angenommen.
Prinzipiell könnte jede Art von Funktion als OECF verwendet werden. So ist es zum Beispiel denkbar polynomielle Funktionen wie in radiometric_self_calibration zu verwenden. Diese Art von Funktion wäre jedoch in der vorliegenden Anwendung zu komplex und würde nicht zu zufriedenstellenden Ergebnissen führen. Der Grund liegt darin, dass eine solche Funktion über zu viele Parameter verfügt. Stattdessen werden nur einfachere Funktionstypen unterstützt. Derzeit sind lediglich sogenannte Laguerre-Funktionen verfügbar.
Die Antwortfunktion einer OECF der Laguerre-Klasse wird von nur einem Parameter mit dem Namen Phi definiert. Im ersten Schritt der Transformation wird also das Grauwertspektrum (für 8bit Bilder also die Werte zwischen 0 und 255) in das Intervall [0:1] abgebildet. Die resultierenden Fließkommazahlen werden dann mittels der OECF linearisiert und die resultierenden Werte werden wieder in das Ursprungsintervall projiziert.
Die inverse Antwortfunktion, mit der Grauwerte wieder linearisiert werden können lässt sich für Laguerre-Funktionen wie folgt berechnen:
mit I_l dem linearen Grauwert und I_nl dem nichtlinearen Grauwert.
Der Parameter OECFModel wird nur verwendet, wenn eine Korrektur mittels des kalibrierten Verfahrens durchgeführt wird. Andernfalls werden eventuelle Eingaben ignoriert.
Der Parameter EstimateParameters kann auch dazu benutzt werden, das Laufzeitverhalten und den Speicherverbrauch des Operators zu beeinflussen. Wird der Parameter auf 'no_cache' gesetzt, so wird der interne Cache Mechanismus des Operators abgeschaltet. Dies bedeutet aber auch, dass diese Einstellung nur dann eine Wirkung hat, wenn EstimationMethod auf 'gold_standard' gesetzt ist. Andenrfalls wird die Einstellung ignoriert. Wird der interne Cache Mechanismus abgeschaltet, so benötigt der Operator deutlich weniger Arbeitsspeicher, da die korrespondierenden Grauwertpaare in jeder Iteration der Minimierung erneut berechnet werden. Aus diesem Grund ist die Abschaltung des internen Cache Mechanismus nur dann angeraten, wenn der Speicherbedarf des Operators den verfügbaren physikalischen Speicher des Rechners übersteigt und das Betriebssystem daher auf die Auslagerungsdatei zurück greift.
Eine weitere Möglichkeit die Laufzeit und den Speicherverbrauch zu beeinflussen bietet sich durch die Verwendung von Subsampling. Wird EstimateParameters auf 'subsampling_2' gesetzt, so werden alle Bilder intern um den Faktor 2 verkleinert. Im Gegensatz zu den unten aufgeführten Vorschlägen sind nicht nur die Faktoren 2 und 4 verfügbar, sondern ein beliebiger Ganzzahlwert kann dadurch angegeben werden, dass er an subsampling_ in EstimateParameters angehängt wird. Durch dieses Vorgehen kann die gesamte Datenmenge erheblich reduziert werden, was sich in einer deutlich geringeren Laufzeit des verwendeten Minimierungsalgorithmus bemerkbar macht. Zusätzlich kann ein leichtes Subsampling sogar das Ergebnis der Korrektur verbessern, da dadurch der Einfluss von geringfügigen Abbildungsfehlern zwischen den Bildern verringert wird. Obwohl Subsampling auch die Laufzeit beeinflusst, wenn EstimationMethod auf 'standard' gesetzt ist, wird die Verwendung hauptsächlich für 'gold_standard' empfohlen.
Hier noch einige allgemeine Anmerkungen zur Verwendung von adjust_mosaic_images:
Die Bestimmung der Vignettierung kann nur dann zu sinnvollen Ergebnissen führen, wenn eine signifikante Vignettierung in den Bildern sichtbar ist. Andernfalls kann das Ergebnis verfälscht werden.
Die Bestimmung der Antwortfunktion benötigt deutlich mehr Rechenzeit. Daher ist es nicht empfehlenswert, die Antwortfunktion in zeitkritischen Anwendungen zu bestimmen. Abgesehen davon kann die Antwortfunktion auch nur dann robust bestimmt werden, wenn die Helligkeitsunterschiede zwischen den Bildern groß sind.
Es ist nicht möglich Sättigung zu korrigieren. Bereiche, die gesättigt sind werden dies auch nach der Korrektur bleiben.
adjust_mosaic_images kann nur dazu verwendet werden unterschiedliche Helligkeit und Weißabgleich in Bildern zu korrigieren, wenn diese auf unterschiedlichen Belichtung (Zeit, Blende) oder unterschiedliche Beleuchtungsintensität zurück zu führen sind. Der Operator kann nicht dazu verwendet werden Helligkeitsunterschiede auszugleichen, die aus inhomogener Beleuchtung innerhalb der einzelnen Bilder resultieren.
Eingabebilder.
Ausgabebilder.
Liste der Startbilder.
Liste der Zielbilder.
Referenzbild.
Projektive Matrizen.
Schätzalgorithmus für die Korrektur.
Defaultwert: 'standard'
Werteliste: 'gold_standard', 'standard'
Zu bestimmende Parameter.
Defaultwert: ['mult_gray']
Werteliste: 'add_gray', 'mult_gray', 'no_cache', 'response', 'subsampling_2', 'subsampling_4', 'vignetting'
Modell zur Bestimmung der OECF.
Defaultwert: ['laguerre']
Werteliste: 'laguerre'
* For the input data to stationary_camera_self_calibration, please
* refer to the example for stationary_camera_self_calibration.
stationary_camera_self_calibration (4, 640, 480, 1, From, To, \
HomMatrices2D, Rows1, Cols1, \
Rows2, Cols2, NumMatches, \
'gold_standard', \
['focus','principal_point'], \
'true', CameraMatrix, Kappa, \
RotationMatrices, X, Y, Z, Error)
adjust_mosaic_images(Images,CorrectedImages,From,To,1,HomMatrices2D, \
'gold_standard',['mult_gray','response'],'laguerre')
Sind die Parameterwerte korrekt, dann liefert adjust_mosaic_images den Wert 2 (H_MSG_TRUE). Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.
stationary_camera_self_calibration
David Hasler, Sabine Süsstrunk: Mapping colour in image stitching applications. Journal of Visual Communication and Image Representation, 15(1):65-90, 2004.
Foundation
| Operatoren |