optical_flow_mgoptical_flow_mgOpticalFlowMgOpticalFlowMg (Operator)

Name

optical_flow_mgoptical_flow_mgOpticalFlowMgOpticalFlowMg — Berechnung des optischen Flusses zwischen zwei Bildern.

Signatur

optical_flow_mg(ImageT1, ImageT2 : VectorField : Algorithm, SmoothingSigma, IntegrationSigma, FlowSmoothness, GradientConstancy, MGParamName, MGParamValue : )

Herror optical_flow_mg(const Hobject ImageT1, const Hobject ImageT2, Hobject* VectorField, const char* Algorithm, double SmoothingSigma, double IntegrationSigma, double FlowSmoothness, double GradientConstancy, const char* MGParamName, const char* MGParamValue)

Herror T_optical_flow_mg(const Hobject ImageT1, const Hobject ImageT2, Hobject* VectorField, const Htuple Algorithm, const Htuple SmoothingSigma, const Htuple IntegrationSigma, const Htuple FlowSmoothness, const Htuple GradientConstancy, const Htuple MGParamName, const Htuple MGParamValue)

void OpticalFlowMg(const HObject& ImageT1, const HObject& ImageT2, HObject* VectorField, const HTuple& Algorithm, const HTuple& SmoothingSigma, const HTuple& IntegrationSigma, const HTuple& FlowSmoothness, const HTuple& GradientConstancy, const HTuple& MGParamName, const HTuple& MGParamValue)

HImage HImage::OpticalFlowMg(const HImage& ImageT2, const HString& Algorithm, double SmoothingSigma, double IntegrationSigma, double FlowSmoothness, double GradientConstancy, const HTuple& MGParamName, const HTuple& MGParamValue) const

HImage HImage::OpticalFlowMg(const HImage& ImageT2, const HString& Algorithm, double SmoothingSigma, double IntegrationSigma, double FlowSmoothness, double GradientConstancy, const HString& MGParamName, const HString& MGParamValue) const

HImage HImage::OpticalFlowMg(const HImage& ImageT2, const char* Algorithm, double SmoothingSigma, double IntegrationSigma, double FlowSmoothness, double GradientConstancy, const char* MGParamName, const char* MGParamValue) const

HImage HImage::OpticalFlowMg(const HImage& ImageT2, const wchar_t* Algorithm, double SmoothingSigma, double IntegrationSigma, double FlowSmoothness, double GradientConstancy, const wchar_t* MGParamName, const wchar_t* MGParamValue) const   (Nur Windows)

static void HOperatorSet.OpticalFlowMg(HObject imageT1, HObject imageT2, out HObject vectorField, HTuple algorithm, HTuple smoothingSigma, HTuple integrationSigma, HTuple flowSmoothness, HTuple gradientConstancy, HTuple MGParamName, HTuple MGParamValue)

HImage HImage.OpticalFlowMg(HImage imageT2, string algorithm, double smoothingSigma, double integrationSigma, double flowSmoothness, double gradientConstancy, HTuple MGParamName, HTuple MGParamValue)

HImage HImage.OpticalFlowMg(HImage imageT2, string algorithm, double smoothingSigma, double integrationSigma, double flowSmoothness, double gradientConstancy, string MGParamName, string MGParamValue)

Beschreibung

optical_flow_mgoptical_flow_mgOpticalFlowMgOpticalFlowMgOpticalFlowMg berechnet den optischen Fluss zwischen zwei Bildern. Der optische Fluss stellt die Bewegungsinformation zwischen zwei aufeinanderfolgenden Bildern einer monokularen Bildfolge dar. Die Bewegung in den Bildern kann durch Objekte entstehen, die sich zwischen den zwei Aufnahmen in der Welt bewegt haben oder dadurch, dass sich die Kamera zwischen den zwei Aufnahmen bewegt hat (oder beides). Die Projektion dieser 3D-Bewegungen in die 2D-Bildebene wird als Optischer Fluss bezeichnet.

Die beiden aufeinanderfolgenden Bilder der Bildfolge werden in ImageT1ImageT1ImageT1ImageT1imageT1 und ImageT2ImageT2ImageT2ImageT2imageT2 übergeben. Der berechnete optische Fluss wird in VectorFieldVectorFieldVectorFieldVectorFieldvectorField zurückgeliefert. Die Vektoren im Vektorfeld VectorFieldVectorFieldVectorFieldVectorFieldvectorField stellen die Bewegung zwischen ImageT1ImageT1ImageT1ImageT1imageT1 und ImageT2ImageT2ImageT2ImageT2imageT2 in der Bildebene dar. Der zu einem Punkt (r,c) in ImageT1ImageT1ImageT1ImageT1imageT1 in ImageT2ImageT2ImageT2ImageT2imageT2 zugeordnete Punkt ist also gegeben durch (r',c') = (r+u(r,c),c+v(r,c)), wobei u(r,c) und v(r,c) den Wert der Zeilen- bzw. Spaltenkomponente des Vektorfeldbildes VectorFieldVectorFieldVectorFieldVectorFieldvectorField am Punkt (r,c) bezeichnen.

Der Parameter AlgorithmAlgorithmAlgorithmAlgorithmalgorithm erlaubt es, zwischen drei verschiedenen Verfahren zur Berechnung des optischen Flusses auszuwählen. Alle drei Verfahren sind mit Hilfe von numerischen Mehrgitterverfahren implementiert, um eine effiziente Berechnung der zugrundeliegenden partiellen Differentialgleichungen zu ermöglichen.

Für AlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'fdrig'"fdrig""fdrig""fdrig""fdrig" wird das Verfahren von Brox, Bruhn, Papenberg und Weickert verwendet. Dieses Verfahren ist flussgetrieben, robust, isotrop und mit einem Gradientenkonstanzterm (flow-driven, robust, isotropic with gradient constancy).

Für AlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'ddraw'"ddraw""ddraw""ddraw""ddraw" wird eine robuste Variante des Verfahrens von Nagel und Enkelmann mit Warping verwendet. Dieses Verfahren ist datengetrieben, robust, anisotrop und verwendet (im Gegensatz zum Originalansatz) Warping (data-driven, robust, anisotropic with warping).

