Current Page: Greybox » Authoring » Course ID: medieninformatik » Modules » Module ID: m04 » Learning Units » Unit ID: 05_34
Last Modified:Tuesday, 2015-05-05 - 08:09:06
 
Tools: ValidatePreview XML Preview HTML Preview PDF
Alternative: Printable HTML

 

Learning Unit ID: 05_34
Title: Bewegungsschätzung und -kompensation, Teil 1
Abstract: Um zeitliche Redundanzen einer Videosequenz für dessen Komprimierung zu nutzen, verwendet MPEG Video die Technik der Bewegungskompensation. In dieser Lerneiheit werden die Begriffe Bewegungsschätzung und -kompensation definiert und das Block-Matching Verfahren vorgestellt.
 
Status: Captions missing, one link dead Version: 2005-01-07
History: 2005-02-21 (Martin Hon): applet-m4_05_29_02 nicht erlaubte attribute entfernt
2005-02-21 (Martin Hon): codebase für applet-m4_05_29_02 hinzugefügt
2005-01-07 (Robert Fuchs): Captions missing, one link dead; added applet-m4_05_29_02.
2004-09-22 (Thomas Migl): Text Applet "Bewegungskompensation" implementiert,
2004-09-16 (Thomas Migl): alle pdas hionzugefügt
2004-09-13 (Thomas Migl): Einführenden Text für Applet geschrieben,
2004-08-16 (Robert Fuchs): Checked, fixed and exported for Review #2.
2004-07-29 (Robert Fuchs): Fixed HTMLAuth2 gremlins.
2004-07-29 (Thomas Migl): Inhalte zugefügt, Bilder (PC final) importiert.
2004-07-26 (Robert Fuchs): Manual import into the Greybox.
2004-03-12 (Robert Fuchs): Closed for 50% Content Deadline import in Scholion.
2004-03-12 (Robert Fuchs): Fixed bugs in content tagging; image tagged as "sHeader".
2004-03-10 (Thomas Migl): LOD1, abstract added
2004-03-05 (Robert Fuchs): Added links.
2004-03-04 (Robert Fuchs): Imported and tagged content from "m4-LU34-Bewegungsschätzung1-fertig.doc"
2004-02-25 (HTMLContentTools): Created skeleton page.

Author
Author 1: Thomas Migl E-Mail: migl@ims.tuwien.ac.at
Author 2: Chrisitian Ritzinger E-Mail: (empty)
Author 3: (empty) E-Mail: (empty)
Author 4: (empty) E-Mail: (empty)
Author 5: (empty) E-Mail: (empty)
Organization: Technische Universität Wien; Institut für Softwaretechnik und Interaktive Systeme; Arbeitsgruppe für Interaktive Multimediale Systeme; http://www.ims.tuwien.ac.at/

Content

Definition Bewegungsschätzung und -kompensation

1

Bewegungsschätzung

  • Bewegungsanalysetechnik für einer definierte Pixelgruppe
  • Pixelgruppe wird in einem Referenzbild gesucht
  • Bewegungsschätzung berechnet für jede Pixelgruppe Bewegungsvektor

Bewegungskompensation

  • Prädiktionstechnik basierend auf einer Bewegungsanalyse
  • Originalbild wird mit Hilfe von Referenzbild und Bewegungsvektor dargestellt

2

AUTO

Im Allgemeinen haben aufeinander folgende Bilder einer Videosequenz einen durch Bewegungen verursachten veränderten Bildinhalt. Diese können Translationsbewegungen, verursacht durch Bewegung der Kamera oder der Motive, Zoomeffekte, etc. sein. stru2002, 152

Bewegungsschätzung

Bewegungsschätzung ist eine Bewegungsanalysetechnik. Man betrachtet in einem Bild einer Videosequenz eine Gruppe von Pixel. Unter der Annahme, dass benachbarte Bildpunkte gleiche bzw. ähnliche Bewegungen ausführen, versucht man die Position dieser Gruppe in einem Referenzbild (=vorhergehendes oder nachfolgendes Bild) wieder zu finden. Als Ergebnis liefert die Bewegungsschätzung einen Bewegungsvektor.

Bewegungskompensation

Bewegungskompensation ist eine spezielle Form der Prädiktionstechnik. Man versucht ein Bild innerhalb einer Videosequenz mit Hilfe von Bewegungsanalysen als Prädiktionsbild eines Referenzbildes (vorhergehend oder nachfolgend) darzustellen. Zur Bewegungsanalyse verwendet man die Bewegungsschätzung. Das Prädiktionsbild ergibt sich aus dem Referenzbild und den Bewegungsvektoren.

