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 Ansatz. Dabei wird angenommen, dass die Vignettierung im Mittelpunkt des Bildes nicht existiert und mit dem Öffnungswinkel des Objektivs gemäß der obigen Gleichung zunimmt.
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.
Andernfalls 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.
Images
(input_object) (multichannel-)image-array →
object (byte)
Eingabebilder.
CorrectedImages
(output_object) (multichannel-)image-array →
object (byte)
Ausgabebilder.
From
(input_control) integer-array →
(integer)
Liste der Startbilder.
To
(input_control) integer-array →
(integer)
Liste der Zielbilder.
ReferenceImage
(input_control) integer →
(integer)
Referenzbild.
HomMatrices2D
(input_control) real-array →
(real)
Projektive Matrizen.
EstimationMethod
(input_control) string →
(string)
Schätzalgorithmus für die Korrektur.
Defaultwert: 'standard'
Werteliste: 'gold_standard' , 'standard'
EstimateParameters
(input_control) string(-array) →
(string)
Zu bestimmende Parameter.
Defaultwert: ['mult_gray']
Wertevorschläge: 'add_gray' , 'mult_gray' , 'response' , 'vignetting' , 'subsampling_2' , 'subsampling_4' , 'no_cache'
OECFModel
(input_control) string →
(string)
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