Für AlgorithmAlgorithmAlgorithmAlgorithmalgorithm = 'clg'"clg""clg""clg""clg" wird das kombinierte lokale-globale Verfahren (combined local-global) von Bruhn, Weickert, Feddern, Kohlberger und Schnörr verwendet.

In allen Verfahren können die Eingabebilder zunächst mit einem Gaußfilter mit einer Standardabweichung von SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma geglättet werden (siehe derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGauss).

Alle drei Verfahren gehören zu der Klasse der sogenannten Variationsansätze, die den optischen Fluss durch die Minimierung eines geeigneten Energiefunktionals berechnen. Im allgemeinen haben solche Energiefunktionale die Form wobei w=(u,v,1) das gesuchte Verschiebungsvektorfeld (mit einem Zeitschritt von 1 in der dritten Koordinate) ist. Die Bildfolge wird als kontinuierliche Funktion f(x) mit x=(r,c,t) betrachtet, wobei (r,c) für den Ort im Bildbereich steht und t die Zeit angibt. Weiterhin bezeichnen den Datenterm, den Glattheitsterm und einen Regularisierungsparameter, der die Glattheit der Lösung bestimmt. Der Regularisierungsparameter wird in FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness übergeben. Während im Datenterm Annahmen über die Konstanz von Objektmerkmalen in aufeinanderfolgenden Bildern formuliert werden, z.B. die Konstanz des Grauwerts oder der ersten räumlichen Ableitung des Grauwerts, verkörpert der Glattheitsterm Annahmen über die (stückweise) Glattheit der Lösung, d.h. die Glattheit des gesuchten Verschiebungsvektorfelds.

Das FDRIG-Verfahren basiert auf der Minimierung eines Energiefunktionals, das folgende Annahmen beinhaltet:

Konstanz des Grauwerts: Es wird angenommen, dass zueinander gehörende Pixel in aufeinanderfolgenden Bildern einer Bildfolge den gleichen Grauwert haben, also dass f(r+u,c+v,t+1) = f(r,c,t) gilt. Dies kann in Vektorschreibweise auch kompakter als f(x+w) = f(x) formuliert werden.

Konstanz der räumlichen Grauwertableitungen: Es wird angenommen, dass zueinander gehörende Pixel in aufeinanderfolgenden Bildern einer Bildfolge darüber hinaus auch die gleichen räumlichen Grauwertableitungen haben, also dass zusätzlich gilt, wobei . Dies kann kompakter als formuliert werden. Gegenüber der Grauwertkonstanz bietet die Gradientenkonstanz den Vorteil, dass sie invariant gegenüber additiven globalen Helligkeitsschwankungen ist.

Große Verschiebungen: Es wird außerdem angenommen, dass große Verschiebungen, d.h. Verschiebungen, die größer als ein Pixel sind, auftreten können. Unter dieser Annahme ist es sinnvoll, bewusst auf die Linearisierung der Konstanzannahmen im Modell zu verzichten, die üblicherweise in der Literatur vorgeschlagen werden.

Statistische Robustheit im Datenterm: Um starken Verletzungen der Konstanzannahmen durch Ausreißer weniger Bedeutung beizumessen, werden diese statistisch robust bestraft, d.h. die übliche nicht-robuste quadratische Bestrafung wird durch eine lineare Bestrafung mittels ersetzt, wobei eine feste Regularisierungskonstante ist.

Diskontinuitätenerhaltung im Flussfeld I: In Bezug auf die Lösung wird angenommen, dass diese stückweise glatt ist. Während die eigentliche Glattheit durch Bestrafungen der ersten Flussableitungen erreicht wird, sorgt die Verwendung einer robusten (linearen) Straffunktion mit für die gewünschten Erhaltung von Bewegungskanten im zu berechnenden Flussfeld. Dieser Typ des Glattheitsterms wird als flussgetrieben isotrop bezeichnet

Unter der Berücksichtigung all dieser Annahmen lässt sich das Energiefunktional für das FDRIG-Verfahren als schreiben. Hierbei ist der in FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness übergebene Regularisierungsparameter und das in GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancy übergebene Gewicht der Gradientenkonstanz. Diese beiden Gewichte, die die Modellparameter des FDRIG-Verfahrens darstellen, werden weiter unten noch genauer beschrieben.

Das DDRAW-Verfahren basiert auf der Minimierung eines Energiefunktionals, das folgende Annahmen beinhaltet:

Konstanz des Grauwertes: Es wird angenommen, dass zueinander gehörende Pixel in aufeinanderfolgenden Bildern einer Bildfolge den gleichen Grauwert haben, also dass f(x+w) = f(x) gilt.

Große Verschiebungen: Es wird außerdem angenommen, dass große Verschiebungen, d.h. Verschiebungen, die größer als ein Pixel sind, auftreten können. Unter dieser Annahme ist es sinnvoll, bewusst auf die Linearisierung der Konstanzannahmen im Modell zu verzichten, die üblicherweise in der Literatur vorgeschlagen werden.

Statistische Robustheit im Datenterm: Um starken Verletzungen der Konstanzannahmen durch Ausreißer weniger Bedeutung beizumessen, werden diese statistisch robust bestraft, d.h. die übliche nicht-robuste quadratische Bestrafung wird durch eine lineare Bestrafung mittels ersetzt, wobei eine feste Regularisierungskonstante ist.

Diskontinuitätenerhaltung im Flussfeld II: In Bezug auf die Lösung wird angenommen, dass diese stückweise glatt ist. Im Gegensatz zum FDRIG-Verfahren, das Diskontinuitäten überall zulässt, respektiert das DDRAW-Verfahren nur Diskontinuitäten an Kanten im Originalbild. Dabei wird die lokale Glattheit so gesteuert, dass das Flussfeld über Bildkanten hinweg scharf ist, entlang von Bildkanten jedoch glatt. Dieser Typ des Glattheitsterms nennt sich datengetrieben anisotrop.