Kameraschwenk

Ein einfaches Beispiel ist ein Kameraschwenk. Es werden alle Objekte im Originalbild gegenüber dem vorhergehenden Bild örtlich versetzt erscheinen. Die örtliche Verschiebung der Objekte kann durch einen zweidimensionalen Vektor, den Bewegungsvektor, beschrieben werden. Für dieses einfache Beispiel ist dieser Vektor für alle Objekte gleich. Es kann jetzt mit Hilfe des Referenzbildes und des Bewegungsvektors ein Prädiktionsbild erstellt werden, dass im Idealfall - Bewegungsvektor beschreibt exakt die Bewegung - mit dem Originalbild ident ist. siko1997

AUTO

Bei komplexeren Bewegungen werden verschiedene Bildbereiche unterschiedliche Bewegungen erfahren. Hier berechnet die Bewegungsschätzung für jeden Unterbereich einen eigenen Bewegungsvektor. Jeder Vektor gibt dabei die Verschiebung jenes Unterbereiches an, den er repräsentiert. Das Prädiktionsbild ergibt sich wieder aus Referenzbild und den Bewegungsvektoren.

Grenzen der Bewegungsschätzung und -kompensation

1

AUTO

  • Änderungen von Lichtverhältnissen
  • Bewegung der Kamera
  • Auftauchen eines Hintergrundes
  • Drehung des Motivs

2

AUTO

Die Grenzen der Prädiktionstechnik durch Bewegungskompensation liegen dort, wo unterschiedliche Inhalte zweier aufeinander folgender Bilder sich nicht aus rein translatorischen Bewegungen der Motive ableiten lassen.

Änderungen von Lichtverhältnissen

Wandernde Schatten, Sonne wird plötzlich von Himmel verdeckt, Änderung der Beleuchtungsfarbtemperatur, Sonnenreflexe auf bewegter Wasseroberfläche, etc.

Bewegung der Kamera

Es tauchen am Rand neue Bildinhalte auf, etc.

Bewegung des Motivs

Durch die Bewegung eines Motivs kann die Sicht auf einen Hintergrund freigegeben werden, der im Referenzbild noch nicht zu sehen war.

Drehung des Motivs

Es wird eine neue Perspektive des Motivs freigegeben.

Definition Block-Matching

1

AUTO

  • Blockmatching wird von MPEG-1 und MPEG-2 zur Bewegungsschätzung verwendet
  • Bild in 16x16 - Makroblöcke unterteilt
  • jeder Makroblock wird in einem Referenzbild gesucht
  • Bei Blocksuche Orientierung an Pixelgrauwerte
  • Ergebnis ist ein Bewegungsvektor

2

AUTO

Blockmatching ist ein Verfahren zur Bewegungsschätzung. Es fasst Bildpunkte blockweise zu einer Gruppe zusammen. Zur Suche eines Blockes in einem Referenzbild orientiert sich das Blockmatchingverfahren an den Grauwerten der Blockbildpunkte. stru2002, 152

AUTO

MPEG-1 und MPEG-2 verwenden das Block-Matching Verfahren. Es werden jeweils die Pixel eines 16x16 - Blockes zu einer Gruppe zusammengefasst. Diese 16x16 Blöcke werden als Makroblöcke bezeichnet. Die Festlegung der Größe des Blockes ist ein Kompromiss.

  • um den Rechen- und Kodierungszeitaufwand in Grenzen zu halten, sollten die Blöcke möglichst groß sein
  • um eine möglichst genaue Bewegungsschätzung zu erzielen, sollten Blöcke möglichst klein sein

Arbeitsweise Block-Matching

1

Abbildung:Arbeitsweise Block-Matching PC

Abbildung:Arbeitsweise Block-Matching PDA_Phone

2

Abbildung:Arbeitsweise Block-Matching PC

Für einen 16x16 Makroblock im Originalbild wird im Referenzbild ein Block mit möglichst ähnlichem Bildinhalt gesucht. Anschaulich gesprochen, verschiebt man dazu das Originalbild solange über das Referenzbild, bis die beiden identen Blöcke übereinander liegen. Daraus errechnet man die beiden Koordinaten des gesuchten Bewegungsvektors. Diese Prozedur wird für alle Blöcke des Bildes wiederholt.

