-
Die vorliegende Erfindung betrifft ein Verfahren zur Datenverarbeitung in
matrixförmigen Netzwerken in einem Bewegungsschätzungssystem. Das
Verfahren gemäß der Erfindung wird insbesondere in Fernseh-Bildkodern
benutzt, die ein Verfahren zur Bewegungskompensation anwenden.
-
Eine gewisse Anzahl von Systemen zur Bildkomprimierung basiert auf einer
Verarbeitung in Pixelblöcken. Im Falle von MPEG2 (für "Motion Picture
Expert Group") sind die Bilder in Blöcke von 8 · 8 Pixeln aufgeteilt, wobei vier
Blöcke in einen Makroblock von 16 · 16 Pixeln eingefügt sind. Die Blöcke oder
die Makroblöcke unterliegen verschiedenen Verarbeitungsvorgängen für die
Redundanzreduktion zwischen Bildern und innerhalb desselben Bildes. Eine
der angewendeten Verarbeitungsvorgänge ist die Bewegungsschätzung.
Dieses Verfahren besteht in einer Schätzung der Verschiebung eines Teils
des laufenden Bildes gegenüber vorangehenden oder künftigen Bildern. Auf
diese Weise werden ein oder mehrere Bewegungsvektoren gebildet, die die
Verschiebung bestimmen. Diese Bewegungsvektoren ermöglichen es, aus
den vorangehenden oder künftigen Bildern eine Voraussage des laufenden
Bildes vorzunehmen. Es wird dann die Differenz zwischen dieser
Voraussage und dem laufenden Bild bestimmt, und es ist diese Differenz, die
für die folgende Komprimierung angewendet wird. Zur Zeit werden
Bewegungsvektoren für sogenannte "Inter" und "bidirektionale" Bilder
benutzt, können jedoch auch für sogenannte "intra"-Bilder benutzt werden,
mit dem Zweck, die Auswirkungen möglicher Übertragungsfehler zu
verringern.
-
Die Bewegungsschätzung wird im allgemeinen für jeden Makroblock
durchgeführt. Anstelle eines vorangehenden Bildes ist es auch möglich, ein
in dem Koder gespeichertes Referenzbild anzuwenden, wobei dieses Bild
einem durch einen Dekoder dekodierten Bild entspricht (das bedeutet ein
Bild, das Informationsverluste aufgrund der Komprimierung berücksichtigt).
-
Eine Lösung zur Bestimmung des "besten" Makroblocks in dem Referenzbild
besteht in einem Vergleich des laufenden Makroblocks mit jedem Makroblock
des Referenzbildes. Als Vergleichskriterium wird eine Fehlerfunktion Err
definiert, die für jede mögliche Lage des Makroblocks in dem Referenzbild
berechnet wird. Die Lage, die den kleinsten Wert für die Funktion Err gibt,
wird den Verschiebevektor bestimmen. Letzterer kann verschiedene
Genauigkeitswerte haben, abhängig von der verfügbaren
Berechnungskapazität und der für die Kodierung der Bewegungsvektoren
vorgesehenen Durchlaßbandbreite. Eine Genauigkeit mit einem Bruchteil
eines Pixels kann durch eine Inter-Pixel-Interpolation durchgeführt werden.
Wenn die Bewegungsvektoren in der Amplitude begrenzt sind, wird ein
Untersuchungsfenster geeigneter Größe um die durch den laufenden
Makroblock bestimmte Lage angeordnet.
-
Die Berechnung der Bewegungsvektoren erfordert große
Berechnungskapazitäten, die mit der gewünschten Genauigkeit, der
Bildauflösung, ihrer Frequenz usw. ansteigen.
-
Eine üblicherweise benutzte Fehlerfunktion ist:
-
Err(m, n) = D(a(i, j), b(i + m, j + n))
-
wobei i und j die Lagen innerhalb eines Makroblocks bezeichnen, wobei m
und n die Koordinaten eines Bewegungsvektors bezeichnen und wobei a und
b die Luminanzwerte der Pixel des laufenden Makroblocks beziehungsweise
des verschobenen Makroblocks des Fensters oder des Suchbildes
bezeichnen.
-
Die Funktion D kann zum Beispiel sein: D(x, y) = x-y .
-
Ein Prozessor für die Bewegungsschätzung und ein Coprozessor auf der
Basis von systolischen Netzwerken sind beschrieben in der französischen
Patentanmeldung 94 10158, angemeldet auf den Namen von Thomson
Consumer Electronics am 19. August 1994.
-
Die systolischen Netzwerke sind Schaltungen, die die Auswertung der
Verzerrung zwischen einem laufenden Pixelblock und einem Block derselben
Größe eines Untersuchungsfensters eines vergangenen oder künftigen
Bildes durchführen. Die systolischen Netzwerke enthalten Speicherelemente
für die Speicherung der laufenden Blöcke. Diese laufenden Blöcke werden
mit Blöcken derselben Größe von einem Referenzfenster verglichen. Die
Blöcke des Referenzfensters werden in der Form von Pixelbändern in die
systolischen Netzwerke eingegeben und breiten sich darin Spalte für Spalte
aus.
-
Die verschiedenen systolischen Netzwerke des Coprozessors können in
verschiedenen Betriebsmodi benutzt werden. Insbesondere können
systolische Netzwerke in Reihe ausgebildet werden, um verschiedene
laufende Blöcke zu verarbeiten.
-
Die Aufgabe der Erfindung besteht darin, die Speisung der systolischen
Netzwerke mit Daten zu optimieren.
-
Gegenstand der Erfindung ist ein Verfahren zur Datenverarbeitung in
matrixförmigen Netzwerken in einem Bewegungsschätzungssystem, dadurch
gekennzeichnet, daß jedes Netzwerk eine Berechnung der Verzerrung für
einen Pixelblock in einem laufenden Bild durchführt, daß wenigstens zwei
Netzwerke in Reihe liegen und die Berechnungen für wenigstens zwei
aneinanderliegende Blöcke des laufenden Bildes durchführen, daß das
Referenzfenster der Gesamtheit dieser Blöcke entspricht, die in Pixelbändern
in das erste der Netzwerke eingegeben werden und sich von Netzwerk zu
Netzwerk in der Reihe von Netzwerken ausbreiten, daß die Zuordnung der
Blöcke zu den Netzwerken und die Eingaberichtung des Bandes in die
Netzwerke derart ist, daß der letze Teil des in das Netzwerk eingegebenen
Bandes einem Teil des Fensters des Block entspricht, der dem ersten der
Netzwerke zugeordnet ist.
-
Gemäß einer besonderen Ausführungsform sind die Referenzfenster um
Lagen von laufenden Blöcken zentriert, und die Fenster der beiden
aneinanderliegenden Blöcke sind um einen Block verschoben.
-
Gemäß einer besonderen Ausführungsform weisen die verschiedenen
Fenster identische Abmessungen auf, und die Zuordnung der Blöcke zu den
Netzwerken und die Eingaberichtung des Bandes in die Netzwerke sind
derart ausgebildet, daß die ersten Berechnungsergebnisse für die
Verzerrung, die durch die verschiedenen Netzwerke erfolgen, zur gleichen
Zeit verfügbar sind.
-
Gemäß einer besonderen Ausführungsform werden ein erster Block und ein
zweiter Block, die horizontal aneinander liegen, durch ein erstes Netzwerk
bzw. ein zweites Netzwerk, die in dieser Reihenfolge in Reihe liegen,
verarbeitet, und die Eingabe des Pixelbandes durch das erste Netzwerk
beginnt in einer solchen Richtung, daß der Teil des Bandes, der dem dem
zweiten Block zugeordneten Fenster entspricht, als erster eingegeben wird.
-
Gemäß einer besonderen Ausführungsform werden dann, wenn das Ende
eines Pixelbandes Teilen der Referenzfenster entspricht, die normalerweise
durch ein einen gegebenen Block verarbeitendes besonderes Netzwerk nicht
berücksichtigt werden müssen, dennoch die Berechnungsergebnisse aus
den diesen Teilen der Fenster entsprechenden Daten berücksichtigt, um das
Referenzfenster zu vergrößern, das normalerweise dem durch das
besondere Netzwerk verarbeiteten Block zugeordnet ist.
-
Weitere Merkmale und Vorteile der Erfindung ergeben sich aus der
Beschreibung eines nicht einschränkenden besonderen
Ausführungsbeispiels, das in den beigefügten Figuren beschrieben wird.
-
- Fig. 1 zeigt ein Funktionsdiagramm eines Prozessors für eine
Bewegungsschätzung,
-
- Fig. 2a und 2b zeigen schematisch die angewendete Strategie für den
Vergleich gemäß dem vorliegenden Ausführungsbeispiel,
-
- Fig. 3 zeigt ein Funktionsdiagramm eines systolischen Netzwerks, das für
die Berechnung der Bewegungsvektoren angewendet wird,
-
- Fig. 4 zeigt ein Funktionsdiagramm einer sogenannten "S"-Zelle des
systolischen Netzwerks von Fig. 3,
-
- Fig. 5 zeigt ein Funktionsdiagramm eines vereinfachten systolischen
Netzwerks, das die Erläuterung der Wirkungsweise in dem
nichtverschachtelten Modus ermöglicht,
-
- Fig. 6 zeigt ein Funktionsdiagramm eines vereinfachten systolischen
Netzwerks, das die Erläuterung der Wirkungsweise im verschachtelten
Modus ermöglicht,
-
- Fig. 7 zeigt ein Funktionsdiagramm des Coprozessors gemäß einer ersten
Variante,
-
- Fig. 8 zeigt ein Funktionsdiagramm des Coprozessors gemäß einer zweiten
Variante,
-
- Fig. 9 zeigt die Anordnung von zwei Referenzfenstern, die den beiden
aneinanderliegenden Blöcken entsprechen,
-
- Fig. 10 zeigt die Speisung der beiden in Reihe angeordneten systolischen
Netzwerke mit Daten gemäß einem ersten Beispiel,
-
- Fig. 11 zeigt die Speisung von zwei in Reihe liegenden systolischen
Netzwerken mit Daten gemäß einem ersten Ausführungsbeispiel der
Erfindung,
-
- Fig. 12 zeigt die Speisung der beiden in Reihe liegenden systolischen
Netzwerke mit Daten gemäß einem zweiten Ausführungsbeispiel der
Erfindung.
-
Zunächst wird ein Beispiel eines Prozessors für die Bewegungsschätzung
zur Durchführung der Erfindung beschrieben. Die Beschreibung beruht
insbesondere auf der Beschreibung des Coprozessors, der das Bauteil
darstellt, das die Berechnung des jedem Bewegungsvektor zugeordneten
Fehlers bewirkt.
-
Für weitere Informationen über die Anwendung von Bewegungsvektoren bei
der Komprimierung von Bildern entsprechend den MPEG-Normen wird
verwiesen auf:
-
"Information technology, Generic coding of moving pictures and associated
audio, Recommendation H.262 ISO/IEC 13818-2 (Video) Committee Draft of
November 1993."
-
Der Prozessor für die Bewegungsschätzung ermöglicht die Berechnung
verschiedener Typen von Bewegungsvektoren, abhängig von den
Anforderungen der MPEG-Norm: Vektoren für Halbbilder oder Bilder,
Vektoren eines vorangehenden Bildes zu dem laufenden Bild oder eines
künftigen Bildes zu dem laufenden Bild ("Vorwärts-Vektoren"
beziehungsweise "Rückwärts-Vektoren" oder "forward vectors" und
"backward vectors" in der englischen Sprache). Im folgenden wird aus Gründen
der Klarheit der Erläuterung das Beispiel von Vektoren von einem
vorangehenden Bild zu dem laufenden Bild gewählt. Natürlich ist die
Erfindung nicht auf das dargestellte Ausführungsbeispiel beschränkt.
-
Fig. 1 zeigt die Wirkungsweise eines Prozessors 101 für die
Bewegungsschätzung.
-
Der Prozessor 101 enthält eine Steuereinheit RISC 102 (dabei bedeutet
RISC: Reduced Instruction Set Computer"), einen Coprozessor 103 für
systolische Netzwerke, drei unabhängige Eingangsstufen 104, 105, 106 zum
Laden der Bilder, eine Ausgangsstufe 107 zur Lieferung der
Bewegungsvektoren sowie ein örtliches RAM und ein örtliches ROM (mit 108
beziehungsweise 109 bezeichnet).
-
Die Anwesenheit mehrerer unabhängiger Eingangsstufen macht es möglich,
mit beliebig vielen unabhängigen Videoquellen zu arbeiten. Gemäß einer
Variante der Ausführungsform ist jede Eingangsstufe mit einer Unterabtast-
Schaltung zur Durchführung einer hierarchischen Bewegungsschätzung
versehen.
-
Die verschiedenen erwähnten Teilsysteme kommunizieren über einen
Datenbus 111, der unter anderem mit einem externen Speicher vom Typ
DRAM 110 verbunden ist. Eine Speicher-Verwaltungseinheit 112 regelt den
Datenfluß zwischen den örtlichen Speichern. Die den Bildern
entsprechenden Daten (Referenzbilder oder laufende Bilder) werden dem
dynamischen Speicher 110 zugeführt. Als nächstes werden sie ausgelesen
und rechtzeitig dem Coprozessor 103 zugeführt. Die durch den Coprozessor
103 berechneten Bewegungsvektoren werden über einen Pufferspeicher 114
vom Typ MV BUFF dem dynamischen Speicherllo zugeführt. Im geeigneten
Zeitpunkt werden diese Vektoren ausgelesen und über die Ausgangsstufe
107 übertragen.
-
Der Prozessor 101 ist außerdem mit einem eine Schnittstelle bildenden
Mikroprozessor 115 versehen, der zur Programmierung und zur
Konfiguration der Steuereinheit 102 durch Fernladen des Kodes und der
Berechnungsparameter dient. Die in dem dynamischen Speicher 110
gespeicherten Bewegungsvektoren sind außerdem über die Schnittstelle 115
zugänglich.
-
Eine Einheit MAX-AVR 113 berechnet den mittleren Bewegungsvektor und
den maximalen Bewegungsvektor für jedes Bild.
-
Die Steuereinheit RISC 102 ist gemäß dem vorliegenden Beispiel ein
Prozessor mit 19 Bit, enthaltend 62 Register und einen Datenspeicher für 64
Wörter. Die Rolle der Steuereinheit 102 besteht darin, die Anforderungen von
den verschiedenen Einheiten des Prozessors 101 zu verarbeiten und sie
rechtzeitig zu aktivieren.
-
Die Steuereinheit RISC 102 ist mit dem örtlichen RAM 108 und dem örtlichen
ROM 109 verbunden, wobei der letztere allgemein angewendete Programme
enthält.
-
Der Coprozessor 103 enthält mehrere, parallel oder in Reihe arbeitende
systolische Netzwerke, abhängig von der programmierten Konfiguration. Im
folgenden wird zunächst die Wirkungsweise eines einzigen systolischen
Netzwerks beschrieben. Das ermöglicht ein besseres Verständnis der
Wirkungsweise des Coprozessors 103, der gemäß dem vorliegenden
Beispiel acht dieser Netzwerke enthält oder amalgamiert.
-
Fig. 2a zeigt den einfachsten Fall des Informationsflusses in dem systolischen
Netzwerk. Die grundsätzliche Wirkungsweise des Netzwerks besteht in dem
Vergleich eines laufenden Pixelblocks mit dem Inhalt eines Referenzfensters.
Der laufende Block wird in dem systolischen Netzwerk 201 gespeichert. Das
Referenzfenster wird bandweise dem Netzwerk zugeführt. Für jede mögliche
Lage wird die Fehlerfunktion Err berechnet.
-
Aus den verschiedenen Werten der Fehlerfunktion für denselben laufenden
Block, jedoch aus verschiedenen aus den Untersuchungsfenstern
extrahierten Blöcken, ermittelt ein Bauteil 202 den am besten geeigneten
Vektor. Dieses Bauteil wird später mehr im Detail beschrieben.
-
Fig. 2b beschreibt das Verfahren zur Ermittlung der Bänder, die dem
systolischen Netzwerk zuzuführen sind. Jedes Band enthält eine Anzahl von
Zeilen mit Pixeln, die der Anzahl der Zeilen des Netzwerks entspricht (4
entsprechend dem vorliegenden Beispiel). Das erste Band enthält die ersten
vier Zeilen des Referenzfensters. Wenn das erste Band vollständig
verarbeitet worden ist, wird die Verarbeitung mit dem folgenden Band
fortgesetzt, die die drei letzten Zeilen des ersten Bandes sowie die
unmittelbar auf dieses erste Band folgende Zeile enthält. Jedes Band wird
daher um eine Zeile relativ zu dem vorangehenden Band versetzt.
-
Jedes Band wird dem systolischen Netzwerk Spalte für Spalte zugeführt. Der
laufende Block, der dieselbe Anzahl von Zeilen wie jedes Band enthält, wird
auf diese Weise mit allen Blöcken gleicher Größe jedes Bandes verglichen.
Schließlich wird der laufende Block mit allen Blöcken gleicher Größe des
Referenzfensters verglichen sein. Genauso viele Werte der Fehlerfunktion
werden berechnet und zu dem Bauteil 202 übertragen sein.
-
Es sei bemerkt, daß sich zwei Bänder nur um eine Zeile mit Pixeln
unterscheiden. Diese Redundanz wird später ausgewertet, um die Ladung
mit Daten von dem Speicher 10 zu begrenzen.
-
Fig. 3 zeigt ein systolisches Netzwerk mit vier Zeilen und fünf Spalten. Dieses
Netzwerk enthält sogenannte "S"-Zellen, Puffer "B", Addierstufen "Add",
Umgehungszellen 301 und eine letze Umgehungszelle 302.
-
Die Zellen S bewirken die Berechnung a-b , wobei a und b die Werte eines
Pixels des laufenden Blocks beziehungsweise eines Pixels des
Referenzfensters sind. Der Ausgang jeder Zelle S derselben Zeile ist über
einen Puffer B mit dem Eingang der folgenden Zelle S verbunden. Ein Puffer
B liegt außerdem vor jeder ersten Zelle S einer Zeile. Die Pixelwerte b
breiten sich von einem Puffer zu einem nächsten Puffer in derselben Zeile
bei jedem Zyklus aus. Die Puffer halten die Werte b aufrecht, während die
Zellen S ihre Berechnungen durchführen.
-
Jede Zelle S besitzt außerdem einen Ausgang C, der das Ergebnis des
Vorgangs a-b liefert. Die Ausgänge C sind außerdem mit Puffern B
verbunden. Alle Puffer B derselben Spalte sind mit derselben Addierstufe
Add verbunden. Es gibt somit genauso viele Addierstufen wie Spalten.
-
Der Ausgang einer Addierstufe ist über drei in Reihe liegende Puffer B mit
dem Eingang der folgenden Addierstufe verbunden. Entsprechend dem
gewählten Operationsmodus wird der letzte der drei Puffer durch eine
Umgehungszelle 301 kurzgeschlossen oder nicht kurzgeschlossen.
-
Die letzte Umgehungszelle lieferte entweder einen Wert der Fehlerfunktion
bei jedem Zyklus in einem nicht-verschachtelten normalen Betrieb oder einen
Wert der Fehlerfunktion in jedem zweiten Zyklus im verschachtelten Modus.
Im letzten Fall addiert die in dieser letzten Umgehungszelle 301 integrierte
Addierstufe zwei aufeinanderfolgende Werte der Fehlerfunktion.
-
Gemäß einer Variante der Ausführungsform werden die Addierstufen Add mit
Hilfe von Addierstufen mit drei Eingängen gebildet (sogenannte "Three input
carry save adders").
-
Fig. 4 zeigt mehr im Detail die Funktionen einer Zelle S. Die Zelle S enthält
einen Eingang 401, einen direkt mit dem Eingang 401 verbundenen Ausgang
402, eine Berechnungseinheit 403 mit zwei Eingängen, von denen einer mit
dem Eingang 401 und der andere mit dem Ausgang eines Multiplexers 404
verbunden ist, der es ermöglicht, mittels einer Auswahlleitung 405 entweder
den Inhalt eines Puffers 406 oder den Inhalt eines Puffers 407 auszuwählen.
Die Eingänge der Puffer 406 und 407 sind ebenso mit dem Eingang 401 der
Zelle verbunden.
-
Jeder der beiden Puffer enthält einen Pixelwert eines laufenden Blocks.
Diese Werte werden in einem geeigneten Zeitpunkt über den Eingang 401
geladen. Die Steuerschaltungen der Puffer sind bekannt und werden daher
nicht mehr im Detail dargestellt. Die Anwesenheit von zwei Puffern parallel
ermöglicht es unter anderem, zur selben Zeit zwei laufende Blöcke in einem
einzigen systolischen Netzwerk zu speichern. Somit können zwei
Vergleichsvorgänge für dieselbe Lage in dem Referenzfenster durchgeführt
werden. Die Menge der zwischen dem dynamischen Speicher 10 und dem
Coprozessor 3 laufenden Daten wird auf diese Weise verringert.
-
Die Anwesenheit von zwei Puffern in jeder Zelle S ermöglicht darüberhinaus
einen sogenannten verschachtelten Betrieb, der es möglich macht, die
Anzahl an Zeilen des laufenden Blocks gegenüber der Anzahl an Zeilen des
systolischen Netzwerks zu verdoppeln. Dieser Betrieb wird später erörtert.
-
Die Berechnungseinheit liefert den Absolutwert der Differenz der beiden
ihren Eingängen zugeführten Werte.
-
Es sei bemerkt, daß im Rahmen dieses Beispiels die Werte b der Pixel des
Referenzfensters in den Puffern B zwischen den Zellen S gespeichert
werden, während die Werte a der Pixel des laufenden Blocks oder der
laufenden Blöcke in den Puffern der Zellen S gespeichert werden.
-
Es sei auch bemerkt, daß die Funktionen der Akkumulation der durch die
Zellen S erzeugten Zwischenergebnisse vollständig durch die Addierstufen
am Fuße jeder Spalte der Zellen S erfolgten.
-
Die normale Wirkungsweise (nicht verschachtelt) des systolischen Netzwerks
wird mittels des Schemas von Fig. 5 erläutert. Dieses Schema zeigt ein
systolisches Netzwerk mit einer einzigen Zeile und acht Spalten. Die
Wirkungsweise eines Netzwerks mit einer größeren Anzahl an Zeilen ist
vollständig ähnlich, wobei die Ergebnisse am Ausgang jeder Zelle S
(Ausgang S) im selben Zeitpunkt den Addierstufen zugeführt werden. Im
Rahmen der normalen Wirkungsweise werden nur zwei Puffer zwischen
jeder Addierstufe am Ende der Spalte benötigt. Zur Klarheit des Schemas
sind der dritte Puffer und die Umgehungszelle nicht dargestellt.
-
Die Pixelwerte wurden bereits in dem Netzwerk gespeichert. Ein Wert b ist
am Eingang des Netzwerks bei jedem Zyklus dargestellt. Tabelle 1 zeigt den
Verlauf der Ausgänge C über eine bestimmte Anzahl an Zyklen.
Tabelle 1
-
Während des Zyklus 0 wird der Wert b0 in dem ersten Puffer B
(Bezugszeichen 501) am Eingang des Netzwerks gespeichert. Es ist nur
beim Zyklus 1 der Fall, daß das durch die erste Zelle S gelieferte Ergebnis in
dem Puffer 502 am Ausgang C0 gespeichert wird. Während des Zyklus 1
wird der Wert b0 ebenso durch den zweiten Puffer B 503 gespeichert.
-
In einem gegebenen Zeitpunkt in der Funktionsweise des Netzwerks muß am
Ausgang der letzten Addierstufe die Summe aller Absolutwerte der
Differenzen, die einer gegebenen Lage des laufenden Blocks entsprechen (in
diesem Fall eine Zeile mit acht Pixeln), in dem Referenzfenster
zurückgewonnen werden. Die Ergebnisse, die dem Pegel der Addierstufen
für die erste Zeile des Referenzfensters hinzugefügt werden müssen, sind in
Tabelle 1 in fetter Schrift dargestellt.
-
Diese Funktion der Akkumulation bedingt die durch die Puffer 504 zwischen
den Addierstufen eingefügte Verzögerung. Es ist leicht erkennbar, daß eine
Verzögerung von zwei Zyklen eingeführt werden muß, damit die Ausbreitung
der Ergebnisse beim Pegel der Addierstufen richtig erfolgt. Das erklärt die
Anwesenheit der beiden Puffer zwischen jeder Addierstufe. Jeder Puffer führt
eine Verzögerung um einen Zyklus ein, In anderen Worten, die beiden Puffer
504 und 505 zwischen den beiden ersten Addierstufen beseitigen die durch
die Puffer 501 und 502 eingeführte Verzögerung.
-
Am Ende des fünfzehnten Zyklus ist der Wert der Funktion Err für die erste
mögliche Lage des laufenden Blocks am Ausgang 506 des Netzwerks
dargestellt.
-
Es sei erwähnt, daß bei dieser Wirkungsweise nur eine der in jeder Zelle
gespeicherten Werte benutzt wird. Gemäß einer Variante der
Ausführungsform wird ein einziger Puffer für die Speicherung der Pixelwerte
des laufenden Blocks in jeder Zelle S benutzt.
-
Fig. 6 und Tabelle 7 zeigen die Wirkungsweise eines systolischen Netzwerks
in dem sogenannten verschachtelten Modus. Dieser Modus macht es
möglich, Fehlerfunktionen für laufende Blöcke zu bestimmen, die eine Anzahl
an Zeilen gleich dem Doppelten der Anzahl an Zeilen des systolischen
Netzwerks enthalten. Das erfolgt in einfacher Weise durch Hinzufügung
eines zusätzlichen Puffers in jeder Zelle S sowie eines zusätzlichen Puffers
zwischen jeder Addierstufe.
-
Fig. 6 ist ähnlich zu Fig. 5. abgesehen von der Tatsache, daß ein zusätzlicher
Puffer zwischen jedem Paar von Addierstufen eingefügt ist. Außerdem
enthält jede Zeile S die beiden in Fig. 4 dargestellten internen Puffer.
Während der geradzahligen Zyklen wird der Inhalt des ersten Puffers jeder
Zelle S mit der entsprechenden Berechnungseinheit gemultiplext, während
der Inhalt des zweiten Puffers während der ungeradzahligen Zyklen benutzt
wird.
-
Der laufende Block mit verdoppelter Größe wird in zwei einander vertikal
überlappende Unterblöcke a und a' aufgetrennt. Der erste Unterblock a wird
in den ersten Puffern jeder Zelle S gespeichert, während der zweite
Unterblock a' in den zweiten Puffern jeder Zelle S gespeichert wird.
-
Das Band des Referenzfensters enthält in identischer Weise die doppelte
Anzahl von Zeilen. Es enthält ein oberes Unterband b und ein unters
Unterband b'. Während eines geradzahligen Zyklus wird eine Spalte des
Unterbands b an dem Eingang des systolischen Netzwerks dargestellt,
während eine Spalte von b' während der ungeradzahligen Zyklen dargestellt
wird.
-
Tabelle 2 gibt den Zustand der Ausgänge c nach jedem Zyklus wieder. Wie
vorher zeigen die fetten Schriftzeichen die Zwischenergebnisse an, die
hinzugefügt werden müssen, um eine einem Unterblock entsprechende
Fehlerfunktion zu bilden.
-
Die Abwechslung zwischen den beiden Unterblöcken und den beiden
Unterbändern führt bezüglich eines nicht-verschachtelten Betriebs eine
zusätzliche Verzögerung um einen Zyklus zwischen der Anwesenheit am
Ausgang einer Addierstufe des Gesamtfehlers entsprechend einer
gegebenen Lage und der Anwesenheit des dem Eingang der nächsten
Addierstufe entsprechenden Zwischenergebnisses ein. Aus diesem Grund ist
ein dritter Puffer zwischen jedem Paar von Addierstufen eingefügt.
-
Die letzte Addierstufe 601 des Netzwerks von Fig. 6 ist einerseits mit einem
ersten Eingang einer Addierstufe 602 und andererseits mit einem Puffer 603
verbunden, dessen Ausgang mit dem zweiten Eingang der Addierstufe 602
verbunden ist.
-
Die einem Unterblock entsprechende Fehlerfunktion wird bei jedem Zyklus
an den Ausgang der Addierstufe 601 geliefert (sobald das Netzwerk einmal
richtig initialisiert worden ist). Tabelle 2 zeigt, daß der dem Unterblock a'
entsprechende Wert der Fehlerfunktion gegenüber dem dem Unterblock a
entsprechenden Wert um einen Zyklus verzögert ist. Die beiden Werte
müssen addiert werden, um den dem gesamten Block a+a' entsprechenden
Wert der Fehlerfunktion zu erhalten.
-
Dieser sogenannte verschachtelte Funktionsmodus ist sehr nützlich, da er es
ermöglicht, die Größe des Datenbus zu verringern, der die Pixelbänder dem
Prozessor zuführt.
-
Gemäß einer Variante der Ausführungsform ist das systolische Netzwerk
dafür ausgebildet, laufende Blöcke zu verarbeiten, die eine Anzahl an Zeilen
gleich dem N-fachen der Anzahl der Zeilen des Netzwerks enthalten, wobei
N eine ganze Zahl größer als 2 ist. In diesem Fall wird man so viele Puffer
vorsehen, wie sie in jeder Zelle S notwendig sind.
Tabelle 2
-
Fig. 7 zeigt schematisch den Coprozessor gemäß einer ersten Variante des
Ausführungsbeispiels. Gemäß dieser Variante enthält der Coprozessor zehn
sogenannte FIFOs (first in first out) 701 bis 710, die parallel mit dem
Datenbus 11 verbunden sind. Die Anzahl der Datenwörter je FIFO bestimmt
die Anzahl der Spalten der Pixel des Untersuchungsfensters. Die Ausgänge
der Speicher 701 bis 710 sind mit einer Kommutierschaltung 712 verbunden,
die zehn Eingänge und acht Ausgänge 714 bis 721 aufweist.
-
Die Schaltung 712 ermöglicht die Verbindung des Ausgangs jedes der zehn
FIFOs mit jedem der acht Ausgänge der Schaltung. Jedes FIFO enthält eine
vollständige Zeile des Untersuchungsfensters. Die acht FIFOs, die in einem
gegebenen Zeitpunkt mit einem Ausgang verbunden sind, entsprechen den
Zeilen des Bandes des verarbeiteten Untersuchungsfensters.
-
Die beiden nicht angeschlossenen zusätzlichen FIFOs werden durch den
Datenbus von den in dem Speicher 10 gespeicherten Daten geladen. Die
geladenen Daten entsprechen den Zeilen des Untersuchungsfensters, die
sich von den derzeit verarbeiteten Bändern unterscheiden.
-
Es sei zum Beispiel angenommen, daß das erste Band von acht Zeilen L1
bis L8 eines Untersuchungsfensters in den FIFOs 701 bis 708 enthalten ist.
Während der Verarbeitung dieser acht Zeilen wird die Zeile L9 in das FIFO
709 geladen. Wenn die Verarbeitung des ersten Bandes beendet ist, wird die
in dem FIFO 701 gespeicherte Zeile L1 nutzlos. Das zweite Band enthält
praktisch die Zeilen L2 bis L9. Die Verarbeitung dieses zweiten Bandes kann
daher ohne Totzeit beginnen, da das vollständige Band in den FIFOs
vorhanden ist. Die Kommutierschaltung 802 vom Typ "crossbar" hat die
Aufgabe, die richtige Reihenfolge der gespeicherten Zeilen vor der Zuführung
zu den systolischen Netzwerken 722 bis 725 wiederherzustellen.
-
In dem Fall, wo die Bänder acht Zeilen aufweisen, genügen neun FIFOs für
den beschriebenen Betrieb. Das zehnte FIFO wird zum Beispiel benutzt,
wenn zwei Bänder mit vier Zeilen parallel verarbeitet werden.
-
Gemäß der vorliegenden Variante sind vier systolische Netzwerke 722 bis
725 mit vier Zeilen und sechzehn Spalten jedes mit den Ausgängen der
Kommutierschaltung verbunden. Vereinbarungsgemäß sagt man, daß der
Ausgang 714 die obere Zeile eines Bandes mit acht Zeilen darstellt, während
der Ausgang 721 die untere Zeile darstellt. Das erste und das dritte Netzwerk
(722 beziehungsweise 724) sind mit den vier oberen Ausgängen 714 bis 717
verbunden, während das zweite und das vierte Netzwerk (723
beziehungsweise 725) mit den vier unteren Ausgängen 718 bis 721
verbunden sind.
-
Die obige Anordnung ermöglicht eine flexible Verarbeitung von laufenden
Blöcken mit unterschiedlicher Größe. Tatsächlich können die vier Netzwerke
auf verschiedene Weise angesehen werden:
-
Acht Netzwerke mit 4 · 8 Elementen, wobei jedes Netzwerk mit 4 · 16
Elementen zwei laufende Blöcke mit 4 · 8 Elementen verarbeitet,
-
Vier Netzwerke mit 8 · 8 Elementen,
-
Zwei Netzwerke mit 8 · 16 Elementen,
-
Zwei Netzwerke mit 16 · 16 Elementen.
-
Im letzten Fall arbeiten die Netzwerke im verschachtelten Modus, wobei nur
acht Ausgänge und nicht sechzehn verfügbar sind. Die acht Ausgänge liefern
abwechselnd Spalten mit acht Pixeln eines oberen Bandes und eines
unteren Bandes des Referenzfensters.
-
Offensichtlich kann man auch erwägen, sechzehn FIFOs anstelle von acht zu
benutzen (ohne die FIFOs zu zählen, die für das Laden der nächsten Zeile
benötigt werden).
-
Wie bereits vorher erwähnt, bestimmt die Tiefe der FIFOs die Breite des
Referenzfensters. In dem Fall, wo man mit Netzwerken mit 4 · 8 Elementen
arbeitet, ist es möglich, die FIFOs in Paaren zu gruppieren und das
Äquivalent einer Zeile von Pixeln mit doppelter Länge in jedem Paar von
FIFOs zu speichern.
-
Fig. 7 zeigt außerdem in Form von Pfeilen die Art der Gruppierung der
Berechnungsergebnisse am Ausgang jedes Netzwerks mit 4 · 16 Elementen
gemäß dem Betriebsmodus.
-
Fig. 8 zeigt eine zweite Variante. Neun FIFOs (unter dem Bezugszeichen 801
gruppiert) speisen eine Kommutierschaltung 802. Der Coprozessor gemäß
dem vorliegenden Beispiel enthält acht systolische Netzwerke 803 bis 810
mit 4 · 8 Elementen. Tatsächlich sind zwei Netzwerke 4 · 8 in Kaskade der
Fig. 8 äquivalent zu einem Netzwerk 4 · 16 von Fig. 7. Fig. 8 zeigt noch besser
die Übertragung der Berechnungsergebnisse jedes der Netzwerke, wenn
acht laufende Blöcke von 4 · 8 parallel verarbeitet werden. Die beiden oberen
Netzwerke 803 und 804 sind als Beispiel angeführt. Das endgültige Ergebnis
(das heißt der Wert der Fehlerfunktion) am Ausgang des Netzwerks 803 wird
direkt zu dem Netzwerk 804 übertragen. Abhängig davon, ob man mit acht
laufenden Blöcken mit 4 · 4 oder mit vier laufenden Blöcken mit 8 · 8 arbeitet,
muß, das Ergebnis am Ausgang des Netzwerks 803 für die spätere
Verarbeitung verfügbar sein oder auch nicht verfügbar sein. In dem Fall, wo
man mit acht laufenden Blöcken mit 4 · 4 Pixeln arbeitet, wird dieses Ergebnis
für die Bestimmung des Bewegungsvektors des durch das Netzwerk 803
verarbeiteten Blocks benötigt.
-
Gemäß der vorliegenden Variante ist jedem Netzwerk mit 4 · 8 Elementen
eine Zelle M zugeordnet. Jede Zelle M bestimmt den Minimalwert der
Fehlerfunktion am Ausgang eines der Netzwerke aus allen einem Block
zugeordneten Fehlerwerten und behält die Koordinaten des zugehörigen
Bewegungsvektors in dem Speicher. Die Ergebnisse werden über einen
speziellen Datenbus 811 übertragen.
-
Die Ausgänge der Netzwerke 803 und 804, 807 und 808 sind jede mit dem
Eingang eines Multiplexers mit zwei Eingängen verbunden, dessen Ausgang
mit dem Eingang der zugehörigen Zelle M verbunden ist. Der Ausgang jedes
derselben Netzwerke ist außerdem mit dem Eingang einer Addierstufe mit
zwei Eingängen verbunden, die an ihrem anderen Eingang den Ausgang des
unmittelbar darunterliegenden Netzwerks empfängt. Für die Netzwerke 803,
804, 807 und 808 sind dieses jeweils die Ausgänge der Netzwerke 805, 806,
809 und 810.
-
Wenn der Prozessor auf acht laufenden Blöcken mit je 4 · 8 Pixeln arbeitet, ist
der Ausgang jedes Netzwerks direkt mit der zugehörigen Zelle M verbunden.
Jede Zelle bestimmt dann für sich alleine den Minimalwert der Fehlerfunktion
und den Bewegungsvektor. Das ergibt acht verschiedene Vektoren. Die
Werte der Fehlerfunktion am Ausgang der Netzwerke 803, 805, 807 und 809
werden nicht zu den Netzwerken übertragen, die auf diese in Reihe folgen.
-
Wenn der Prozessor auf vier Blöcken mit 8 · 8 Pixeln arbeitet, schalten die
Multiplexer derart um, daß eine der Zellen M, die den beiden auf demselben
Block arbeitenden Zellen überlagert sind, die Summe der Werte der
Fehlerfunktionen empfängt, die durch diese beiden Netzwerke berechnet
werden. Zum Beispiel bewirkt die dem Netzwerk 803 zugeordnete Zelle M
ihre Berechnungen aus den Werten der Fehlerfunktion, die den 8 · 8 in den
Netzwerken 803 und 805 verarbeiteten Block entsprechen. Daraus ergibt
sich ein einziger Vektor. Wie im Falle des vorangehenden Absatzes werden
die Werte der Fehlerfunktion, die sich aus der ersten Spalte der Netzwerke
ergibt, nicht zu der zweiten Spalte übertragen.
-
Wenn der Prozessor auf zwei Blöcken mit 8 · 16 Pixeln arbeitet, werden nur
die den Netzwerken 804 und 808 zugeordneten Zellen M benutzt. Diese
Paare von Netzwerken 4 · 8 803 und 804, 805 und 806, 807 und 808 und
schließlich 809 und 810 werden so gedeutet, daß jede nur ein
kontinuierliches Netzwerk mit den Abmessungen 4 · 16 bildet. Zum Beispiel
addiert die dem Netzwerk 804 zugeordnete Addierstufe die von den
Netzwerken 804 und 806 ausgehenden Fehler. Die durch die Netzwerke 803
und 805 berechneten Werte der Fehlerfunktion sind in den Werten der
Fehlerfunktion enthalten, die durch die Netzwerke 804 und 806 berechnet
und über die Verbindungen zwischen den Netzwerken 803 und 804
beziehungsweise 805 und 806 zu diesen übertragen werden.
-
Im Falle eines verschachtelten Modus ist das Prinzip identisch. Einfach
angenommen, die Zelle oder die Zellen M halten zwei Bewegungsvektoren
aufrecht, eine für jeden Block.
-
Die Kommutation der Multiplexer wird durch die Steuerstufe 2 der Fig. 1 in
Abhängigkeit von dem gewählten Betriebsmodus gesteuert.
-
Fig. 9 zeigt die Anordnung der beiden Referenzfenster, wenn zwei laufende
Blöcke verarbeitet werden müssen. Diese laufenden Blöcke tragen die
Bezugsziffern 1 und 2. Die Bezugsziffern X1Min und X1 Max bezeichnen die
Abszissen des dem Block 1 entsprechenden Referenzfensters, während
X2Min und X2Max die Abszissen des dem Block 2 zwei entsprechenden
Referenzfensters bezeichnen. Die Lage der Blöcke 1 und 2 entspricht in dem
vorliegenden Beispiel im wesentlichen der Mitte der Fenster. Es ist
ersichtlich, daß die beiden Fenster den gesamten Teil zwischen den
Abszissen X2Min und X2Max gemeinsam haben.
-
Der systolische Coprozessor ermöglicht eine Verarbeitung, die nur einen
Durchlauf der Pixel zwischen den Abszissen X1Min und X2Max für die
Berechnungen für die beiden Blöcke 1 und 2 erfordert.
-
Wie oben beschrieben, können zwei systolische Netzwerke in Reihe (wie
zum Beispiel die beiden Netzwerke 803 und 804) zwei getrennte Blöcke
verarbeiten. Während die Pixeldaten in durchsichtiger Weise von einem
Netzwerk zu dem nächsten laufen, werden die durch das erste Netzwerk
berechneten Werte der Fehlerfunktion nicht einfach zu dem folgenden
Netzwerk übertragen. Die dem ersten beziehungsweise dem zweiten
Netzwerk zugeordneten beiden Zellen M stellen getrennt die Werte der
jedem der beiden Netzwerke entsprechenden Fehlerfunktionen wieder her.
-
Fig. 10 zeigt ein erstes Beispiel der Anordnung und der Einführung der
Pixeldaten in die beiden in Reihe angeordneten systolischen Netzwerke. Zur
Erläuterung dient das obere Band der Pixel zwischen den Abszissen X1Min
und X2Max. Die Bezugsziffern A und B bezeichnen die Lagen der ersten
Blöcke in den beiden Referenzfenstern, die mit den laufenden Blöcken zu
vergleichen sind, und lassen besser die Art erkennen, in der die Daten in das
Netzwerk eingeführt werden.
-
Es scheint natürlich, den Block 1 durch das erste systolische Netzwerk (zum
Beispiel das Netzwerk 803) und den Block 2 durch das zweite Netzwerk
(zum Beispiel 804) zu verarbeiten. Somit entspricht diese Anordnung der
natürlichen Anordnung der Blöcke 1 und 2 in dem laufenden Bild. Außerdem
wäre dann, wenn die beiden Netzwerke in Reihe arbeiten (gemäß einem
anderen Betriebsmodus) auf einem Block mit der doppelten Größe relativ zu
der Größe eines der Blöcke 1 oder 2 diese Anordnung völlig natürlich.
-
Somit ist ersichtlich, daß diese Anordnung Vorteile für das im folgenden
anhand der Fig. 11 beschriebene erfindungsgemäße Verfahren liefert.
-
In Tabelle 1 ist ersichtlich, daß für Netzwerke mit einer Länge von acht Pixeln
die für die letzte Spalte des ersten Referenzblocks vorgenommene
Berechnung nur beim Zyklus 15 erfolgt.
-
Wenn man die Anordnung von Fig. 10 betrachtet, sind die Berechnungen für
den Block A und den Block 1 nach dem Zyklus 15 beendet. Diejenige, die
dem Block A und dem Block B entsprechen, werden erst zu Beginn des
Zyklus 17 beginnen, wenn der gesamte Block B das erste Netzwerk passiert
hat.
-
Es ist daher ersichtlich, daß das erste gültige Ergebnis (entsprechend dem
Block A) von dem ersten Netzwerk nicht zur selben Zeit wie das erste gültige
Ergebnis (entsprechend Block B) von dem zweiten Netzwerk verfügbar sein
wird.
-
Das erfordert eine versetzte oder gestaffelte Verwaltung der Ergebnisse
jedes der Netzwerke, wodurch das System komplexer wird.
-
Außerdem muß das Band in das Netzwerk gelangen, bis der Block C von
Fig. 10 sich vollständig in dem zweiten Netzwerk befindet. Das besagt, daß
2*(X2Max-X1 Min+X2Min-X1 Min) Zyklen notwendig sind, um das gesamte
Band zu verarbeiten. Das erste Netzwerk wird unnütze Berechnungen
durchführen, während der Block C in das zweite Netzwerk gelangt, und
umgekehrt wird das zweite Netzwerk unnütze Berechnungen durchführen,
während es darauf wartet, daß die erste Spalte von Pixeln des Block B ihn
über das erste Netzwerk erreicht. Gemäß einer Variante der
Ausführungsform wird dieser Nachteil dadurch minimiert, daß alle Bänder
eines Bildes kontinuierlich verarbeitet werden, indem ein Band nach dem
anderen, ohne Lücken zu belassen, in das systolische Netzwerk eingegeben
wird.
-
Fig. 11 zeigt ein besonderes Beispiel des Verfahrens gemäß der Erfindung.
Die beiden Blöcke 1 und 2 werden derart gespeichert, daß ihre Anordnung
invers zu ihrer Anordnung in dem laufenden Bild ist. In diesem Fall wird der
Block 2 in dem ersten Netzwerk gespeichert, während der Block 1 in dem
folgenden Netzwerk gespeichert wird.
-
Auf diese Weise wird der Block A durch das zweite Netzwerk zur gleichen
Zeit wie der Block B verarbeitet, und die Ergebnisse für ein und dasselbe
Band sind parallel und zur gleichen Zeit für beide Blöcke verfügbar. Solange
die erste Spalte von Pixeln des Blocks A das zweite Netzwerk nicht erreicht
hat, sind die durch die beiden Netzwerke durchgeführten Berechnungen
unnütz (zumindest wenn die Berechnung eines vorangehenden Bandes nicht
zuende geht). Es ist jedoch nicht notwendig, darauf zu warten, daß der Block
C vollständig das erste Netzwerk durchläuft, da er nur durch dieses erste
Netzwerk verarbeitet wird. Es ergibt sich daher eine Zeitersparnis
entsprechend einem vollständigen Block (16 Zyklen), entweder für das
verarbeitete Band oder für das verarbeitete Bild, wenn man eine
kontinuierliche Einführung der Bänder annimmt.
-
Gemäß einer Variante der Ausführungsform der Erfindung werden die durch
das erste Netzwerk gelieferten Ergebnisse berücksichtigt, selbst was die dem
Block A entsprechenden Pixel betrifft. Das führt eine Asymmetrie des
Referenzfensters um die Lage des Blocks 2 ein. In dem Maße, wie diese
Asymmetrie nicht stört (die derart ermittelten Bewegungsvektoren können
nicht maximale negative und positive Komponenten gleicher Amplitude
enthalten), erweitert diese Variante das Referenzfeld, ohne die Gesamt-
Berechnungszeit zu verlängern. Diese Variante kann ebenso zu Beginn
eines Bandes wie auch an seinem Ende angewendet werden. Trotzdem geht
in diesem Fall der Vorteil, daß die Ergebnisse für die beiden Blöcke zur
gleichen Zeit verfügbar sind, verloren.
-
Es sei bemerkt, daß die Umkehr der Blöcke 1 und 2 bezüglich der Lage
gemäß Fig. 10 zu demselben Ergebnis führt, wie wenn die Anordnung von
Fig. 10 beibehalten und das Band von Pixeln während seiner Umkehr
eingefügt würde. Das bedeutet, daß mit den Pixeln mit der Abszisse X2Max
begonnen und mit denen mit der Abszisse X2Min beendet wird. In diesem
Fall werden die Pixel in jedem der laufenden Blöcke 1 und 2 invertiert. Dieser
Ausführungsmodus ist in Fig. 12 dargestellt.
-
Die Erfindung ist nicht auf das Beispiel des beschriebenen systolischen
Netzwerks beschränkt, sondern ebenso bei andern Typen von Netzwerken
anwendbar, die insbesondere für die Bewegungsschätzung angewendet
werden.
-
Außerdem können mehr als zwei Netzwerke in Reihe angeordnet sein.