Alle Annahmen des DDRAW-Verfahrens lassen sich in einem einzigen Energiefunktional vereinigen: wobei eine normalisierte Projektionsmatrix orthogonal zu ist, für die gilt: Diese Matrix sorgt dafür, dass nur in Richtung der Bildkanten eine Glattheit des Flussfelds angenommen wird. Bezüglich der Glattheit über die Bildkanten hinweg werden jedoch keine Annahmen formuliert, so dass genau in diese Richtung Diskontinuitäten in der Lösung auftreten dürfen. In diesem Zusammenhang dient als Regularisierungsparameter, der verhindert, dass die Projektionsmatrix singulär wird. Im Gegensatz zum FDRIG-Verfahren gibt es beim DDRAW-Verfahren nur einen Modellparameter: den Regularisierungsparameter . Wie zuvor erwähnt, wird dieser unten noch genauer beschrieben.

Wie den beiden zuvor besprochenen Verfahren liegen auch dem CLG-Verfahren bestimmte Annahmen zu Grunde:

Konstanz des Grauwertes: Es wird angenommen, dass zueinander gehörende Pixel in aufeinanderfolgenden Bildern einer Bildfolge den gleichen Grauwert haben, also dass f(x+w) = f(x) gilt.

Kleine Verschiebungen: Im Gegensatz zu beiden vorigen Verfahren wird außerdem angenommen, dass nur kleine Verschiebungen auftreten können, d.h. Verschiebungen im Bereich weniger Pixel. Dies erlaubt eine Linearisierung der Konstanzannahmen im Modell. Dies führt auf die Approximation , d.h. es soll gelten: . Hiebei ist mit der Gradient über sowohl den Ort als auch die Zeit bezeichnet.

Lokale Konstanz der Lösung: Desweiteren geht man davon aus, dass das zu berechnende Flussfeld lokal konstant ist. Dies erlaubt die Integration der Bilddaten im Datenterm über die jeweilige Umgebung eines Bildpunktes. Dies wiederum erhöht die Robustheit des Verfahrens gegenüber Rauschen. Mathematisch lässt sich dies durch eine Umformulierung des quadratischen Datenterms erreichen: . Durch lokale Gauß-gewichtete Integration über eine Nachbarschaft der Größe (übergeben in IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma) ergibt sich dann folgender Datenterm: . Hierbei bezeichnet eine Faltung der 3x3 Matrix mit einem Gaußfilter mit einer Standardabweichung von (siehe derivate_gaussderivate_gaussDerivateGaussDerivateGaussDerivateGauss).

Allgemeine Glattheit des Flussfelds: Schließlich wird im Bezug auf die Lösung angenommen, dass sie überall im Bildbereich glatt ist. Dieser spezielle Typ des Glattheitsterms wird als homogen bezeichnet.

Auch im Fall des CLG-Verfahrens lassen sich alle Annahmen in einem gemeinsamem Energiefunktional formulieren. Dieses lautet: Die zugehörigen Modellparameter sind der Regularisierungsparameter sowie die Integrationsskala (übergeben in IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma), die die Größe der zu integrierenden Nachbarschaft im Datenterm angibt. Diese beiden Parameter sind weiter unten genauer beschrieben.

Um das gewünschte Verschiebungsvektorfeld zwischen zwei aufeinanderfolgenden Bildern einer Bildfolge mit dem FDRIG-, dem DDRAW- oder dem CLG-Verfahren zu berechnen, muss diejenige Lösung gesucht werden, die die Annahmen des jeweiligen Verfahren am besten erfüllt. Aus mathematischer Sicht bedeutet das, dass man an einer Minimierung der oben beschriebenen Energiefunktionale interessiert ist. Bei dieser Minimierung spielen im Rahmen der ersten beiden Funktionale (FDRIG und DDRAW) sogenannte Coarse-to-Fine-Warping-Strategien eine wichtige Rolle, da sie es erlauben, große Verschiebungen zu schätzen. Sie sind damit ein geeignetes Mittel, um den bewussten Verzicht der beiden Verfahren auf eine Linearisierung der Konstanzannahmen im Datenterm numerisch umzusetzen.

Um große Verschiebungen schätzen zu können, machen Coarse-to-Fine-Warping-Strategien von zwei Konzepten Gebrauch, die beide eng miteinander verzahnt sind: Die sukzessive Verfeinerung der Problemstellung (Coarse-to-Fine) und die fortlaufende Kompensation des aktuelles Bildpaares um bereits berechnete Verschiebungen (Warping). Algorithmisch lässt sich eine solche Coarse-to-Fine-Warping-Strategie wie folgt formulieren:

1. Zunächst werden beide Bilder des aktuellen Bildpaares auf eine sehr grobe Auflösungsstufe heruntergesampelt.

2. Dann wird das Verschiebungsvektorfeld auf dieser groben Auflösung berechnet.

3. Dieses Vektorfeld wird auf der nächstfeineren Auflösungsstufe benötigt: Es wird dort aus dem zweiten Bild der Bildfolge herausgerechnet, d.h. die Problemstellung auf der feineren Auflösungsstufe wird um das bereits berechnete Flussfeld kompensiert. Dieser Schritt wird auch als Warping bezeichnet.

4. Das so modifizierte Problem (Differenzproblem) wird nun auf der feineren Auflösungsstufe gelöst, d.h. das Verschiebungsvektorfeld wird dort berechnet.

5. Die Schritte 3-4 werden wiederholt, bis die ursprüngliche Auflösung erreicht wird.

6. Das letzendliche Ergebnis wird durch Addition der Verschiebungsvektorfelder aller Auflösungsstufen gebildet.