Abbildung:Arbeitsweise Block-Matching PDA_Phone

Für einen 16x16 Makroblock im Originalbild wird im Referenzbild ein Block mit möglichst ähnlichem Bildinhalt gesucht. Anschaulich gesprochen, verschiebt man dazu das Originalbild solange über das Referenzbild, bis die beiden identen Blöcke übereinander liegen. Daraus errechnet man die beiden Koordinaten des gesuchten Bewegungsvektors. Diese Prozedur wird für alle Blöcke des Bildes wiederholt.

AUTO

Als Ergebnis hat man eine Repräsentation des Originalbildes, dessen Makroblöcke nur durch die Koordinatenwerte der Bewegungsvektoren beschrieben werden. Diese Darstellung ist gegenüber einer Vollbildrepräsentation natürlich viel weniger speicherintensiv.

Suchstrategien

1

Bewertung der Ähnlichkeit zweier Blöcke

  • Mittlerer quadratischer Fehler - geeignet für einfache Hardware
  • Mittlere absolute Differenz - genauere Ergebnisse, aber höhere Ansprüche an Hardware
  • Kreuzkorrelation - für sehr genaue Rechenergebnisse

Abbildung: Suchraum PC

Abbildung: Suchraum PDA_Phone

2

AUTO

Für das Block-Matching Bewegungsschätzungsverfahren sind die verschiedensten Suchalgorithmen entwickelt worden. Allen ist das Prinzip gemeinsam, dass die Blöcke im Referenzbild in der Umgebung der ursprünglichen Position des Blockes mit dem gesuchten Block aus dem Originalbild verglichen werden. (siehe Lerneineheit Bewegungsschätzung und -kompensation, Teil 2).

Bewertung der Ähnlichkeit zweier Blöcke

Als Maß der Ähnlichkeit zweier Blöcke betrachtet man deren Differenzen. Dafür bildet man pixelweise die Differenzwerte der beiden zu vergleichenden Blöcke. Für die Differenzwerte werden dann wahlweise, je nach verwendetem Algorithmus, der "Mittlere quadratische Fehler", die "mittlere absolute Differenz" oder die "Kreuzkorellation" eruiert. Jener Block, für den sich der kleinste Betrag errechnet, wird als der dem gesuchten Block am ähnlichsten bewertet.

Costfunctions

Der mittlerer absolute Fehler (MAD):

 <math display='block'>  <semantics>  <mrow>  <mi>M </mi> <mi>A </mi> <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <mo>= </mo> <mfrac>  <mn>1 </mn>  <mrow>  <mi>m </mi> <mi>n </mi>  </mrow>  </mfrac>  <mstyle displaystyle='true'>  <munderover>  <mo>&#x2211; </mo>  <mrow>  <mi>i </mi> <mo>= </mo> <mo>&#x2212; </mo> <mi>n </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  <mrow>  <mi>n </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  </munderover>  <mrow>  <mstyle displaystyle='true'>  <munderover>  <mo>&#x2211; </mo>  <mrow>  <mi>j </mi> <mo>= </mo> <mo>&#x2212; </mo> <mi>m </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  <mrow>  <mi>m </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  </munderover>  <mrow>  <mrow> <mo>| </mo> <mrow>  <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <mo>&#x2212; </mo> <mi>G </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>+ </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>j </mi> <mo>+ </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo>  </mrow> <mo>| </mo> </mrow>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaamytaiaadgeacaWGgbGaaiikaiaadMgacaGGSaGaamOAaiaac McacqGH9aqpdaWcaaqaaiaaigdaaeaacaWGTbGaamOBaaaadaaeWbqa amaaqahabaWaaqWaaeaacaWGgbGaaiikaiaadMgacaGGSaGaamOAaia acMcacqGHsislcaWGhbGaaiikaiaadMgacqGHRaWkcaWGKbGaamiEai aacYcacaWGQbGaey4kaSIaamizaiaadMhacaGGPaaacaGLhWUaayjcS daaleaacaWGQbGaeyypa0JaeyOeI0IaamyBaiaac+cacaaIYaaabaGa amyBaiaac+cacaaIYaaaniabggHiLdaaleaacaWGPbGaeyypa0JaeyO eI0IaamOBaiaac+cacaaIYaaabaGaamOBaiaac+cacaaIYaaaniabgg HiLdaaaa@66BC@ </annotation>  </semantics>  </math>

