-
HINTERGRUND
DER ERFINDUNG
-
Die
vorliegende Erfindung bezieht sich auf ein Verfahren zum Decodieren
komprimierter Bewegtbilddaten und auf einen Decodierer, der dieses
Verfahren nutzt, und insbesondere auf ein Verfahren und auf einen Decodierer,
die geeignet sind, wenn die komprimierten Daten Fehler enthalten.
-
Es
sind viele Verfahren zum Komprimieren von Bewegtbilddaten einschließlich Verfahren,
die Codes mit variabler Länge
nutzen, bekannt. Zum Beispiel spezifiziert die Empfehlung H.261
des Telekommunikationsnormungssektors des Internationalen Fernmeldevereins
(ITU-T) ein Codierungsverfahren mit variabler Länge, das einen Videodatenstrom
in Gruppen von Bildbereichen teilt, die einen Startcode nutzen,
um den Beginn jeder Gruppe zu identifizieren. Jeder Bildbereich
kann entweder in einer Intra-Betriebsart oder in einer Inter-Betriebsart
codiert werden. Weitere Einzelheiten werden in der Beschreibung
der Erfindung gegeben.
-
Wenn
es in irgendeinem Verfahren, das einen Code mit variabler Länge verwendet,
in dem codierten Datenstrom einen Fehler gibt, kann der Decodierer
die Synchronisation mit den Grenzen der Codewörter verlieren. Der Verlust
der Synchronisation wird erkannt, wenn der Decodierer ein unzulässiges Codewort
oder eine andere Verletzung der Codierungsregeln feststellt. Um
die Bildverschlechterung zu minimieren, verwirft ein herkömmlicher
Decodierer alle Daten von dem Punkt, an dem der Fehler erkannt wird,
bis zu dem nächsten Punkt,
an dem die Synchronisation zuverlässig wiedergewonnen wird; in
dem H.261-Codierungsschema ist dieser Punkt der nächste Startcode.
Die verworfenen Daten werden z. B. durch Austauschen decodierter
Daten von dem vorhergehenden Teilbild des Bewegtbilds ersetzt.
-
Das
US-Patent 5.168.356 an Acampora offenbart eine Vorrichtung zum Segmentieren
eines codierten Videosignals für
die Sendung und beschreibt einen weiteren Decodierer, der einen
gesamten Transportblock von Daten verwirft, wenn ein Fehler entdeckt
wird.
-
Ein
Problem ist, dass der Decodierer den Verlust der Synchronisation
nicht sofort erkennen kann. Dies tritt auf, wenn ein Fehler das
beabsichtigte Codewort in ein anderes, zulässiges Codewort mit einer anderen Länge umwandelt.
Gelegentlich wird auf diese Weise eine Zeichenfolge mehrerer unbeabsichtigter,
aber zulässiger
Codewörter
erzeugt. Somit kann der Decodierer eine bestimmte Datenmenge falsch
decodieren, ohne den Fehler zu erkennen, und die falschen Daten
unter der falschen Annahme ausgeben, dass die Daten richtig decodiert
wurden. Die Verwendung der falsch decodierten Daten kann insbesondere
in Bildbereichen, die in der Intra-Betriebsart codiert sind, eine
schwere Bildverschlechterung verursachen.
-
Einige
Codes mit variabler Länge
besitzen die Eigenschaft, dass dann, wenn die Grenzsynchronisation
wegen eines Fehlers verloren geht, die richtige Synchronisation
mit hoher Wahrscheinlichkeit schnell und automatisch wiedergewonnen
wird, ohne dass es notwendig ist, auf das Erscheinen eines Spezialcodes
wie etwa eines Startcodes zu warten. Allerdings gibt es bei diesen
selbst resynchronisierenden Codes ein weiteres Problem, dass gelegentlich
eine falsche Synchronisation wiedergewonnen wird, bevor die richtige
Synchronisation wiedergewonnen worden ist. Somit kann der Decodierer,
nachdem er einen Fehler erkannt und eine bestimmte Menge nicht decodierbarer
Daten verworfen hat, ein zulässiges
Codewort erkennen und zu der Annahme geführt werden, dass eine Resynchronisation
stattgefunden hat, wenn das erkannte Codewort tatsächlich aus
Teilen zweier angrenzender Codewörter
besteht. Auch in diesem Fall können
falsche Daten ausgegeben werden, als ob die Daten richtig wären.
-
Probleme
wie etwa das obige sind nicht auf Codes mit variabler Länge beschränkt. Wenn
in irgendeinem Codierungsschema, das Bewegtbilddaten komprimiert,
ein Datensegment wegen eines Fehlers unbenutzbar gemacht wird, besteht
eine Gefahr, dass benutzbare decodierte Daten, die dem unbenutzbaren
Segment vorangehen oder auf es folgen, falsch decodiert worden sein
können,
und dass die Verwendung dieser falsch decodierten Daten zu störenden Bilddefekten
führen
könnte.
-
ZUSAMMENFASSUNG
DER ERFINDUNG
-
Dementsprechend
ist es eine Aufgabe der vorliegenden Erfindung, zu verhindern, dass
die Qualität eines
Bewegtbilds durch nicht erkannte Decodierungsfehler, die einem erkannten
Fehler vorhergehen oder auf ihn folgen, verschlechtert wird.
-
Wenn
ein Segment eines komprimierend codierten Datenstroms, der ein Bewegtbild
repräsentiert, durch
einen Fehler unbenutzbar gemacht wird, verwirft das erfindungsgemäße Decodierungsverfahren
eine bestimmte Menge decodierter Daten, die an das unbenutzbare
Segment angrenzen, und verwendet andere decodierte Daten, um die
verworfenen decodierten Daten zu ersetzen. Es können decodierte Daten auf einer Seite
oder auf beiden Seiten des unbenutzbaren Segments verworfen werden.
-
Wenn
Daten für
verschiedene Bildbereiche in verschiedenen Betriebsarten codiert
sind, setzt das erfindungsgemäße Verfahren
vorzugsweise für
jede Betriebsart einen getrennten Verwerfbereich. Wenn jeder Bildbereich
einen einzigen Abschnitt des codierten Datenstroms belegt, verwirft
das erfindungsgemäße Decodierungsverfahren
vorzugsweise eine spezifizierte Anzahl decodierter Bildbereiche.
Wenn jeder Bildbereich mehrere nicht zusammenhängende Abschnitte in dem codierten
Datenstrom belegt, verwirft das erfindungsgemäße Decodierungsverfahren vorzugsweise
alle decodierten Daten für
alle Bildbereiche mit irgendwelchen codierten Daten in einem bestimmten
Bereich.
-
Der
erfindungsgemäße Bewegtbilddecodierer
umfasst eine Decodierungseinheit, die Daten decodiert und Fehler
erkennt, einen Bildspeicher zum Speichern der decodierten Daten
und eine Verwerfeinheit zum Setzen des Bereichs oder der Bereiche,
in denen decodierte Daten verworfen werden sollen.
-
KURZBESCHREIBUNG
DER ZEICHNUNG
-
In
der beigefügten
Zeichnung ist Folgendes gezeigt:
-
1 ist
ein Blockschaltplan eines Standard-Videocodierers und -Videodecodierers;
-
2 veranschaulicht
eine Standardhierarchie von Bewegtbilddaten;
-
3 veranschaulicht
die Codierungssequenz von Transformationskoeffizienten für einen
Block von Bewegtbilddaten;
-
4 veranschaulicht
die allgemeine Struktur eines codierten Datenstroms;
-
5 veranschaulicht
eine Standard-Videomultiplexcodierungs-Syntax;
-
6 veranschaulicht
Codierungstabellen mit variabler Länge;
-
7 ist
ein Blockschaltplan eines Bewegtbilddecodierers gemäß einer
ersten Ausführungsform
der Erfindung;
-
8 veranschaulicht
die Behandlung eines Fehlers in der ersten Ausführungsform;
-
9 veranschaulicht
ein fehlerfrei decodiertes Bild;
-
10 veranschaulicht
ein decodiertes Bild mit Fehlern in zwei Makroblöcken;
-
11 ist
ein Ablaufplan, der den Betrieb der ersten Ausführungsform veranschaulicht;
-
12 veranschaulicht
die Resynchronisation nach einem Fehler, wenn ein selbst resynchronisierender
Code genutzt wird;
-
13 veranschaulicht
Segmente richtig und falsch decodierter Daten und nicht decodierbarer
Daten;
-
14 ist
ein Blockschaltplan eines Bewegtbilddecodierers gemäß einer
zweiten Ausführungsform der
Erfindung;
-
15 veranschaulicht
die Behandlung eines Fehlers in der zweiten Ausführungsform;
-
16 und 17 sind
ein Ablaufplan, der den Betrieb der zweiten Ausführungsform veranschaulicht;
-
18 ist
ein Blockschaltplan, der einen Teil eines Bewegtbilddecodierers
gemäß einer
dritten Ausführungsform
der Erfindung zeigt;
-
19 veranschaulicht
die Behandlung eines Fehlers der dritten Ausführungsform;
-
20 ist
ein Blockschaltplan, der einen Teil eines Bewegtbilddecodierers
gemäß einer
vierten Ausführungsform
der Erfindung zeigt; und
-
21 veranschaulicht
die Behandlung eines Fehlers in der vierten Ausführungsform.
-
AUSFÜHRLICHE
BESCHREIBUNG DER ERFINDUNG
-
Anhand
der beigefügten
beispielhaften Zeichnung werden Ausführungsformen des erfindungsgemäßen Decodierungsverfahrens
beschrieben. Zunächst
wird allerdings eine kurze Beschreibung eines Videocodierers/-decodierers
(Video-Codecs) der Norm H.261 und des Codierungsverfahrens der Norm
H.261 gegeben. Diese Beschreibung ist relevant, da der erfindungsgemäße Decodierer
zum Decodieren eines H.261-codierten Datenstroms verwendet werden
kann.
-
1 ist
ein Blockschaltplan eines Video-Codecs, wie er in der ITU-T-Empfehlung
H.261 beschrieben ist. Der Codec umfasst einen Videocodierer 1,
der ein digitales Videosignal in einen codierten Bitstrom umsetzt,
und einen Videodecodierer 3, der die Umkehrfunktion ausführt. Der
Videocodierer 1 umfasst einen Quellcodierer 5,
einen Videomultiplexcodierer 7, einen Sendepuffer 9,
einen Sendecodierer 11 und eine Steuereinheit 13.
Der Videodecodierer 3 umfasst einen Quelldecodierer 15,
einen Videomultiplexdecodierer 17, einen Empfangspuffer 19 und
einen Empfangsdecodierer 21.
-
Der
Quellcodierer 5 komprimiert das digitale Videosignal durch
verschiedene gut bekannte Verfahren einschließlich der Inter-Teilbild-Vorhersage,
der Bewegungskompensation, der diskreten Cosinus-Transformation
und der Quantisierung. Der Videomultiplexcodierer 7 komprimiert
die Ausgabe des Quellcodierers 5 durch Zickzack-Lauflängen-Codierung
und Codierung mit variabler Länge
weiter und fügt
Anfangsblockinformationen, Startcodes und weitere Zusatzinformationen
hinzu. Der Sendepuffer 9 speichert die Ausgabe des Videomultiplexcodierers 7 vor
dem Senden. Der Sendecodierer 11 rahmt die Daten in dem
Puffer 9 zum Senden über
einen Kommunikationskanal, fügt
Fehlerkorrekturcodes hinzu, fügt
bei Bedarf Leerdaten hinzu und gibt den codierten Bitstrom aus.
Die Steuereinheit 13 beobachtet die Datenmenge in dem Sendepuffer 9 und
steuert den Quellcodierer 5 und den Videomultiplexcodierer 7 in
der Weise, dass ein Pufferüberlauf
verhindert wird. Der Quelldecodierer 15, der Videomultiplexdecodierer 17 und
der Empfangsdecodierer 21 führen in dieser Reihenfolge
die umgekehrte Verarbeitung des Quellcodierers 5, des Videomultiplexcodierers 7 und
des Sendecodierers 11 aus.
-
Anhand
von 2 hat das durch den Videocodierer 1 in 1 empfangene
Videosignal entweder das Standard-Common Intermediate Format (Standard-CIF)
oder das Quarter Common Intermediate Format (QCIF). Beide Formate
nutzen eine Hierarchie mit vier Schichten: einer Bildschicht 23,
einer Gruppe-von-Blöcken-Schicht 25,
einer Makroblockschicht 27 und eine Blockschicht 29.
Ein CIF-Bild hat zwölf
Gruppen von Blöcken,
während
ein QCIF-Bild nur drei hat.
-
Jede
Gruppe von Blöcken 25 ist
eine rechteckige Anordnung von Makroblöcken, die durch die Makroblockadressen
von eins bis dreiunddreißig
nummeriert sind. Jeder Makroblock 27 umfasst vier Farbdichteblöcke (die
Blöcke
eins bis vier) und zwei Farbwertblöcke (die Blöcke fünf und sechs). Die zwei Farbwertblöcke umfassen
jeweils den gleichen Bildbereich wie die vier Farbdichteblöcke zusammen.
Ein Block 29 ist eine Acht-Mal-Acht-Anordnung von Farbdichte-
oder Farbwertblöcken,
die einem quadratischen Bildbereich mit vierundsechzig Farbdichte- oder Farbwert-Bildelementen
entspricht. Die Nummerierung in 2 gibt die
Sequenzen der Gruppen von Blöcken 25,
Makroblöcken 27 und
Blöcken 29 in
dem codierten Datenstrom an. Die Blöcke 29 und die Makroblöcke 27 ohne
Daten können
weggelassen sein.
-
3 zeigt
die Struktur eines Blocks 30 von Farbdichte- oder Farbwertdaten
nach Ausführung
der diskreten Cosinus-Transformation in dem Quellcodierer 5.
Die vierundsechzig Datenwerte sind Transformationskoeffizienten,
die von links nach rechts eine zunehmende horizontale räumliche
Frequenz repräsentieren
und die von oben nach unten eine zunehmende vertikale räumliche
Frequenz repräsentieren.
Der erste Transformationskoeffizient oder Gleichstromkoeffizient
(der in der Zeichnung mit eins nummeriert ist) repräsentiert
den durchschnittlichen Signalpegel in dem Block. Die Transformationskoeffizienten
sind in der durch die Nummerierung in 3 angegebenen
Zickzackreihenfolge codiert, so dass Koeffizienten niedrigerer Frequenz
zuerst codiert werden. Wegen Vorhersage und Quantisierung sind die
meisten Koeffizienten normalerweise null, so dass der Codierer die
Länge jeder
Folge von Nullen und den Wert des folgenden von null verschiedenen
Koeffizienten codiert.
-
4 zeigt
die allgemeine Struktur des durch den H.261-Videomultiplexcodierer 7 ausgegebenen
Datenstroms. Die Bitlängen
von Datenelementen mit fester Länge sind
durch Zahlen über
den Datenelementen angegeben. 5 zeigt
die Codierungssyntax, wobei Datenelemente mit fester Länge in Feldern
mit rechtwinkligen Ecken eingeschlossen sind, während Datenelemente mit variabler
Länge in
Feldern mit abgerundeten Ecken eingeschlossen sind. Tabelle 1 führt die
in diesen Figuren verwendeten Abkürzungen auf.
-
-
Die
Bild- und GOB-Startcodes PSC und GBSC sind die folgenden Bitzeichenfolgen,
die durch den Videomultiplexdecodierer 17 eindeutig erkannt
werden können.
Der Begriff 'Startcode' bezieht sich im
Folgenden auf einen dieser Startcodes.
- PSC: 0000 0000 0000
0001 0000
- GBSC: 0000 0000 0000 0001
-
MTYPE
ist ein Datenelement mit variabler Länge, das angibt, ob ein Makroblock
durch den Quellcodierer 5 in der Intra- oder Inter-Betriebsart
codiert wurde. In der Intra-Betriebsart werden die tatsächlichen Farbdichte-
und Farbwert-Werte codiert. In der Inter-Betriebsart werden diese
Werte vorhergesagt, woraufhin der Vorhersagefehler codiert wird.
Außerdem
gibt MTYPE für
die Inter-Betriebsart an, ob in dem Vorhersageprozess eine Bewegungskompensation
und ein Schleifenfilter angewendet wurden.
-
Beschreibungen
der weiteren Datenelemente in den 4 und 5 werden
weggelassen; Einzelheiten sind in der ITU-T-Empfehlung H.261 zu
finden.
-
6 zeigt
einen Teil der Codierungstabellen mit variabler Länge für die Datenelemente
MBA, MTYPE, MVD, CBP und TCOEFF. Für jedes dieser Datenelemente
wird eine andere Codierungsregel mit variabler Länge verwendet. In der MTYPE-Codierungstabelle
gibt '+Q' einen Makroblock
mit einer neuen Quantisierungsschrittweite an, die durch das MQUANT-Datenelement
spezifiziert ist.
-
Anhand
der 7 bis 11 wird nun eine erste Ausführungsform
der Erfindung beschrieben. Es wird die gleiche allgemeine Codec-Struktur
und hierarchische Datenstruktur angenommen, wie sie in den 1 bis 6 gezeigt
ist. Die hierarchischen Schichten werden durch die gleichen Bezugszeichen
wie in 2 identifiziert.
-
7 zeigt
einen Bewegtbilddecodierer gemäß der ersten
Ausführungsform.
Dieser Decodierer führt die
Funktionen des Quelldecodierers 15 und des Videomultiplexdecodierers 17 in 1 aus.
Der Decodierer umfasst eine Decodierungseinheit 31, die
komprimierte Daten, die dem Empfangspuffer 19 in 1 entnommen
werden, decodiert und die decodierten Daten ausgibt; einen Referenzbildspeicher 33,
der decodierte Bilddaten für
ein vorhergehendes Teilbild, die für die Decodierung in der Inter-Betriebsart
verwendet werden, speichert; einen Momentanbildspeicher 35,
der ein Arbeitsbereich für
die Speicherung des Teilbilds, das momentan decodiert wird, ist;
einen Betriebsartspeicher 37, der Informationen speichert,
die die Decodierungsbetriebsart (Intra- oder Inter-) jedes Makroblocks
in dem momentanen Teilbild angeben; und eine Verwerfeinheit 39,
die entscheidet, welche decodierten Daten verworfen werden sollen,
wenn ein Fehler auftritt.
-
Wenn
das Teilbild, auf das in der Inter-Betriebsart-Decodierung Bezug
genommen wird, das unmittelbar voran gehende Teilbild ist, können der
Referenzbildspeicher 33 und der Momentanbildspeicher 35 die
Rollen tauschen. Nachdem die Decodierung des momentanen Teilbilds
abgeschlossen worden ist, wird der Momentanbildspeicher, in dem
die decodierten Daten des momentanen Teilbilds gespeichert sind,
zu dem Referenzbildspeicher für
die Decodierung des nächsten
Teilbilds, während
der Referenzbildspeicher, dessen Daten in ihm nicht mehr benötigt werden,
zu dem Momentanbildspeicher für
die Decodierung des nächsten
Teilbilds wird.
-
Nachfolgend
wird der Betrieb der ersten Ausführungsform
beschrieben.
-
Der
durch die Decodierungseinheit 31 ausgeführte Decodierungsprozess arbeitet
von einem Synchronisationspunkt zum nächsten. Ein Synchronisationspunkt
ist ein Punkt, bei dem ein Startcode (PSC oder GBSC) erfasst wird.
Eine Gruppe von Blöcken
(GOB) wird in einer einzigen Verarbeitungseinheit decodiert. Während jeder
Makroblock in der Gruppe von Blöcken
decodiert wird, werden die decodierten Daten in dem Momentanbildspeicher 35 angeordnet,
während
Informationen, die angeben, ob der Makroblock in der Intra-Betriebsart
oder in der Inter-Betriebsart decodiert wurde, in dem Betriebsartspeicher 37 angeordnet
werden.
-
Die
Decodierungseinheit 31 arbeitet durch Demultiplexieren
des ankommenden Stroms komprimierter, codierter Daten gemäß den in 5 veranschaulichten
Syntaxregeln, Erkennen von Startcodes, Decodieren der codierten
Daten mit fester Länge
in jedem Bildanfangsblock (PHEAD) und GOB-Anfangsblock (GHEAD) und
Decodieren der codierten Daten mit variabler Länge in der Makroblockschicht
und in der Blockschicht in Übereinstimmung
mit den in 6 teilweise veranschaulichten
Codierungsregeln.
-
Während der
Decodierung der Daten mit variabler Länge kann die Decodierungseinheit 31 eine
Zeichenfolge von Bits feststellen, die nicht zu irgendeinem der
erwarteten Codewörter
passt und somit nicht decodiert werden kann. Daraufhin erkennt die
Decodierungseinheit 31 einen Fehler. Nach Erkennen des
Fehlers hält
die Decodierungseinheit 31 die Decodierung an und sucht
in dem ankommenden Strom codierter Daten nach dem nächsten Startcode.
Die Decodierung wird erst wieder aufgenommen, wenn der nächste Startcode erkannt
wird, normalerweise am Ende der momentanen Gruppe von Blöcken.
-
Wenn
die Decodierungseinheit 31 den nächsten Startcode nach einem
Fehler erkennt, spezifiziert die Verwerfeinheit 39 zwei
Bereiche decodierter Makroblockdaten, die sich bis zu dem Punkt
erstrecken, an dem der Fehler erkannt wurde. Der erste Bereich ist
ein Verwerfbereich für
Makroblöcke,
die in der Intra-Betriebsart codiert wurden (im Folgenden Intra-Makroblöcke). Der
zweite Bereich ist ein Verwerfbereich für Makroblöcke, die in der Inter-Betriebsart
codiert wurden (im Folgenden Inter-Makroblöcke).
-
Die
Decodierungseinheit 31 verwirft decodierte Intra-Makroblöcke in dem
ersten Bereich und decodierte Inter-Makroblöcke in dem zweiten Bereich,
indem sie diese Makroblöcke
aus dem momentanen Bildspeicher 35 löscht. Diese verworfenen Makroblöcke werden
durch die entsprechenden Makroblöcke
aus dem Referenzbildspeicher 33 ersetzt. Außerdem kopiert
die Decodierungseinheit 31 Makroblöcke aus dem Referenzbildspeicher 33,
um decodierte Daten zu erzeugen, damit sie die Stelle der nicht
decodierten Daten von dem Punkt an, an dem der Fehler erkannt wurde,
bis zum nächsten
Synchronisationspunkt einnehmen.
-
8 zeigt
ein Beispiel eines codierten Datenstroms mit einem Fehler, um den
ersten und den zweiten Bereich zu veranschaulichen. Der Fehler,
z. B. ein Übertragungskanalfehler,
tritt bei einem Punkt X auf. Wie es fast immer der Fall ist, wird
der Fehler nicht sofort erkannt. Die Erkennung findet bei einem
späteren
Punkt Y statt, normalerweise dem Punkt, bei dem der Fehler erstmals
ein unzulässiges
Codewort erzeugt. Die Decodierungseinheit 31 stellt die
Decodierung vom Punkt Y bis zu dem nächsten Startcode (SC) ein.
Somit umfasst die Einheit codierter Daten zwischen den zwei Startcodes
ein richtig decodiertes Segment 41, ein falsch decodiertes
Segment 43 und ein nicht decodiertes Segment 45.
-
Der
erste durch die Verwerfeinheit 39 spezifizierte Bereich 47 erstreckt
sich von dem Punkt Y, bei dem der Fehler erkannt wurde, zurück zu einem
ersten Punkt Z1. Der zweite Bereich 49 erstreckt
sich über
eine kürzere
Strecke vom Punkt Y zurück
zu einem zweiten Punkt Z2. In dem vorliegenden
Beispiel ist der Punkt Z1 vor dem Punkt
X des Fehlers angeordnet, während
der Punkt Z2 nach dem Punkt X angeordnet
ist. Folglich werden alle falsch decodierten Intra-Makroblöcke und
möglicherweise
einige richtig decodierte Intra-Makroblöcke verworfen, während einige
falsch decodierte Inter-Makroblöcke
beibehalten werden können.
-
Die 9 und 10 veranschaulichen
den Grund für
diese Verwerfstrategie. 9 zeigt ein decodiertes Bild,
das fehlerfrei ist. 10 zeigt das Gleiche decodierte
Bild, wenn in einem Intra-Makroblock 51 und in einem Inter-Makroblock 53 typische
Fehler vorhanden sind. In dem falsch decodierten Intra-Makroblock 51 ist
das Bild vollständig
zerstört.
Dagegen ist das Bild in dem falsch decodierten Inter-Makroblock 53 nur
leicht beschädigt,
da die codierten Daten in einem Inter-Makroblock an den von dem Referenzmakroblock
in dem vorhergehenden Teilbild vorhergesagten Daten lediglich verhältnismäßig kleine Änderungen
vornehmen. Der beschädigte
Inter-Makroblock 53 sieht wie ein normaler Makroblock mit
einer kleinen Menge überlagertem Rauschen
aus.
-
Die
Verwerfeinheit 39 setzt einen ersten Bereich 47,
der sich von dem Punkt der Fehlererkennung ausreichend weit zurück erstreckt,
um alle falsch decodierten Intra-Makroblöcke mit wesentlicher Wahrscheinlichkeit
zu erfassen, und setzt einen zweiten Bereich 49, der ausreichend
kurz ist, damit nur decodierte Inter-Makroblöcke mit ausreichend hoher Wahrscheinlichkeit,
falsch zu sein, verworfen werden. Da der erste Bereich verhältnismäßig lang
ist, können
einige richtig decodierte Intra-Makroblöcke unnötig ersetzt werden, wobei aber
der Betrag der durch diese unnötigen
Ersetzungen verursachten Bildverschlechterung klein ist, da Intra-Makroblöcke verhältnismäßig selten
auftreten. Da der zweite Bereich verhältnismäßig kurz ist, können einige
falsch decodierte Inter-Makroblöcke
durchgelassen werden, wobei dies aber ebenfalls nur eine leichte
Bildverschlechterung verursacht. Wie in 10 festgestellt
ist, sind die meisten decodierten Daten in einem Inter-Makroblock
eher aus dem Referenzbild als aus dem codierten Makroblock selbst
abgeleitet.
-
Geeignete
Regeln für
das Setzen des ersten und des zweiten Bereichs können aus einer Simulation abgeleitet
werden. Die Regeln können
die Werte der decodierten Daten berücksichtigen. Zum Beispiel können Inter-Makroblöcke mit
großen
Datenwerten mit größerem Argwohn
als Inter-Makroblöcke
mit kleinen Datenwerten betrachtet werden.
-
Nachfolgend
wird anhand des Ablaufplans in 11 die
Decodierung einer Gruppe von Blöcken
beschrieben.
-
Die
Decodierungseinheit 31 decodiert in Schritt S101 einen
Makroblock und entscheidet in Schritt S102, ob der Makroblock einen
erkennbaren Fehler enthielt. Wenn nicht, werden die decodierten
Makroblockdaten in Schritt S103 in dem Momentanbildspeicher 35 gespeichert
und wird in Schritt S104 die Codierungsbetriebsart (Intra- oder
Inter-) des Makroblocks in dem Betriebsartspeicher 37 aufgezeichnet.
Daraufhin entscheidet die Decodierungseinheit 31 in Schritt
S105, ob der decodierte Makroblock der letzte Makroblock in der
Gruppe von Blöcken
war, wobei die Decodierung der Gruppe von Blöcken in diesem Fall endet,
oder ob er es nicht war, wobei der Decodierungsprozess in diesem
Fall zu Schritt S101 zurückkehrt,
um den nächsten Makroblock
zu decodieren.
-
Wenn
in Schritt S102 ein Fehler erkannt wird, stellt die Decodierungseinheit 31 die Decodierung
in Schritt S106 ein und geht dazu über, den nächsten Startcode in dem codierten
Datenstrom zu ermitteln. Daraufhin setzt die Verwerfeinheit 39 in
Schritt S107 wie oben beschrieben den ersten und den zweiten Bereich. In
Schritt S108 verwirft die Decodierungseinheit 31 decodierte
Intra-Makroblöcke
in dem ersten Bereich und verwirft sie decodierte Inter-Makroblöcke in dem
zweiten Bereich. In Schritt S109 ersetzt die Decodierungseinheit 31 die
Makroblöcke,
die nicht decodiert wurden (Schritt S106) oder die decodiert und
verworfen wurden (Schritt S108), durch die entsprechenden Makroblöcke aus
dem Referenzbildspeicher 33.
-
Dadurch,
dass die erste Ausführungsform
dieser Prozedur folgt, verringert sie die Wahrscheinlichkeit eines
schweren Bildschadens, der durch falsch decodierte Intra-Makroblöcke verursacht
wird, auf ein vernachlässigbares
Niveau und verhindert sie die Verwendung von Inter-Makroblöcken, die
eine hohe Wahrscheinlichkeit besitzen, falsch decodiert worden zu
sein, ohne übermäßig richtig
codierte Daten zu opfern.
-
Nachfolgend
wird eine zweite Ausführungsform
beschrieben. Die zweite Ausführungsform
nimmt die Verwendung eines selbst resynchronisierenden Codes mit
variabler Länge
an. Die Codierungsregeln können sich
von den in den 4, 5 und 6 gezeigten
unterscheiden. Die Verwendung der in 2 veranschaulichten
hierarchischen Schichtstruktur wird weiter angenommen, obgleich
dies keine Einschränkung
ist.
-
Wenn
anhand von 12 bei einem Punkt Y in einer
Gruppe von Blöcken
ein Fehler erkannt wird, ermöglichen
die Eigenschaften des Codes mit variabler Länge, dass die Synchronisation
mit den Grenzen der Codewörter
mit variabler Länge
bei einem Punkt V vor dem nächsten
Startcode wieder hergestellt wird. An diesem Punkt V kann die Decodierung
wieder aufgenommen werden; nur das schraffierte Segment zwischen
den Punkten Y und V ist nicht decodierbar.
-
Üblicherweise
wird die Synchronisation richtig wieder hergestellt, jedoch nicht
immer; gelegentlich tritt eine falsche Resynchronisation auf. Üblicherweise
wird eine falsche Resynchronisation wegen des Auftretens eines neuen
Fehlers schnell erkannt, wobei es aber außerdem möglich ist, dass eine falsche
Resynchronisation zufällig
einige zulässige
Codewörter
erzeugt und daraufhin durch einen weiteren Zufall in eine richtige
Synchronisation gleitet, bevor irgendein neuer Feh ler erkannt wird.
-
Außerdem kann
die Synchronisation vor dem Punkt Y tatsächlich verloren gegangen sein.
Dementsprechend kann die wahre Situation wie in 13 gezeigt
sein, in der ein Fehler beim Punkt X auftritt, bis zum Punkt Y aber
nicht erkannt wird, und die Synchronisation am Punkt V falsch wiederhergestellt
wird, woraufhin sie beim Punkt W ohne die Erkennung eines neuen
Fehlers richtig wiederhergestellt wird. Eine Gruppe von Blöcken wird
durch diese Punkte in fünf
Segmente geteilt: ein richtig decodiertes Segment 55, ein
falsch decodiertes Segment 57, ein nicht decodiertes Segment 59,
ein weiteres falsch decodiertes Segment 61 und ein weiteres
richtig decodiertes Segment 63.
-
14 zeigt
einen Blockschaltplan eines Bewegtbilddecodierers gemäß der zweiten
Ausführungsform,
der für äquivalente
Teile die gleichen Bezugszeichen wie in 7 verwendet.
Der Referenzbildspeicher 33, der Momentanbildspeicher 35 und
der Betriebsartspeicher 37 sind gleich den entsprechenden
Elementen in der ersten Ausführungsform.
Die Decodierungseinheit 31 und die Verwerfeinheit 39 sind
bei Unterschieden im Betrieb, die unten erläutert werden, allgemein ähnlich den
entsprechenden Elementen in der ersten Ausführungsform. Die Resynchronisationseinheit 65 überwacht
den Betrieb des Decodiertes, wenn ein Fehler erkannt wird.
-
15 veranschaulicht
den Betrieb der Verwerfeinheit 39 in der zweiten Ausführungsform.
Die Punkte V, W, X und Y trennen die codierte Gruppe von Blöcken wie
in 13 in fünf
Segmente 55, 57, 59, 61 und 63. Wie
in der ersten Ausführungsform
setzt die Verwerfeinheit 39, wenn beim Punkt Y ein Fehler
erkannt worden ist und der nächste
Startcode festgestellt worden ist, einen ersten Bereich 67,
der sich vom Punkt Y bis zum Punkt Z1 rückwärts erstreckt,
und einen zweiten Bereich 69, der sich vom Punkt Y bis
zum Punkt Z2 rückwärts erstreckt. Außerdem setzt
die Verwerfeinheit 39 einen dritten Bereich 71 und
einen vierten Bereich 73, die sich von dem Resynchronisationspunkt
V bis zu den Punkten Z3 bzw. Z4 vorwärts erstrecken.
-
Natürlich werden
alle Daten in dem nicht decodierbaren Segment 59 verworfen.
Außerdem
werden decodierte Intra-Makroblöcke
in dem ersten Bereich 67 und in dem vierten Bereich 73 verworfen
und werden decodierte Inter-Makroblöcke in dem zweiten Bereich 69 und
dem dritten Bereich 71 verworfen. Der dritte Bereich 71 wird
aus dem gleichen Grund kleiner als der vierte Bereich 73 gemacht,
aus dem der zweite Bereich 69 kleiner als der erste Bereich 67 gemacht
wird.
-
Obgleich 15 schematisch
den ersten und den vierten Bereich 67 und 73 in
der Weise zeigt, dass sie die gleiche Länge haben, ist der vierte Bereich 73 vorzugsweise
kürzer
als der erste Bereich 67, da das Intervall 61 nicht
erkannter Fehler nach dem Punkt V normalerweise nicht vorhanden
ist. Aus dem gleichen Grund ist der dritte Bereich 71 vorzugsweise
kürzer
als der zweite Bereich 69. Wie in der ersten Ausführungsform
können
Regeln für
das Setzen der Bereiche aus einer Simulation abgeleitet werden,
wobei die Regeln die Werte der decodierten Daten berücksichtigen
können.
-
Nachfolgend
wird anhand des Ablaufplans in den 16 und 17 der
Betrieb der zweiten Ausführungsform
beschrieben.
-
Die
Schritte S201 bis S205 in 16 sind
gleich den entsprechenden Schritten S101 bis S105 in 11.
Solange kein Fehler erkannt wird, decodiert die Decodierungseinheit 31 Makroblöcke einzeln
(Schritt S201), ordnet die decodierten Daten in dem Momentanbildspeicher 35 an
(Schritt S203) und zeichnet die Betriebsart jedes Makroblocks in
dem Betriebsartspeicher 37 auf (Schritt S204).
-
Wenn
in Schritt S202 ein Fehler erkannt wird, verzweigt die Verarbeitung
zu 17. Die Decodierungseinheit 31 versucht
unter der Überwachung
der Resynchronisationseinheit 65, die Daten weiter zu decodieren,
wobei sie bitweise fortschreitet, bis ein zulässiges Codewort erkannt wird
und die Synchronisation wieder hergestellt wird (Schritt S206).
Daraufhin weist die Resynchronisationseinheit 65 die Decodierungseinheit 31 an,
in die Schleife einzutreten, die die Schritte S207 bis S211 umfasst,
die im Wesentlichen gleich den Schritten S101 bis S105 in 11 sind.
Solange kein neuer Fehler erkannt wird, decodiert die Decodierungseinheit 31 erneut
Makroblöcke
einzeln (Schritt S207), ordnet die decodierten Daten in dem Momentanbildspeicher 35 an
(Schritt S209) und zeichnet die Betriebsart jedes Makroblocks in
dem Betriebsartspeicher 37 auf (Schritt S210).
-
Falls
in Schritt S208 ein neuer Fehler erkannt wird, weist die Decodierungseinheit 31 die
Resynchronisationseinheit 65 in Schritt S215 an, alle Makroblöcke, die
Daten von dem Punkt, bei dem die Synchronisation wiederhergestellt
wurde, bis zu dem Punkt des neuen Fehlers enthalten, zu verwerten.
Dieser Schritt wird teil weise genommen, um vor einer falschen Resynchronisation
zu schützen.
Außerdem
können
je nach dem Weg, auf dem die Makroblöcke codiert werden, dann, wenn
in derselben Gruppe von Blöcken
zwei Fehler erkannt werden, alle Makroblockdaten zwischen den zwei
Fehlern selbst dann unbenutzbar sein, wenn einige der Daten richtig
decodiert werden können.
Diese Situation kann z. B. wegen der differenziellen Codierung von Makroblockadressen
auftreten.
-
Nach
Schritt S215 erfolgt eine Rückkehr
zu Schritt S206, wobei der Resynchronisationsprozess wiederholt
wird.
-
Wenn
in Schritt S211 das Ende der Gruppe von Blöcken erkannt wird, setzt die
Verwerfeinheit 39 in Schritt S212 den ersten, den zweiten,
den dritten und den vierten Bereich. In Schritt S213 verwirft die
Decodierungseinheit 31 decodierte Intra-Makroblöcke aus
dem ersten Bereich und aus dem vierten Bereich und verwirft sie
decodierte Inter-Makroblöcke
aus dem zweiten Bereich und aus dem dritten Bereich. In Schritt
S214 werden diese verworfenen Makroblöcke in dem Momentanbildspeicher 35 durch
die entsprechenden Makroblöcke
aus dem Referenzbildspeicher 33 ersetzt. Andere Makroblöcke, die
in Schritt S215 verworfen wurden oder nicht decodiert werden konnten,
da die Synchronisation verloren gegangen ist, werden ähnlich ersetzt.
-
Daraufhin
kehrt der Decodierungsprozess zum unteren Ende von 16 zurück und endet.
-
Je
nach dem Weg, auf dem die Makroblöcke codiert werden, können weitere
Decodierungsschritte wie etwa ein Schritt zum Wiedergewinnen differenziell
decodierter Makroblockadressen durch Rückwärtsarbeiten am Ende der Gruppe
von Blöcken
notwendig sein. Diese weiteren Schritte sind weggelassen worden,
um zu vermeiden, dass die Erfindung durch unbedeutende Einzelheiten
verdeckt wird.
-
Die
zweite Ausführungsform
erweitert die Wirkungen der ersten Ausführungsform, um sowohl das Intervall,
bevor der erste Fehler in einer Gruppe von Blöcken erkannt wird, als auch
das Intervall nach der letzten Resynchronisation, nach dem letzten
erkannten Fehler in der Gruppe von Blöcken, zu erfassen. Das Verwerfen
aller Intra-Makroblöcke
aus dem ersten und aus dem vierten Bereich verringert die Wahrscheinlichkeit
der Verwendung eines falsch decodierten Intra-Makroblocks auf ein
vernachlässigbares
Niveau. Das Verwerfen aller Inter-Makroblöcke aus dem zweiten und aus
dem dritten Bereich vermeidet die Verwendung der decodierten Inter-Makroblöcke, die
am wahrscheinlichsten falsch decodiert worden sind, ohne zu viele
richtig decodierte Inter-Makroblöcke
zu verwerfen.
-
Beim
Setzen des ersten, des zweiten, des dritten und des vierten Bereichs
in den voran gehenden Ausführungsformen
kann die Verwerfeinheit 39 die Entfernung von den Punkten
X und V auf verschiedene Weise spezifizieren. In der folgenden dritten
und vierten Ausführungsform
werden Beispiele gegeben. Die dritte Ausführungsform ist anwendbar, wenn
jeder Makroblock einen einzigen, zusammenhängenden Abschnitt in dem Strom
codierter Daten belegt, wie es z. B. die Codierungssyntax in 5 besagt.
Die vierte Ausführungsform
ist anwendbar, wenn ein Makroblock zwei oder mehr nicht zusammenhängende Abschnitte
in dem Strom codierter Daten belegen kann.
-
18 zeigt
die relevanten Teile eines Bewegtbilddecodierers gemäß der dritten
Ausführungsform. Die
Decodierungseinheit 31 und die Verwerfeinheit 39 sind ähnlich den
entsprechenden Elementen in der ersten oder zweiten Ausführungsform.
Der Codesequenzspeicher 75 speichert Informationen, die
die Sequenz spezifizieren, in der Makroblöcke in dem codierten Datenstrom
erscheinen. Diese Sequenz ist z. B. die Sequenz, in der die Makroblöcke über einen
Kommunikationskanal übertragen
wurden.
-
Weitere
in der ersten oder zweiten Ausführungsform
vorhandene Elemente sind in der dritten Ausführungsform ebenfalls vorhanden,
sind aber weggelassen worden, um die Zeichnung zu vereinfachen.
-
19 veranschaulicht
einen Strom codierter Daten in der dritten Ausführungsform, der die Makroblöcke A, B,
C und D in der in dem Codesequenzspeicher 75 spezifizierten
Reihenfolge zeigt. Jeder Makroblock ist in einem einzigen Abschnitt
codierter Daten codiert. Die Decodierungseinheit 31 erkennt
beim Punkt Y im Makroblock D einen Fehler, der diesen Makroblock
nicht decodierbar macht.
-
Die
Verwerfeinheit 39 spezifiziert, dass sich der erste Bereich 47 von
dem ersten nicht decodierbaren Makroblock D drei Makroblöcke rückwärts erstreckt.
Mit anderen Worten, der Bereich, in dem Intra-Makroblöcke verworfen
werden, erfasst die Makroblöcke
A, B und C. Der zweite Bereich 49 erstreckt sich von dem
ersten nicht decodierbaren Makroblock D nur einen Makroblock rückwärts, so
dass der Bereich, in dem Inter-Makroblöcke verworfen werden, nur den
Makroblock C enthält.
Die durch die Verwerfeinheit 39 an die Decodierungseinheit 31 gegebenen
Anweisungen sind z. B., den Block C unbedingt zu verwerten und die
Blöcke
B und A zu verwerten, falls sie Intra-Makroblöcke sind.
-
Wenn
ein selbst resynchronisierender Code genutzt wird, setzt die Verwerfeinheit 39 den
dritten und den vierten Bereich ähnlich,
wobei sie z. B. die Decodierungseinheit 31 anweist, eine
erste Anzahl vollständiger
Makroblöcke
nach dem Resynchronisationspunkt unbedingt zu verwerten und Intra-Makroblöcke, die
unter einer zweiten Anzahl vollständiger Makroblöcke nach
dem Resynchronisationspunkt auftreten, zu verwerfen. Die erste Zahl
kann null sein.
-
Die
dritte Ausführungsform
arbeitet wie in den Ablaufplänen
für die
erste oder zweite Ausführungsform beschrieben
unter Hinzufügung
eines Schritts des Speicherns der Sequenz, in der Makroblöcke in dem
codierten Datenstrom in dem Codesequenzspeicher 75 erscheinen.
Dieser Schritt kann z. B. nach dem Schritt S104 in 11 oder
nach dem Schritt S204 in 16 oder
nach dem Schritt S210 in 17 eingefügt werden.
Beim Setzen der Bereiche in den Schritten S107 und 212 nimmt die
Verwerfeinheit 39 auf die in dem Codesequenzspeicher 75 gespeicherten
Sequenzinformationen Bezug.
-
Die
dritte Ausführungsform
hat den Vorteil, dass die Verwrefeinheit 39 der Decodierungseinheit 31 einfache
Anweisungen erteilen kann, die die Decodierungseinheit 31 leicht
ausführen
kann. Die Decodierungseinheit 31 und die Verwerfeinheit 39 brauchen
die genauen Orte der Punkte Z1, Z2, Z3 und Z4 in dem codierten Datenstrom nicht zu kennen;
sie brauchen lediglich die in dem Momentanbildspeicher 35 gespeicherten
decodierten Makroblöcke
in der in dem Codesequenzspeicher 75 gegebenen Reihenfolge
zu zählen.
-
Falls
die Makroblöcke
in dem codierten Datenstrom immer in der gleichen vorgegebenen Sequenz
erscheinen, kann der Codesequenzspeicher 75 weggelassen
werden.
-
20 zeigt
die relevanten Teile eines Bilddecodierers gemäß der vierten Ausführungsform.
Die Decodierungseinheit 31 und die Verwerfeinheit 39 sind
wieder ähnlich
den entsprechenden Elementen in der ersten oder zweiten Ausführungsform.
Der Codepositionsspeicher 77 speichert Informationen, die
die relativen Positionen von Abschnitten codierter Daten spezifizieren,
die zu jedem Makroblock in dem empfangenen Strom codierter Bildinformationen
gehören.
Weitere Elemente, die in der ersten oder zweiten Ausführungsform vorhanden
sind, sind in der vierten Ausführungsform
ebenfalls vorhanden, zur Vereinfachung der Zeichnung aber weggelassen
worden.
-
21 veranschaulicht
einen Teil eines Stroms codierter Daten in der vierten Ausführungsform.
Die codierten Daten für
jeden Makroblock erscheinen in zwei getrennten Abschnitten, wobei
Abschnitte, die zu verschiedenen Makroblöcken gehören, wie gezeigt verschachtelt
sind. Beim Punkt Y in Abschnitt C(1) des Makroblocks C wird ein
Fehler erkannt.
-
Die
Verwerfeinheit 39 setzt einen ersten Bereich, der sich
eine bestimmte Anzahl von Codewörtern
vor dem Punkt Y bis zu einem Punkt Z1 rückwärts erstreckt,
und setzt einen zweiten Bereich, der sich eine kleinere Anzahl von
Codewörtern
vom Punkt Y bis zu einem Punkt Z2 rückwärts erstreckt.
Die Verwerfeinheit 39 weist die Decodierungseinheit 31 mit
Bezug auf die in dem Codepositionsspeicher 77 gespeicherten
Informationen an, Intra-Makroblöcke,
die irgendwelche codierten Daten enthalten, die zwischen dem Punkt
Z1 und dem Punkt Y angeordnet sind, zu verwerfen
und alle Makroblöcke,
die irgendwelche codierten Daten enthalten, die zwischen dem Punkt
Z2 und dem Punkt Y angeordnet sind, zu verwerfen.
In 21 wird der Makroblock A verworfen, falls er ein
Intra-Makroblock ist, während
der Makroblock B unbedingt verworfen wird.
-
Wenn
ein selbst resynchronisierender Code genutzt wird, entscheidet die
Verwerfeinheit 39 auf ähnliche
Weise, welche Makroblöcke
nach dem Resynchronisationspunkt unbedingt verworfen werden sollten
und welche Makroblöcke
verworfen sollten, falls sie Intra-Makroblöcke sind.
-
Die
vierte Ausführungsform
arbeitet wie in den Ablaufplänen
für die
erste oder zweite Ausführungsform beschrieben
unter Hinzufügung
eines Schritts des vorübergehenden
Speicherns von Abschnitten von Makroblockdaten, bis ein gesamter
Makroblock empfangen worden ist, und eines Schritts des Speicherns
von relativen Positionsinformationen für die einzelnen Makroblockabschnitte
in dem Codepositionsspeicher 77. Diese Schritte können z.
B. vor Schritt S101 in 11 oder vor Schritt S201 in 16 und
vor Schritt S207 in 17 eingefügt werden. In den Schritten
S107 und S212 nimmt die Verwerfeinheit 39 auf die in dem Codepositionsspeicher 77 gespeicherten
Informationen Bezug. Der Codepositionsspeicher 77 kann
außerdem
als ein temporärer
Speicher für
Makroblockdaten verwendet werden, die auf die Decodierung warten.
-
Die
vierte Ausführungsform
hat wie die dritte Ausführungsform
den Vorteil, dass die Verwerfeinheit 39 der Decodierungseinheit 31 einfache
Anweisungen erteilen kann, die die Decodierungseinheit 31 leicht
ausführen
kann.
-
Obgleich
die vorstehenden Ausführungsformen
in Bezug auf die in 2 gezeigte Schichtstruktur von Makroblöcken und
Gruppen von Blöcken
beschrieben worden sind, ist die Erfindung nicht auf diese besondere Struktur
beschränkt.
Die vorstehenden Ausführungsformen
können
mit irgendeinem Codierungsschema genutzt werden, das ein Bild auf
irgendeine Weise in getrennte Bereiche teilt und auf bereichsweiser
Grundlage zwischen den Intra- und Inter-Codierungsbetriebsarten
auswählt.
-
Der
codierte Datenstrom braucht keine eingebetteten Startcodes zu enthalten.
Die Synchronisation kann mit anderen Einrichtungen, einschließlich Einrichtungen
in einer tieferen Schicht als der Schicht der codierten Daten, hergestellt
werden.
-
Die
Erfassung von Fehlern ist nicht auf die Erfassung unzulässiger Codewörter beschränkt. Zum
Beispiel können
auch Syntaxfehler erfasst werden und Paritätsbits oder andere Fehlererfassungscodes
genutzt werden.
-
Die
vorstehenden Ausführungsformen
sind nur eine Veranschaulichung des erfindungsgemäßen Konzepts
des Verwerfens decodierter Bilddaten, die Daten, die durch einen
Fehler unbenutzbar gemacht wurden, vorhergehen oder nachfolgen.
Dieses Konzept kann unabhängig
von der Anzahl oder von den Typen verschiedener Codierungs- und
Decodierungsbetriebsarten angewendet werden. Zum Beispiel kann die
Erfindung verwirklicht werden, wenn alle Bilddaten in der Intra-Betriebsart
codiert sind. Außerdem
kann die Erfindung mit mehr als zwei verschiedenen Betriebsarten
verwirklicht werden, wobei für
das Verwerten von in jeder Betriebsart decodierten Daten ein anderer
Bereich gesetzt wird.
-
Die
Erfindung kann in Hardware, in Software oder in einer Kombination
davon verwirklicht werden.
-
Der
Fachmann auf dem Gebiet erkennt, dass weitere Änderungen vorgenommen werden
können.