Diese inkrementelle Berechnung des Verschiebungsvektorfelds bietet folgenden Vorteil: Während das Coarse-to-Fine-Konzept sicherstellt, dass die Verschiebungen auf der gröbsten Auflösungsstufe sehr klein sind, sorgt die Warping-Strategie dafür, dass das auch für die zu berechnenden Verschiebungsinkremente (Verschiebungsvektorfelder der Differenzprobleme) so bleibt. Da kleine Verschiebungen viel genauer berechnet werden können als größere, nimmt durch den Einsatz einer solchen Coarse-to-Fine-Warping-Strategie die Schätzqualität im allgemeinen deutlich zu. Jedoch muss anstelle eines einzelnen Korrespondenzproblems eine Hierarchie von ebensolchen Problemen gelöst werden. Im Rahmen des CLG-Verfahrens ist solch eine Coarse-to-Fine-Warping-Strategie nicht notwendig. Dort geht man bereits im Modell von kleineren Verschiebungen aus.

Die maximale Anzahl der Auflösungsstufen (Warpingebene), das Auflösungsverhältnis zwischen zwei aufeinanderfolgenden Auflösungsstufen, sowie die feinste Auflösungsstufe lassen sich sowohl beim FDRIG- als auch beim DDRAW-Verfahren spezifieren. Nähere Details hierzu sind weiter unten zu finden.

Die Minimierung von Funktionalen ist aus mathematischer Sicht sehr eng mit der Minimierung von Funktionen verwandt: So wie eine Nullstelle der ersten Ableitung eine notwendige Bedingung für ein Minimum einer Funktion ist, ist die Erfüllung der sogenannten Euler-Lagrange-Gleichungen eine notwendige Bedingung für die minimierende Funktion eines Funktionals (die minimierende Funktion entspricht hier dem gesuchten Verschiebungsvektorfeld). Die Euler-Lagrange-Gleichungen sind partielle Differentialgleichungen. Durch die Diskretisierung dieser Euler-Lagrange-Gleichungen mit Hilfe finiter Differenzen entstehen im Fall des FDRIG- und des DDRAW-Verfahrens große dünnbesetzte nichtlineare Gleichungssysteme. Aufgrund der Verwendung der oben beschriebenen Coarse-to-Fine-Warping-Strategien muss ein solches Gleichungssystem für jede Auflösungsstufe, d.h. für jede Warpingebene, gelöst werden. Im Fall des CLG-Verfahrens entsteht hingegen ein einzelnes großes dünnbesetztes lineares Gleichungssystem.

Um ein effizientes Lösen dieser nichtlinearen Gleichungssysteme zu gewährleisten, greifen sowohl das FDRIG- als auch das DDRAW-Verfahren auf sogenannte bidirektionale Mehrgitterverfahren zurück. Aus numerischer Sicht gehören diese Strategien zu den schnellsten Verfahren zum Lösen linearer und nichtlinearer Gleichungssysteme überhaupt. Im Gegensatz zu herkömmlichen nichthierarchischen iterativen Verfahren, wie z.B. den verschiedenen linearen und nichtlinearen Gauß-Seidel-Varianten, bieten solche Mehrgitterstrategien den Vorteil, Korrekturen der Lösung effizient auf gröberen Auflösungsstufen berechnen zu können. Dies führt wiederum zu einer erheblich schnelleren Konvergenz. Die grundlegende Idee von Mehrgitterverfahren besteht darüber hinaus darin, dass diese Korrekturschritte hierarchisch ausgeführt werden, d.h. dass die Berechnung des Fehlers auf der groben Auflösungsstufe selbst auf die gleiche Strategie zurückgreift und ihren eigenen Fehler (also den Fehler des Fehlers) durch Korrekturschritte auf einer noch gröberen Auflösungsstufe effizient berechnet. Je nachdem, ob ein oder zwei Fehlerkorrekturschritte pro Zyklus gemacht werden, spricht man von sogenannten V- oder W-Zyklen. Die zugehörigen Auflösungsdurchlaufstrategien sehen mit zwei bis vier Auflösungsstufen wie folgt aus: Hierbei werden Iterationen auf dem Originalproblem mit großen Markierungen symbolisiert, während kleine Markierungen für Iterationen auf Fehlerkorrekturproblemen stehen.

Algorithmisch lässt sich ein solcher Korrekturzyklus wie folgt beschreiben:

1. In einem ersten Schritt werden einige wenige Iterationen mit einem iterativen linearen oder nichtlinearen Basislöser (z.B. einer Gauß-Seidel-Variante) gemacht. Dieser Schritt nennt sich Fehlervorglättungsiterationsschritt.

2. In einem zweiten Schritt wird der aktuelle Fehler berechnet, um die bisherige Lösung (die Lösung nach Schritt 1) zu korrigieren. Aus Effizienzgründen findet diese Fehlerberechnung auf einer gröberen Auflösungsstufe statt. Dieser Schritt, der mehrfach wiederholt werden kann, nennt sich Grobgitterkorrekturschritt.

3. In einem letzten Schritt werden erneut einige wenige Iterationen mit dem gleichen iterativen linearen oder nichtlinearen Basislöser wie in Schritt 1 gemacht. Dieser Schritt nennt sich Fehlernachglättungsiterationsschritt.

Darüber hinaus besteht noch die Möglichkeit einer hierarchischen Initialisierung. Ausgehend von einer sehr groben Variante des ursprünglichen (nicht)linearen Gleichungssystems wird die Lösung sukzessive verfeinert. Dabei werden interpolierte Lösungen von gröberen Varianten des Gleichungssystems als Initialisierung der jeweils nächstfeineren Variante verwendet. Auf jeder Auflösungsstufe selbst kommen dann die zuvor beschriebenen V- oder W-Korrekturzyklen zum Einsatz, um das dortige (nicht)lineare Gleichungssystem effizient zu lösen. Die entsprechenden Mehrgitterverfahren werden in der Literatur als volle Mehrgitterverfahren bezeichnet. Diese Vorgehensweise kann wie folgt veranschaulicht werden: Dieses Beispiel stellt ein volles Mehrgitterverfahren mit zwei W-Korrekturzyklen pro Auflösungsstufe der hierarchischen Initialisierung dar. Die Interpolationsschritte der Lösung von einer Stufe zur nächsten sind mit i bezeichnet, die beiden W-Korrekturzyklen mit und . Während Iterationen auf dem Originalproblem mit großen Markierungen symbolisiert werden, stehen kleine Markierungen für Iterationen auf Fehlerkorrekturproblemen.