Der Mittlere quadratische Fehler:

 <math display='block'>  <semantics>  <mrow>  <mi>M </mi> <mi>Q </mi> <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <mo>= </mo> <mfrac>  <mn>1 </mn>  <mrow>  <mi>m </mi> <mi>n </mi>  </mrow>  </mfrac>  <mstyle displaystyle='true'>  <munderover>  <mo>&#x2211; </mo>  <mrow>  <mi>i </mi> <mo>= </mo> <mo>&#x2212; </mo> <mi>n </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  <mrow>  <mi>n </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  </munderover>  <mrow>  <mstyle displaystyle='true'>  <munderover>  <mo>&#x2211; </mo>  <mrow>  <mi>j </mi> <mo>= </mo> <mo>&#x2212; </mo> <mi>m </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  <mrow>  <mi>m </mi> <mo>/ </mo> <mn>2 </mn>  </mrow>  </munderover>  <mrow>  <msup>  <mrow>  <mrow> <mo>[ </mo> <mrow>  <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <mo>&#x2212; </mo> <mi>G </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>+ </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>j </mi> <mo>+ </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo>  </mrow> <mo>] </mo> </mrow>  </mrow>  <mn>2 </mn>  </msup>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaamytaiaadgfacaWGgbGaaiikaiaadMgacaGGSaGaamOAaiaac McacqGH9aqpdaWcaaqaaiaaigdaaeaacaWGTbGaamOBaaaadaaeWbqa amaaqahabaWaamWaaeaacaWGgbGaaiikaiaadMgacaGGSaGaamOAaia acMcacqGHsislcaWGhbGaaiikaiaadMgacqGHRaWkcaWGKbGaamiEai aacYcacaWGQbGaey4kaSIaamizaiaadMhacaGGPaaacaGLBbGaayzxa aWaaWbaaSqabeaacaaIYaaaaaqaaiaadQgacqGH9aqpcqGHsislcaWG TbGaai4laiaaikdaaeaacaWGTbGaai4laiaaikdaa0GaeyyeIuoaaSq aaiaadMgacqGH9aqpcqGHsislcaWGUbGaai4laiaaikdaaeaacaWGUb Gaai4laiaaikdaa0GaeyyeIuoaaaa@667A@ </annotation>  </semantics>  </math>