Im Rahmen der Mehrgitterimplementation des FDRIG-Verfahrens, des DDRAW- sowie des CLG-Verfahrens lassen sich folgende Parameter frei wählen: ob eine hierarchische Initialisierung stattfindet; die Anzahl der Grobgitterkorrekturschritte; die Anzahl der Korrekturzyklen; die maximale Anzahl an Korrekturebenen (Auflösungsstufen); die Anzahl der Fehlervorglättungsiterationen; die Anzahl der Fehlernachglättungsiterationen. Diese Parameter werden weiter unten noch genauer erklärt.

Als Basislöser für das FDRIG-Verfahren wird eine punktgekoppelte Fixpunktvariante des linearen Gauß-Seidel-Verfahrens verwendet, als Basislöser für das DDRAW-Verfahren eine alternierend liniengekoppelte Fixpunktvariante des gleichen Typs. Die Anzahl der Fixpunktschritte lässt sich dabei bei beiden Verfahren ebenfalls durch einen zusätzlichen Parameter spezifizieren. Der Basislöser für das CLG-Verfahren ist ein punktgekoppeltes lineares Gauß-Seidel-Verfahren. Der Transfer von Daten zwischen verschiedenen Auflösungsstufen erfolgt durch flächenbasierte Interpolation bzw. durch flächenbasierte Mittelung.

Nachdem die verwendeten Verfahren beschrieben wurden, können die Auswirkungen der einzelnen Parameter detailliert beschrieben werden.

Die Eingabebilder werden mit ihren Definitionsbereichen (Regionen) in ImageT1ImageT1ImageT1ImageT1imageT1 und ImageT2ImageT2ImageT2ImageT2imageT2 übergeben. Die Berechnung des Vektorfeldes VectorFieldVectorFieldVectorFieldVectorFieldvectorField erfolgt auf dem kleinsten umschließenden Rechteck des Schnittes der Definitionsbereiche von ImageT1ImageT1ImageT1ImageT1imageT1 und ImageT2ImageT2ImageT2ImageT2imageT2. Der Definitionsbereich von VectorFieldVectorFieldVectorFieldVectorFieldvectorField ist der Schnitt der beiden Definitionsbereiche. Daher kann durch Angabe von eingeschränkten Definitionsbereichen in ImageT1ImageT1ImageT1ImageT1imageT1 und ImageT2ImageT2ImageT2ImageT2imageT2 die Verarbeitung fokussiert werden, und u.U. Laufzeit gespart werden. Allerdings ist dabei zu beachten, dass alle Verfahren eine globale Lösung des optischen Flusses berechnen. Daraus folgt insbesondere, dass eine Lösung auf einem eingeschränkten Definitionsbereich nicht die eingeschränkte Lösung auf dem vollen Definitionsbereich sein muss (und kann).

SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma beschreibt die Standardabweichung des Gaußkerns, mit dem jedes Eingangsbild gefaltet wird. Je größer der Wert für SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma, desto größer ist die Tiefpasswirkung des Gaußkerns, d.h. desto glatter wird das vorverarbeitete Bild. Im Normalfall stellt ein Wert von SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma = 0.8 eine gute Wahl dar, aber auch andere Werte im Intervall [0,2] sind denkbar. Größere Standardabweichungen sollten nur in Betracht gezogen werden, falls das Eingangsbild stark verrauscht ist. Dabei ist jedoch zu beachten, dass größere Werte für SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma eine leichte Erhöhung der Laufzeit zur Folge haben.

IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma beschreibt die Standardabweichung des Gaußkerns , der zur lokalen Integration der Nachbarschaftsinformation im Datenterm verwendet wird. Dieser Parameter wird nur beim CLG-Verfahren verwendet und hat bei den anderen beiden Verfahren keinen Einfluss auf das Ergebnis. Im Normalfall stellt ein Wert von IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma = 1.0 eine gute Wahl dar, aber auch andere Werte im Intervall [0,3] sind denkbar. Größere Standardabweichungen sollten nur in Betracht gezogen werden, falls das Eingangsbild stark verrauscht ist. Dabei ist jedoch zu beachten, dass größere Werte für IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma eine leichte Erhöhung der Laufzeit zur Folge haben.

FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness spezifiziert das Gewicht des Glattheitsterms gegenüber dem Datenterm. Je größer der Wert für FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness ist, desto glatter wird das berechnete Flussfeld. Dabei sollte beachtet werden, dass zu kleine Werte für FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness trotz statistisch robuster Bestrafungsfunktionen zu unbrauchbaren Ergebnissen führen können, insbesondere dann, wenn die verwendete Warping-Strategie zu viel Information jenseits des Bildbereichs vorhersagen muss. Bei der Verwendung von Byte-Bildern mit einem Wertebereich von [0,255] liefern Werte für FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness von etwa 20 im Fall des flussgetriebenen FDRIG-Verfahrens und Werte von etwa 1000 im Fall des bildgetriebenen DDRAW-Verfahrens bzw. des homogenen CLG-Verfahrens im Normalfall gute Ergebnisse.

GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancy beschreibt das Gewicht der Gradientenkonstanz gegenüber der Grauwertkonstanz. Dieser Parameter wird nur beim FDRIG-Verfahren verwendet. Bei den anderen beiden Verfahren hat er keinen Einfluss auf das Ergebnis. Für Grauwertbilder mit einem Wertebereich von [0,255] ist meist ein Wert um GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancy = 5 sinnvoll, da beide Konstanzannahmen in ähnlichem Ausmaß berücksichtigt werden. Bei starken Beleuchtungswechseln können jedoch auch wesentlich größere Werte für GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancy erforderlich sein, um gute Ergebnisse zu erzielen. Dabei ist zu beachten, dass bei großen Werten für das Gradientengewicht auch der Glattheitsparameter FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness entsprechend größer gewählt werden muss.