Kreuzkorrelationsfunktion:

 <math display='block'>  <semantics>  <mrow>  <mi>K </mi> <mi>K </mi> <mi>F </mi> <mo stretchy='false'>( </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo> <mo>= </mo> <mfrac>  <mrow>  <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>i </mi>  </msub>  <mrow>  <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>j </mi>  </msub>  <mrow>  <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <mo>&#x22C5; </mo> <mi>G </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>+ </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>j </mi> <mo>+ </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  <mrow>  <mo stretchy='false'>( </mo> <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>i </mi>  </msub>  <mrow>  <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>j </mi>  </msub>  <mrow>  <msup>  <mi>F </mi>  <mn>2 </mn>  </msup>  <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo> <msup>  <mo stretchy='false'>) </mo>  <mrow>  <mfrac>  <mn>1 </mn>  <mn>2 </mn>  </mfrac>  </mrow>  </msup>  <mo>&#x22C5; </mo> <mo stretchy='false'>( </mo> <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>i </mi>  </msub>  <mrow>  <mstyle displaystyle='true'>  <msub>  <mo>&#x2211; </mo>  <mi>j </mi>  </msub>  <mrow>  <msup>  <mi>G </mi>  <mn>2 </mn>  </msup>  <mo stretchy='false'>( </mo> <mi>i </mi> <mo>+ </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>j </mi> <mo>+ </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo> <msup>  <mo stretchy='false'>) </mo>  <mrow>  <mfrac>  <mn>1 </mn>  <mn>2 </mn>  </mfrac>  </mrow>  </msup>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  </mstyle>  </mrow>  </mfrac>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aaatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaam4saiaadUeacaWGgbGaaiikaiaadsgacaWG4bGaaiilaiaad sgacaWG5bGaaiykaiabg2da9maalaaabaWaaabeaeaadaaeqaqaaiaa dAeacaGGOaGaamyAaiaacYcacaWGQbGaaiykaiabgwSixlaadEeacaG GOaGaamyAaiabgUcaRiaadsgacaWG4bGaaiilaiaadQgacqGHRaWkca WGKbGaamyEaiaacMcaaSqaaiaadQgaaeqaniabggHiLdaaleaacaWGP baabeqdcqGHris5aaGcbaGaaiikamaaqababaWaaabeaeaacaWGgbWa aWbaaSqabeaacaaIYaaaaOGaaiikaiaadMgacaGGSaGaamOAaiaacMc acaGGPaWaaWbaaSqabeaadaWcaaqaaiaaigdaaeaacaaIYaaaaaaaki abgwSixlaacIcadaaeqaqaamaaqababaGaam4ramaaCaaaleqabaGaa GOmaaaakiaacIcacaWGPbGaey4kaSIaamizaiaadIhacaGGSaGaamOA aiabgUcaRiaadsgacaWG5bGaaiykaiaacMcadaahaaWcbeqaamaalaa abaGaaGymaaqaaiaaikdaaaaaaaqaaiaadQgaaeqaniabggHiLdaale aacaWGPbaabeqdcqGHris5aaWcbaGaamOAaaqab0GaeyyeIuoaaSqaa iaadMgaaeqaniabggHiLdaaaaaa@7AB2@ </annotation>  </semantics>  </math>

AUTO

 <math>  <semantics>  <mrow>  <mi>F </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aqatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaamOraiaacIcacaWGPbGaaiilaiaadQgacaGGPaaaaa@3A9F@ </annotation>  </semantics>  </math> repräsentiert einen mxn Makroblock im betrachteten Frame

 <math>  <semantics>  <mrow>  <mi>G </mi> <mo stretchy='false'>( </mo> <mi>i </mi> <mo>, </mo> <mi>j </mi> <mo stretchy='false'>) </mo>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aqatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaam4raiaacIcacaWGPbGaaiilaiaadQgacaGGPaaaaa@3AA0@ </annotation>  </semantics>  </math> repräsentiert den selben Block im Referenzblock

 <math>  <semantics>  <mrow>  <mo stretchy='false'>( </mo> <mi>d </mi> <mi>x </mi> <mo>, </mo> <mi>d </mi> <mi>y </mi> <mo stretchy='false'>) </mo>  </mrow>  <annotation encoding='MathType-MTEF'>  MathType@MTEF@5@5@+=feaafiart1ev1aqatCvAUfeBSjuyZL2yd9 gzLbvyNv2CaerbuLwBLnhiov2DGi1BTfMBaeXatLxBI9gBaerbd9wDY LwzYbItLDharqqtubsr4rNCHbGeaGqiVu0Je9sqqrpepC0xbbL8F4rq qrFfpeea0xe9Lq=Jc9vqaqpepm0xbba9pwe9Q8fs0=yqaqpepae9pg0 FirpepeKkFr0xfr=xfr=xb9adbaqaaeGaciGaaiaabeqaamaabaabaa GcbaGaaiikaiaadsgacaWG4bGaaiilaiaadsgacaWG5bGaaiykaaaa@ 3BC4@ </annotation>  </semantics>  </math> dieser Vektor repräsentiert die relatve Position der beiden Blöcke im Suchraum

AUTO

MAF arbeitet zwar nicht so effizient wie die beiden anderen Funktionen, wird aber wegen ihrer geringen Komplexität oft vor allem für Video Hardware Implementationen verwendet.

Suchraum

So simpel das Prinzip von Block-Matching auch erscheinen mag, so gewaltig kann auch der Rechenaufwand ausfallen. Um den Rechenaufwand in einem realistischen Rahmen zu halten, wird die Suche auf einen beschränkten Suchraum um dem Block angewandt. watk2001-1

Größe des Suchraums

Bei der Wahl der Größe des Suchraumes bezieht man sich auf die maximal zu erwartenden Bewegungsdistanzen. Aus Erfahrungswerten hat sich für die MPEG Videokomprimierung eine Suchraumgröße von +/-6 Pixel (oben, unten, links, rechts) etabliert. furt1995

Abbildung: Suchraum PC

Suchraum für das Blockmatchingverfahren. Die linke Grafik stellt einen allgemeinen Fall dar. Die rechte Grafik zeigt Makroblock und Suchraum in der Dimension, wie sie von MPEG-Standard verwendet wird.

Abbildung: Suchraum PDA_Phone

Suchraum für das Blockmatchingverfahren. Die linke Grafik stellt einen allgemeinen Fall dar. Die rechte Grafik zeigt Makroblock und Suchraum in der Dimension, wie sie von MPEG-Standard verwendet wird.

Bewegungskompensation interakiv

1

Applet Bewegungskompensation applet-m4_05_29_02

Online Alternative

2

Applet Bewegungskompensation applet-m4_05_29_02

Online Alternative

Applet Blockmatching (Vollbild)

Mit dem Applet Bewegungskompensation, Reiter Vollbild, kann man nachvollziehen, wie sich bei zwei aufeinanderfolgenden Bilder einer Videosequenz sich die Bewegungsvektoren und der Prädiktionsfehler ergeben. Man kann eine bestimmte Videosequenz, die Costfunction und die Suchmethode, die bei der Blocksuche verwendet werden sollen, wählen . Angezeigt werden die errechneten Bewegungsvektoren, das Differenzbild (durch Schaltfläche Change wahlweise bewegungskompensiert oder nicht bewegungskompensiert), und ein Bild, das nur anhand der Bewegungsvektoren rekonstruiert worden ist (ohne Prädiktionsfehler). Der Prädiktionsfehler ist das Differenzbild bei Bewegungskompensation. Für Karteireiter Makro siehe Lerneinheit Bewegungsschätzung und -kompensation 2.

Instruktionen

  1. Wähle den Karteireiter Vollbild.
  2. Wähle ein Bild aus der Auswahlliste und bestätige dieses mit dem rechts davon befindlichen _Laden Button.
  3. Selektiere nun den von Dir gewünschten Algorithmus und die passende Funktion.
  4. Betätige nun den _Start Button zur Anzeige des Ergebnisses.
    1. Oberes linkes Bild ist das I Frame
    2. Im rechten oberen Bild (Originalbild) werden die errechneten Bewegungsvektoren angezeigt
    3. im linken unteren wird das Bild gezeigt, das sich aus dem I-Frame und den Bewegungsvektoren (ohne Prädiktionsfehler) ergibt
    4. Das rechte untere Bild zeigt wahlweise (mittels Wechseln-Schalter)
      1. Das Differenzbild zwischen Originalbild und linkem Bild (Prädiktionsfehler bei Bewegungskompensation))
      2. Das Differenzbild Originalbild und I-Frame (keine Bewegungskompensation) wähle
  5. Versuche nun herauszufinden, bei welchem Suchalgorithmus und welchen Costfunctions der Prädiktionsfehler am kleinsten wird.
  6. Kontrolliere durch hin und herschalten des Wechselschalters die Qualität der Bewegungskompensation.
  7. Für welche Bildsequenz funktioniert die Bewegungskompensation besonders gut, für welche weniger und für welche überhaupt nicht? Warum ist das so?
  8. Beachte Bewegungsvektoren an konturlosen, einfärbigen Flächen. Warum ergeben sich hier Bewegungsvektoren, auch wenn keine Bewegung? Hat dieser Umstand einen Einfluss auf die Qualität der Komprimierung?