Die Parameter für den Mehrgitterlöser und die Coarse-to-Fine-Warping-Strategie lassen sich mit den generischen Parametern MGParamNameMGParamNameMGParamNameMGParamNameMGParamName und MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue einstellen. Im Normalfall ist es ausreichend, einen der vier weiter unten beschriebenen Standardparametersätze über MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" und MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue = 'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate", 'accurate'"accurate""accurate""accurate""accurate", 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate" oder 'fast'"fast""fast""fast""fast" auszuwählen. Falls die Parameter einzeln angegeben werden sollen, ist in MGParamNameMGParamNameMGParamNameMGParamNameMGParamName und MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue jeweils ein gleichlanges Tupel von Werten zu übergeben. Dabei müssen die Werte für die in MGParamNameMGParamNameMGParamNameMGParamNameMGParamName angegebenen Parameter an der jeweiligen Stelle des Tupels MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue spezifiziert werden.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" kann das Auflösungsverhältnis zwischen zwei aufeinanderfolgenden Warpingebenen in der Coarse-to-Fine-Warping-Hierarchie festgelegt werden. Dabei muss 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" im offenen Intervall (0,1) gewählt werden. Aus Performanzgründen wird üblicherweise 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.5 gewählt, d.h. die Pixelanzahl der Eingangsbilder wird von einer Warpingebene zur nächsten in jede Richtung halbiert. Dies führt zu einem zusätzlichen Rechenaufwand von etwa 33% gegenüber einem Verfahren ohne Warping. Werte für 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" näher bei 1 können zu qualitativ leicht besseren Ergebnissen führen, benötigen aber unverhältnismäßig viel Rechenzeit, z.B. einen Mehraufwand von 426% bei 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.9.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" kann die Warpinghierarchie auf eine maximale Anzahl von Ebenen beschränkt werden. Für 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" = 0 wird die maximal mögliche Anzahl von Ebenen gewählt. Sollte die Bildgröße bei einem gegebenen Auflösungsverhältnis 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" die gewählte Anzahl an Ebenen nicht zulassen, wird die maximal mögliche Anzahl an Ebenen verwendet. Im Normalfall sollte 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" auf 0 gesetzt werden.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level" kann die Anzahl der Warpingebenen an, für die kein Bewegungsinkrement mehr berechnet werden soll, festgelegt werden. Normalerweise wird diese Anzahl entweder auf 1 oder 2 gesetzt, d.h. es wird entweder auf jeder Warpingebene ein Bewegungsinkrement berechnet, oder die feinste Warpingebene wird bei der Berechnung ausgelassen. Da im letzten Fall nur auf halber Auflösung gerechnet wird, kann die gewonnene Rechenzeit zur genaueren Bestimmung der Lösung verwendet werden, d.h. es kann z.B. ein volles Mehrgitterverfahren mit zusätzlichen Iterationen in Betracht gezogen werden. Die genauere Lösung wird dann auf die volle Auflösung interpoliert.

Die drei Parameter, die die Coarse-to-Fine-Warping-Strategie bestimmen, haben nur bei dem FDRIG- und dem DDRAW-Verfahren einen Einfluss auf die Lösung. Bei dem CLG-Verfahren werden sie ignoriert.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" kann die allgemeine Mehrgitterstrategie zur Lösung des (nicht)linearen Gleichungssystems (in jeder Warpingebene) festgelegt werden. Für 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'multigrid'"multigrid""multigrid""multigrid""multigrid" wird ein normales Mehrgitterverfahren (ohne Coarse-to-Fine-Initialisierung) verwendet, während für 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid" ein volles Mehrgitterverfahren (mit Coarse-to-Fine-Initialisierung) verwendet wird. Da zwischen zwei aufeinanderfolgenden Ebenen der Coarse-to-Fine-Initialisierung eine Auflösungsreduktion um den Faktor 0.5 verwendet wird (dieser Wert ist im Gegensatz zu der Auflösungsreduktion bei der Warping-Strategie fest kodiert), bedeutet die Verwendung eines vollen Mehrgitterverfahrens einen Mehraufwand von etwa 33% gegenüber einem normalen Mehrgitterverfahren. Bei der Wahl von 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid" ergeben sich typischerweise numerisch genauere Ergebnisse als für 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'multigrid'"multigrid""multigrid""multigrid""multigrid".

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" kann festgelegt werden, ob ein V- oder ein W-Korrekturzyklus pro Mehrgitterebene verwendet werden. Bei der verwendeten Auflösungsreduktion um den Faktor 0.5 zwischen zwei aufeinanderfolgenden Ebenen des jeweiligen Korrekturzyklus erhöht die Verwendung eines W-Zyklus an Stelle eines V-Zyklus den Rechenaufwand um 50%. Bei der Wahl von 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'w'"w""w""w""w" ergeben sich typischerweise numerisch genauere Ergebnisse als für 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'v'"v""v""v""v".

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" kann die Mehrgitterhierarchie sowohl für die Coarse-to-Fine-Initialisierung als auch für die eigentlichen V- oder W-Korrekturzyklen auf eine maximale Anzahl von Ebenen beschränkt werden. Für 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" = 0 wird die maximal mögliche Anzahl von Ebenen gewählt. Sollte die Bildgröße die gewählte Anzahl an Ebenen nicht zulassen, wird die maximal mögliche Anzahl an Ebenen verwendet. Im Normalfall sollte 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" auf 0 gesetzt werden.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" kann die gesamte Anzahl von V- oder W-Korrekturzyklen, die durchgeführt werden, festgelegt werden. Im Falle der Verwendung eines vollen Mehrgitterverfahrens bezieht sich 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" auf jede Ebene der Coarse-to-Fine-Initialisierung. Im Normalfall sind ein oder zwei Zyklen ausreichend, um eine hinreichend genaue Lösung des Gleichungssystems zu erhalten. Je größer 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" gewählt wird, desto genauer werden typischerweise die numerischen Ergebnisse. Dieser Parameter geht fast linear in die Laufzeit ein, d.h. eine Verdopplung der Zyklen führt in etwa auch zu einer Verdopplung des Rechenaufwands.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" kann die Anzahl der Iterationen festgelegt werden, die auf jeder Ebene eines V- oder W-Korrekturzyklus mit dem iterativen Basislöser vor der eigentlichen Fehlerkorrektur durchgeführt werden. Im Normalfall sind ein oder zwei Fehlervorglättungsiterationen ausreichend. Je größer 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" gewählt wird, desto genauer werden typischerweise die numerischen Ergebnisse.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" kann die Anzahl der Iterationen festgelegt werden, die auf jeder Ebene eines V- oder W-Korrekturzyklus mit dem iterativen Basislöser nach der eigentlichen Fehlerkorrektur durchgeführt werden. Im Normalfall sind ein oder zwei Fehlernachglättungsiterationen ausreichend. Je größer 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" gewählt wird, desto genauer werden typischerweise die numerischen Ergebnisse.

Wie bei der Erhöhung der Anzahl der Korrekturzyklen geht eine gleichzeitige Erhöhung der Anzahl der Fehlervor- und Fehlernachglättungsiterationen asymptotisch linear in die Laufzeit ein, allerdings fallen keine zusätzlichen Restriktions- und Prolongationsoperationen (Verkleinerungen und Vergrößerungen der Fehlerkorrekturbilder) an. Für eine moderate Erhöhung nimmt der Mehraufwand deshalb nur leicht zu.

Mit MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter" kann die Anzahl der Iterationen zum Lösen der linearen Gleichungssysteme innerhalb jeder Fixpunktiteration des nichtlinearen Basislösers festgelegt werden. Im Normalfall ist eine Iteration ausreichend, um eine ausreichende Konvergenzgeschwindigkeit des Mehrgitterverfahrens zu erreichen. Die Zunahme des Rechenaufwandes bei Erhöhung der Iterationsanzahl ist noch etwas geringer als bei der Erhöhung der Fehlervor- und Fehlernachglättungsiterationen. Dieser Parameter beeinflusst nur das FDRIG- und das DDRAW-Verfahren, da beim CLG-Verfahren kein nichtlineares Gleichungssystem gelöst werden muss.

Wie oben beschrieben, ist es im Normalfall ausreichend, einen der Standardparametersätze für die oben beschriebenen Parameter über MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" und MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue = 'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate", 'accurate'"accurate""accurate""accurate""accurate", 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate" oder 'fast'"fast""fast""fast""fast" auszuwählen. Dabei können im Bedarfsfall noch einzelne Parameter nach der Auswahl der Standardparametersätze modifiziert werden, indem nach dem Wert 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" in MGParamNameMGParamNameMGParamNameMGParamNameMGParamName noch eine Untermenge der obigen Parameter angegeben wird und in MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue ein entsprechender Wert übergeben wird (z.B. MGParamNameMGParamNameMGParamNameMGParamNameMGParamName = ['default_parameters','warp_zoom_factor']["default_parameters","warp_zoom_factor"]["default_parameters","warp_zoom_factor"]["default_parameters","warp_zoom_factor"]["default_parameters","warp_zoom_factor"] und MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue = ['accurate',0.6]["accurate",0.6]["accurate",0.6]["accurate",0.6]["accurate",0.6]).

Im einzelnen entsprechen die Standardparametersätze folgenden Werten:

'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" = 'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate": 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.5, 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" = 0, 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level" = 1, 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'w'"w""w""w""w", 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" = 0, 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" = 1, 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" = 2, 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" = 2, 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter" = 1.

'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" = 'accurate'"accurate""accurate""accurate""accurate": 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.5, 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" = 0, 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level" = 1, 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'multigrid'"multigrid""multigrid""multigrid""multigrid", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'v'"v""v""v""v", 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" = 0, 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" = 1, 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" = 1, 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" = 1, 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter" = 1.

'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" = 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate": 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.5, 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" = 0, 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level" = 2, 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'w'"w""w""w""w", 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" = 0, 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" = 1, 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" = 2, 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" = 2, 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter" = 1.

'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters" = 'fast'"fast""fast""fast""fast": 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor" = 0.5, 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels" = 0, 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level" = 2, 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver" = 'multigrid'"multigrid""multigrid""multigrid""multigrid", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type" = 'v'"v""v""v""v", 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels" = 0, 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles" = 1, 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax" = 1, 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax" = 1, 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter" = 1.

Es ist zu beachten, dass die beiden Modi 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate" und 'fast'"fast""fast""fast""fast" für das CLG-Verfahren identisch zu den Modi 'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate" und 'accurate'"accurate""accurate""accurate""accurate" sind, da das CLG-Verfahren keine Coarse-to-Fine-Warping-Strategie verwendet.

Ausführungsinformationen

Parameter

ImageT1ImageT1ImageT1ImageT1imageT1 (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / real)

Eingabebild 1.

ImageT2ImageT2ImageT2ImageT2imageT2 (input_object)  singlechannelimage(-array) objectHImageHImageHobject (byte / uint2 / real)

Eingabebild 2.

VectorFieldVectorFieldVectorFieldVectorFieldvectorField (output_object)  singlechannelimage(-array) objectHImageHImageHobject * (vector_field)

Optischer Fluss.

AlgorithmAlgorithmAlgorithmAlgorithmalgorithm (input_control)  string HTupleHTupleHtuple (string) (string) (HString) (char*)

Algorithmus zur Bestimmung des optischen Flusses.

Defaultwert: 'fdrig' "fdrig" "fdrig" "fdrig" "fdrig"

Werteliste: 'clg'"clg""clg""clg""clg", 'ddraw'"ddraw""ddraw""ddraw""ddraw", 'fdrig'"fdrig""fdrig""fdrig""fdrig"