Bildsequenzen, die zur Auswahl stehen

  • Bewegung
    • Hier wird die Maus am rechten Bildschirmrand um ca 25 Pixel nach links bewegt.
  • Drehung
    • Bei dieser Bilderserie wurde die Kamera um die eigene Achse gedreht
  • Helligkeit
    • Diese beiden Bilder weisen unterschiedliche Helligkeitswerte auf
  • Objektdrehung
    • Das Objekt in der Mitte wird gedreht.
  • Verschiebung
    • Das zweite Bild wird 3 Pixel nach links unten verschoben
  • Objektverschiebung (Verschiebung 2)
    • Der Elefant wandert um 3 Pixel nach links, sonst bleibt das Bild gleich.

Genauigkeit des Bewegungsvektors pere2002,304

1

auto

  • Ergebnis des Block-Matchingverfahrens
    • x- und y- Koordinaten des Bewegungsvektors
    • Je höher die Genauigkeit, umso besser Videoqualität
  • Genauigkeit hängt ab

Bewegungsvektor mit „Ein Pixel“-Genauigkeit watk2001-1,148

  • nur ganzzahlige Vektorkomponenten möglich
    • Reale Bewegungen nur unzureichend beschrieben
      • hohe Prädiktionsfehler
  • Verwendet in H.261.

Bewegungsvektor mit „Halbes Pixel“ - Genauigkeit pere2002,304

  • Vektorkomponenten sind ganze oder halbe Pixelwerte
    • Halbpixelwerte durch Interpolation errechnet
    • kleinere Prädiktionsfehler
  • Verwendet in MPEG-1, MPEG-2 und H.263

Interpolation für „Halbe Pixel“-Genauigkeit PC

Interpolation für „Halbe Pixel“-Genauigkeit PDA_Phone

 

Bewegungsvektor mit „Viertel Pixel“-Genauigkeit pere2002,304

  • Vektorkomponenten sind ganze, halbe oder viertel Pixelwerte
    • Approximationsalgorithmen sehr komplex
  • Problem
  • Verbesserung der Qualität nicht signifikant
    • aber signifikante Erhöhung der Datenrate auf Grund nötiger Seiteninformationen

„Viertel Pixel“- Genauigkeit für MPEG-4

Für MPEG-4 wurde ein Interpolationsalgorithmus entwickelt, der neben der ein Pixel- und der halbes Pixel- eine „Viertel Pixel“- Genauigkeit der Bewegungsvektorenkomponenten bietet. Die Qualitätssteigerung gegenüber der „halbes Pixel“ Genauigkeit ist dabei signifikant. Dieser Umstand ist mitverantwortlich, dass MPEG-4 auch bei äußerst niedrigen Datenbitraten brauchbare Bildqualität bieten kann.

Abbildung: Interpolation für Viertel Pixel Genauigkeit PC

Abbildung: Interpolation für Viertel Pixel Genauigkeit PDA_Phone

Berechnung der interpolierten Werte

Die Berechnung der Helligkeitswerte der virtuellen Bildpunkte erfolgt in zwei Schritten:

  1. In einem ersten Schritt werden die Werte für die „Halbe Pixel“ - Positionen mit einem gegenüber MPEG-2 verbesserten Interpolationsalgorithmus berechnet. Es werden dabei nicht nur zwei bzw. vier Nachbarspunkte (siehe „Halber Pixel“ Genauigkeit“), sondern jeweils 8 Nachbarspunkte in die Berechnung mit einbezogen.
  2. Aufbauend auf das Ergebnis aus Schritt 1 werden die Werte für die „Viertel Pixel“ - Positionen berechnet.

2

auto

Als Ergebnis des Block-Matchingverfahrens werden die x- und y- Koordinaten des Bewegungsvektors angegeben. Dabei gilt, je genauer diese errechnet werden, desto besser wird die Qualität des komprimierten Videos ausfallen. Eine hohe Genauigkeit der Bewegungsvektoren hält den zu kodierenden Prädiktionsfehler niedrig und ist daher vor allem für niedrige Datenstromraten wichtig. Die Genauigkeit ergibt sich einerseits aus der Qualität des gewählten Suchalgorithmus, andererseits aber auch aus der Auflösung der Koordinaten des Bewegungsvektors

Bewegungsvektor mit „Ein Pixel“-Genauigkeit watk2001-1,148

Es sind nur ganzzahlige Vektorkomponenten möglich. Die Koordinaten geben an, um wie viele Pixel sich ein Makroblock zwischen zwei Bildern verschoben hat. Reale Bewegungen können in dieser beschränkten Auflösung oft nur unzureichend beschrieben werden. Es ergeben sich daher dementsprechend hohe Prädiktionsfehler. Verwendet wird die „Ein Pixel“-Genauigkeit für H.261.

Bewegungsvektor mit „Halbes Pixel“ - Genauigkeit pere2002,304

Eine wesentliche Verbesserung gegenüber der „ein Pixel-Genauigkeit“ ist die „Halbes Pixel“ - Genauigkeit. Es können dabei die Vektorkomponenten ganze oder halbe Pixelwerte annehmen. Verwendet wird dieses Verfahren von MPEG-1, MPEG-2 und H.263.

Content: Durch Interpolation der tatsächlich vorhandenen Bildpunkte erzeugt man zusätzliche Bildpunkte, die im ursprünglichen Bild eigentlich gar nicht vorhanden waren. So können natürliche Bewegungen kontinuierlicher beschrieben werden, um so genauer kann auch daher die Bewegungskompensation arbeiten, der Prädiktionsfehler wird dementsprechend kleiner.

Interpolation für „Halbe Pixel“-Genauigkeit PC

Die Punkte A, B, C und D sind vier benachbarte Bildpunkte. Durch bilineare Interpolation werden die im Halben Pixelabstand liegenden Punkte b,c,d errechnet.