SmoothingSigmaSmoothingSigmaSmoothingSigmaSmoothingSigmasmoothingSigma (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Standardabweichung für initiale Gaußsche Glättung.

Defaultwert: 0.8

Wertevorschläge: 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0

Restriktion: SmoothingSigma >= 0.0

IntegrationSigmaIntegrationSigmaIntegrationSigmaIntegrationSigmaintegrationSigma (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Standardabweichung des Integrationsfilters.

Defaultwert: 1.0

Wertevorschläge: 0.0, 0.2, 0.4, 0.6, 0.8, 1.0, 1.2, 1.4, 1.6, 1.8, 2.0, 2.2, 2.4, 2.6, 2.8, 3.0

Restriktion: IntegrationSigma >= 0.0

FlowSmoothnessFlowSmoothnessFlowSmoothnessFlowSmoothnessflowSmoothness (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Gewicht des Glattheitsterms gegenüber dem Datenterm.

Defaultwert: 20.0

Wertevorschläge: 10.0, 20.0, 30.0, 50.0, 70.0, 100.0, 200.0, 300.0, 500.0, 700.0, 1000.0, 1500.0, 2000.0

Restriktion: FlowSmoothness >= 0.0

GradientConstancyGradientConstancyGradientConstancyGradientConstancygradientConstancy (input_control)  real HTupleHTupleHtuple (real) (double) (double) (double)

Gewicht der Gradientenkonstanz gegenüber der Grauwertkonstanz.

Defaultwert: 5.0

Wertevorschläge: 0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 15.0, 20.0, 30.0, 40.0, 50.0, 70.0, 100.0

Restriktion: GradientConstancy >= 0.0

MGParamNameMGParamNameMGParamNameMGParamNameMGParamName (input_control)  attribute.name(-array) HTupleHTupleHtuple (string) (string) (HString) (char*)

Parametername(n) für das Mehrgitterverfahren.

Defaultwert: 'default_parameters' "default_parameters" "default_parameters" "default_parameters" "default_parameters"

Werteliste: 'default_parameters'"default_parameters""default_parameters""default_parameters""default_parameters", 'mg_cycle_type'"mg_cycle_type""mg_cycle_type""mg_cycle_type""mg_cycle_type", 'mg_cycles'"mg_cycles""mg_cycles""mg_cycles""mg_cycles", 'mg_inner_iter'"mg_inner_iter""mg_inner_iter""mg_inner_iter""mg_inner_iter", 'mg_levels'"mg_levels""mg_levels""mg_levels""mg_levels", 'mg_post_relax'"mg_post_relax""mg_post_relax""mg_post_relax""mg_post_relax", 'mg_pre_relax'"mg_pre_relax""mg_pre_relax""mg_pre_relax""mg_pre_relax", 'mg_solver'"mg_solver""mg_solver""mg_solver""mg_solver", 'warp_last_level'"warp_last_level""warp_last_level""warp_last_level""warp_last_level", 'warp_levels'"warp_levels""warp_levels""warp_levels""warp_levels", 'warp_zoom_factor'"warp_zoom_factor""warp_zoom_factor""warp_zoom_factor""warp_zoom_factor"

MGParamValueMGParamValueMGParamValueMGParamValueMGParamValue (input_control)  attribute.value(-array) HTupleHTupleHtuple (string / real / integer) (string / double / int / long) (HString / double / Hlong) (char* / double / Hlong)

Parameterwert(e) für das Mehrgitterverfahren.

Defaultwert: 'accurate' "accurate" "accurate" "accurate" "accurate"

Wertevorschläge: 'very_accurate'"very_accurate""very_accurate""very_accurate""very_accurate", 'accurate'"accurate""accurate""accurate""accurate", 'fast_accurate'"fast_accurate""fast_accurate""fast_accurate""fast_accurate", 'fast'"fast""fast""fast""fast", 'multigrid'"multigrid""multigrid""multigrid""multigrid", 'full_multigrid'"full_multigrid""full_multigrid""full_multigrid""full_multigrid", 'v'"v""v""v""v", 'w'"w""w""w""w", 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9

Beispiel (HDevelop)

grab_image (ImageT1, AcqHandle)
while (true)
  grab_image (ImageT2, AcqHandle)
  optical_flow_mg (ImageT1, ImageT2, VectorField, 'fdrig', 0.8, 1, 10, \
                   5, 'default_parameters', 'accurate')
  threshold (VectorField, Region, 1, 10000)
  copy_obj (ImageT2, ImageT1, 1, 1)
endwhile

Ergebnis

Sind die Parameterwerte korrekt, dann liefert optical_flow_mgoptical_flow_mgOpticalFlowMgOpticalFlowMgOpticalFlowMg den Wert 2 (H_MSG_TRUE). Das Verhalten bei leerer Eingabe (keine Eingabebilder vorhanden) lässt sich mittels set_system('no_object_result',<Result>)set_system("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>)SetSystem("no_object_result",<Result>) festlegen. Gegebenenfalls wird eine Fehlerbehandlung durchgeführt.

Nachfolger

thresholdthresholdThresholdThresholdThreshold, vector_field_lengthvector_field_lengthVectorFieldLengthVectorFieldLengthVectorFieldLength

Siehe auch

unwarp_image_vector_fieldunwarp_image_vector_fieldUnwarpImageVectorFieldUnwarpImageVectorFieldUnwarpImageVectorField

Literatur

T. Brox, A. Bruhn, N. Papenberg, and J. Weickert: High accuracy optical flow estimation based on a theory for warping. In T. Pajdla and J. Matas, editors, Computer Vision - ECCV 2004, volume 3024 of Lecture Notes in Computer Science, pages 25--36. Springer, Berlin, 2004.
A. Bruhn, J. Weickert, C. Feddern, T. Kohlberger, and C. Schnörr: Variational optical flow computation in real-time. IEEE Transactions on Image Processing, 14(5):608-615, May 2005.
H.-H. Nagel and W. Enkelmann: An investigation of smoothness constraints for the estimation of displacement vector fields from image sequences. IEEE Transactions on Pattern Analysis and Machine Intelligence, 8(5):565-593, September 1986.
Ulrich Trottenberg, Cornelis Oosterlee, Anton Schüller: Multigrid. Academic Press, Inc., San Diego, 2000.

Modul

Foundation