+…..reale Bildpunkte
o…..durch Interpolation erhaltene Bildpunkte

nterpolation für „Halbe Pixel“-Genauigkeit PDA_Phone

Die Punkte A, B, C und D sind vier benachbarte Bildpunkte. Durch bilineare Interpolation werden die im Halben Pixelabstand liegenden Punkte b,c,d errechnet.

+…..reale Bildpunkte
o…..durch Interpolation erhaltene Bildpunkte

Interpolationsalgorithmus

A, B, C, D beziehungsweise b,c,d, geben die dem Ort entsprechenden Luminanzwerte an.

Bewegungsvektor mit „Viertel Pixel“-Genauigkeit pere2002,304

Nachdem sich die „Halbes Pixel-Genauigkeit“ für viele Anwendungen etabliert hat, gab es unzählige Versuche, durch eine noch höhere Auflösung der Bewegungsvektorkomponenten die Genauigkeit weiter zu steigern. In den meisten Fällen war allerdings die Verbesserung der Genauigkeit nicht wirklich signifikant, vielmehr handelte man sich oft höhere Bitraten ein, verursacht durch notwendige Zusatzinformationen.

„Viertel Pixel“- Genauigkeit für MPEG-4

  • MPEG-4 definiert viertel Pixel Interpolationsalgorithmus
    • Qualitätssteigerung gegenüber der „halbes Pixel“ Genauigkeit ist signifikant
    • MPEG-4 liefert auch bei äußerst niedrigen Datenbitraten brauchbare Bildqualität
Abbildung: Interpolation für Viertel Pixel Genauigkeit PC

+ ….reale Bildpunkte

o….durch Interpolation erhaltene Bildpunkte

Abbildung: Interpolation für Viertel Pixel Genauigkeit PDA_Phone

+ ….reale Bildpunkte

o….durch Interpolation erhaltene Bildpunkte

 

Berechnung der interpolierten Werte

Zwei Schritte:

  • Berechnung der Komponenten in Halb Pixelauflösung
    • Es werden die 8 Nachbarspunkte in Berechnung mit einbezogen
  • Aufbauend auf das Ergebnis aus Schritt 1 werden die Werte für die „Viertel Pixel“ - Positionen berechnet.

Überlappende Block Bewegungskompensation watk2001-1,284

1

Ziel

  • Für hochkomprimierende Standards
  • Qualität Blockmatching
    • genau für Pixel im Blockzentrum
    • ungenau für Pixel am Blockrand

Funktionsweise

  • Pixel in Randnähe
    • Abstand zu Blockzentrum gleich groß wie zu benachbarten Blöcken
    • Randpixel oft durch benachbarten Block besser prädizierbar
  • Überlappende Block Bewegungskompensation
    • 16x16 Makroblock in 4 8x8 Unterblöcke unterteilt
    • für jeden Unterblock Bewegungsvektor berechnet
      • Vektoren werden in eigener Prädiktionstechnik kodiert

2

Ziel

Mit nur einem Bewegungsvektor pro Block kann nicht für alle Pixel des Blockes die gleiche Genauigkeit erzielt werden. Im Allgemeinen werden die Pixel im Zentrum des Blockes durch den Bewegungsvektor genauer, die Pixel in Randnähe jedoch ungenauer prädiziert. In hochkomprimierenden Standards wie MPEG-4 und H.263 wird nun die Möglichkeit der „überlappenden Block Bewegungskompensation“ geboten, eine Technik, die diese Ungenauigkeit an den Blockrändern reduzieren kann.

Funktionsweise

Für jene Pixel, die in Randnähe liegen, ist der Abstand zum eigenen Blockzentrum praktisch gleich groß wie zu den benachbarten Blockzentren. Die Überlappende Block Bewegungskompensation nutzt nun die Tatsache, dass diese Randbereiche oft durch den Bewegungsvektor eines der Nachbarblöcke genauer als durch den eigenen prädiziert werden können. Es wird jeder 16x16 Makroblock in vier 8x8 Pixel Blöcke aufgeteilt. Mit Hilfe effizienter Algorithmen wird für jeden dieser Subblöcke separat entschieden, welcher Bewegungsvektor der best geeignete ist. Mit Hilfe einer ausgeklügelten Prädiktionstechnik können die dadurch entstandenen zusätzlichen Informationen kodiert werden, ohne dass eine zusätzliche Datenstromrate entsteht.


Notes
(empty)