-
HINTERGRUND DER ERFINDUNG
-
1. Feld der Erfindung
-
Die
Erfindung ist auf ein Organisieren bzw. Zuordnen von Bilddaten in
Regionen, die ähnliche Farbcharakteristiken
haben, gerichtet.
-
2. Verwandter Stand der Technik
-
Auf
hohen Auflösungen
gescannte Dokumente erfordern typischerweise große Mengen von Speicherplatz.
Darüber
hinaus erfordern große
Mengen von Bilddaten wesentlich mehr Zeit und Bandbreite zur Manipulation
bzw. Handhabung, so wie zum Transfer über ein lokales oder großräumiges Netzwerk, über ein
Intranet, ein Extranet oder das Internet oder andere verteilte Netzwerke.
-
Dokumente
werden auf ein Scannen unter Verwendung eines Scanners hin typischerweise durch
eine Verwendung eines RGB-Farbraumes definiert, d. h. in einem rohen
RGB-Format. Allerdings werden Dokumentbilddaten eher typischerweise
einer Form der Datenkompression unterworfen, um deren Umfang bzw.
Volumen zu reduzieren, als in diesem rohen gescannten RGB-Format
gespeichert zu werden, wodurch die hohen Kosten des Speicherns von
solchen gescannten RGB-Dokumentenbilddaten vermieden werden.
-
Verlustlose
Lauflängen-Kompressionsschemata,
so wie Lempel-Ziv (LZ) oder Lempel-Ziv-Welch (LZW), funktionieren
nicht besonders gut bei gescannten Bilddaten oder im Generellen
mit Bilddaten, die sanft variierende kleinräumige Frequenzen haben, so
wie Gradienten und/oder natürliche,
bildhafte Daten, während
verlustreiche Methoden, so wie als JPEG, ziemlich gut bei sanft
variierenden Bilddaten kontinuierlicher Töne arbeiten. Allerdings funktionieren
verlustbehaftete Verfahren generell nicht besonders gut bei binärem Text
und/oder linien- bzw. zeilenartigen Bilddaten oder im Generellen,
bei jeglichen räumlich
hochfrequenten Bilddaten, die zum Beispiel scharfe Kanten oder Farbübergänge haben.
-
Die
WO 02/056255 A2 beschreibt
Verfahren und eine Vorrichtung zum Analysieren eines Bildes. Ein
Verfahren analysiert ein Bild, das zu scannen ist, und analysiert
wenigstens einen Teil des Bildes Bildpunkt für Bildpunkt.
-
Elemente
in dem Bild werden gemäß einer erkannten
Charakteristik charakterisiert und jedes Bildelement, das eine gegebene
Charakteristik hat, das ein angrenzendes oder ähnliches oder identisches Bildelement
ist, wird identifiziert. In einer Form sind vorzugsweise wenigstens
drei verschiedene Charakteristiken, so wie schwarz, Hintergrund
und Kante, durch welche die Bildelemente charakterisiert werden
können.
In einer anderen Form werden Bildelemente, die nahe genug beieinander
an einem physikalischen Ort und nahe genug beieinander in einer Bildcharakteristik
sind, zusammen gruppiert oder in einen Klecks bzw. Fleck (blob)
einbezogen bzw. eingefügt.
Unterflecke (sub-blobs) können
als Teile eines vorherrschenderen Fleckes vorkommen.
-
In
ZUGAJ D. et al.: „Eine
neue Herangehensweise der Farbbildsegmentation, basierend auf dem Verschmelzen
der Ausgaben von Regionen und Kanten-Segmentation" („A new
approach of color images segmentation based an fusing region and
edge segmentations outputs")
PATTERN RECOGNITION, ELSEVIER, KIDLINGTON, GB, vol. 31, no. 2, Februar 1998
(1998–02),
Seiten 105 bis 113, XP4101082, ISSN: 0031-3203 – Wird eine kooperative Strategie innerhalb
einer Farbbildsegmentation mit mehrfachen Auflösungen (multi-resolution color
image segmentation) vorgestellt, die versucht, die bedeutenden Informationen
(Regionen und Grenzen) zu extrahieren und diese zwei Herangehensweisen
dann zu verschmelzen, um eine akkurate, robuste und passende Segmentation
zu erreichen. Ein Colorierungsalgorithmus zum Füllen von Flecken erlaubt es,
aus dem segmentierten Bild ein synthetisiertes Bild zu entwickeln,
das als eine vereinfachte, aber getreue Kopie mit einer ausgewählten Auflösung des
originalen Bildes erscheint.
-
Die
US 4,718,090 beschreibt
ein Verfahren und eine Vorrichtung zur Hochgeschwindigkeitsverarbeitung
von Videobildern. Jeder Bildpunkt, in Linien bzw. Zeilen von zweifarbigen
Bildpunkten eines rastergescannten Videobildes, das wenigstens ein
Objekt beinhaltet, wird hinsichtlich des Objektes, zu dem der Bildpunkt
gehört,
identifiziert. Angrenzende zweifarbige Bildpunkte der gleichen Farbe über eine
Zeile werden in entsprechend nummerierten Bildpunktgruppen gruppiert.
Bildpunktgruppen der gleichen Farbe werden in nummerierte Flecken
von Bildpunktgruppen nach unten gruppiert. Wenn eine nächste Pixelliniengruppe
auftritt, welche die gleiche Farbe wie mehr als eine vorangegangene
Pixelgruppe einer Zeile hat, wird die nächste Zeilenpixelgruppe als
ein Teil des zuerst auftretenden vorangegangenen Zeilenflecks gruppiert.
Zusätzliche
Pixelgruppenübereinstimmungen
bzw. -abgleichungen, die zwischen Pixelgruppen einer vorangegangenen
und nächsten Zeile
auftreten, werden aufsteigend gruppiert, um eine gemeinsame Vorfahrenflecknummer
für jeden Fleck
der Punktgruppe in dem zusätzlichen
Bildpunktgruppenabgleich zur Verfügung zu stellen. Flecken, die
gemeinsame Vorfahrflecknummern haben, werden in nummerierte Objekte
mit jedem Fleck gruppiert, der zu einem Objekt gehört, so dass
jeder Bildpunkt durch eine Nummer des Flecks zu einer Objektnummer
gehört.
-
In
LAMBERT P. et al.: „Symbolische
Verschmelzung von Farbdichte-Farbton-Sättigungs-Merkmalen für eine Bereichssegmentation" („Symbolic
fusion of luminence-hue-chroma features for region segmentation") PATTERN RECOGINITON,
ELSEVIER, KIDLINGTON, GB, vol. 32, no. 11, November 1999 (1999–11), Seiten
1857 bis 1872, XP004173548, ISSN: 0031-3203 – Wird ein Ursprungssegmentationsverfahren
(original segmentation method) auf Farbbilder angewendet. Die beiden Schlüsselelemente
dieses Verfahrens sind die Verwendung eines Farbraumes, wobei der
Farbton explizit definiert und entsprechend seiner Relevanz verarbeitet
wird, die mit einer Sättigung
(chroma) verbunden sein kann, und die Verwendung von symbolischen
Darstellungen und regelbasierten Systemen, die Farb- und Leuchtdichtemerkmale
kombinieren, um eine Homogenität
zwischen Bildpunkten zu definieren.
-
ZUSAMMENFASSUNG DER OFFENBARUNG
-
Es
ist das Ziel der vorliegenden Erfindung, Verfahren und Vorrichtungen
zum Organisieren bzw. Zuordnen von Bilddaten in Regionen, die ähnliche Farbcharakteristiken
haben, zu verbessern. Dieses Ziel wird durch ein Zurverfügungstellen
eines Verfahrens zum Identifizieren von Bereichen von Bildpunkten
bzw. Bildelementen in Bilddaten gemäß Anspruch 1 und einer Vorrichtung
zum Identifizieren von Bereichen von Bildpunkten in Bilddaten gemäß Anspruch
5 erreicht. Ausführungsformen
der Erfindung werden in den abhängigen
Ansprüchen
dargelegt.
-
KURZE BESCHREIBUNG DER ZEICHNUNGEN
-
Verschiedene
beispielhafte Ausführungsformen
der Systeme und Verfahren dieser Erfindung werden im Detail mit
Bezug auf die folgenden Figuren beschrieben, worin:
-
1 ein
beispielhaftes Bilddokument darstellt, das in multiple binäre Vordergrundebenen
und eine Hintergrundebene zerlegt ist;
-
2 stellt
ein beispielhaftes System dar, in welchem das Fleckidentifizierungsmodul
arbeiten kann;
-
3 stellt
eine beispielhafte Ausführungsform
eines Fleckidentifizierungsmoduls detailreicher dar;
-
4 stellt
eine beispielhafte Ausführungsform
eines Unten-nach-Oben-Moduls detailreicher dar;
-
5 stellt
ein beispielhaftes Fleckidentifikationsbild dar, in welchem die
angezeigten Regionen auf die Scantabellen Bezug nehmen;
-
6 zeigt
eine beispielhafte Scantabellenstruktur;
-
7 zeigt
einen beispielhaften Scantabelleneintrag;
-
8 zeigt
eine beispielhafte temporäre Flecktabellen-Identifikationsstapel-Zuordnungsstruktur;
-
9 zeigt
einen beispielhaften Flecktabelleneintrag;
-
10 stellt
ein beispielhaftes Datenflussdiagramm für die in 5 gezeigten
Unten-nach-Oben-Module dar;
-
11 stellt
dar, wie Scantabelleneinträge vertikal
verbunden werden; und
-
12 stellt
ein beispielhaftes Fleckidentifikationsbild dar, in welchem die
angezeigten Regionen auf die temporären Fleckidentifikationen Bezug nehmen
und
-
13 ist
ein Flussdiagramm, das ein beispielhaftes Verfahren zum Generieren
einer globalen Tabelle von Flecken und eines Fleckidentifikationsbildes
umreißt.
-
14 stellt
die Struktur von zwei Umsetzungstabellen dar;
-
15 ist
ein Flussdiagramm, das weitere Details des ausgewählten nächsten Scantabellenschrittes
von 13 umreißt;
-
16 ist
ein Flussdiagramm, das weitere Details des Scantabellenumsetzungsschrittes
von 13 umreißt.
-
DETAILIERTE BESCHREIBUNG
-
Verschiedene
beispielhafte Ausführungsformen
von Systemen und Verfahren werden offenbart, die automatisch gescannte
und/oder gedruckte Farbdokumente verarbeiten, um kleine, hochkomprimierte
Bilddatendateien zu erzeugen, welche den originalen Dokumenteninhalt
akkurat festhalten. Dateien bzw. Dateiordner werden durch das Einscannen
von Dokumenten und Analysieren der Daten in einer gegebenen Scanlinie
bzw. -zeile erzeugt, um zu bestimmen, welche Bildpunkte bzw. Bildelemente
(pixel) des Bildes zusammen gruppiert werden können, weil sie ähnliche
Farb- und Kanteneigenschaften bzw. -charakteristiken haben. Die
Scanzeilen werden gemäß den Informationen
in einem Verbindungsfeld verbunden, um zweidimensionale Regionen
von Bildpunkten ähnlicher
Farbe zu erzeugen, und werden durch eine geschlossene Kurvengrenze
bzw. Abgrenzungslinie definiert. Diese Bereiche bzw. Regionen, Flecke
oder „blobs" werden dann durch
ein Kombinieren von Bereichen mit ähnlichen Farben, die sich räumlich überlappen,
zusammen gruppiert bzw. angehäuft.
Die kombinierten Bereiche (angehäufte
Bereiche – clustered
regions) werden dann in einer aus einer Vielzahl von binären Vordergrundebenen
platziert und können
für eine
Ausgabe, zum Beispiel als eine PDF-Datei, komprimiert werden.
-
1 zeigt
Bilddaten eines Dokumentes, das in Hintergrundebenen kontinuierlichen
Tons oder Graustufen 210 und N binäre Vordergrundebenen zerlegt
ist. In diesem Beispiel gibt es sechs (N = 6) binäre Vordergrundebenen 220–270.
Die Bilddaten enthalten Farbdaten geringer räumlicher Frequenz (low spatial
frequency color data), die in sechs verschiedene Farbwerte unterteilt
werden. Jeder dieser sechs Farbwerte ist mit einer bestimmten aus
der Vielzahl von binären
Vordergrundebenen 220–270 assoziiert,
welche Raumbereiche 220'–270' beinhalten,
die eine der sechs Farben enthalten. Nicht in einem dieser Bereiche 220'–270' enthaltene
Daten verbleiben auf der Hintergrundebene 210. Systeme
und Verfahren werden beschrieben, um die räumlichen Bereiche 220'–270' zu erzeugen,
die jeweils in binäre Vordergrundebenen
zusammengefasst bzw. angehäuft
werden.
-
Ein
eingegebener Bildpunkt bzw. Eingabebildpunkt kann nur einer der
Vielzahl von Vordergrundebenen bzw. -flächen zugewiesen werden oder
in der Hintergrundebene belassen werden. Somit überlappt sich der Bilddatenabschnitt
in jeder der Vielzahl binärer
Vordergrundebenen 220–270 nicht
mit anderen Bilddatenabschnitten in einer der anderen vielen binären Vordergrundebenen 220–270.
Als ein Ergebnis kann jede der binären Vordergrundebenen 220–270 individuell
mit der Hintergrundebenen 210 kombiniert werden, ohne eine
Abfolge oder Reihenfolge bzw. Sequenz zu beachten. Wenn alle der
Vielfachen binären
Vordergrundebenen 220–270 mit
der Hintergrundebene 210 kombiniert werden, erhält man das
rekonstruierte Bild 280.
-
Systeme
und Verfahren werden beschrieben zum Identifizieren der Flecke,
welche in den Bereichen 220'–270' zusammengefasst
bzw. angehäuft werden,
die jeder der binären
Bildebenen zuzuweisen sind.
-
2 zeigt
ein beispielhaftes System zum Erzeugen der N binären Vordergrundebenen aus einem
gescannten Bilddokument. 2 zeigt ein Dokument 300,
das durch einen Scanner 400 gescannt wird, um Bilddaten
in zum Beispiel einem RGB-Farbraum zu erzeugen, und die Bilddaten
sind in das System 1000 zur Erzeugung der Bilddaten in
N-Ebenen eingegeben.
Die durch das N-Ebenen-Bilddaten-Erzeugungssystem 1000 produzierten
N-Ebenen werden dann durch ein Kompressionsmodul 800 komprimiert
und zum Beispiel als eine PDF-Datei ausgegeben.
-
Das
erste Modul in dem N-Ebenen-Bilddaten-Erzeugungssystem 1000 ist
ein Farbumwandlungsmodul 500. Das Farbumwandlungsmodul 500 kann
die RGB-Daten zum Beispiel in ein YCC-Farbraum umwandeln. Wie es
wohl bekannt ist, beinhaltet der YCC-Farbraum eine Leuchtdichtekomponente (Y)
und zwei Farbsättigungskomponenten
(CC). Die Farbsättigungskomponenten
können
als Teilproben (subsamples) in einem Verhältnis von 2:1 entnommen werden,
wenigstens in einer Richtung, wenn nicht in beiden, so dass es halb
so viele Datenpunkte in den Farbsättigungskomponenten gibt, als
es in der Leuchtdichtekomponente gibt. Andere Farbräume, so
wie „Lab" können auch
verwendet werden.
-
Das
Bild in dem YCC-Farbraum kann dann in ein Fleckidentifikationsmodul 600 eingegeben
werden, das eine Liste von Bereichen oder Flecken erzeugt, die in
dem Bild auftreten bzw. erscheinen. Die Flecken werden basierend
auf Farb- und Kanteneigenschaften identifiziert. Flecke sind Regionen
bzw. Bereiche, die eine kontinuierliche Grenze bzw.
-
Abgrenzung
haben, welche Bildpunkte umschließt, die ähnliche Farbwerte haben. Das
Fleckidentifikationsmodul 600 weist eine Fleckidentifikation (blob
ID) jedem Bildpunkt in dem Bild zu, die anzeigt, zu welchem Fleck
(blob), wenn es welche gibt, der Bildpunkt gehört. Bildpunkte, die nicht zu
einem Fleck gehören,
werden einer der Hintergrundebenen zugewiesen. Eine Karte der Fleckidentifikationen
für jeden Ort
der Bildpunkte ist ein Fleckidentifikationsbild (blob identification(blob
ID)image) und wird durch das Fleckidentifizierungsmodul 600 erzeugt.
-
Das
Fleckidentifikationsmodul 600 erzeugt auch eine globale
Tabelle von Flecken (global table of blobs – GTB), die eine Liste von
allen in dem Bilddokument 280 gefundenen Flecken ist. Systeme
und Verfahren, die hierin beschrieben werden, dienen der Erzeugung
des Fleckidentifikationsbildes (blob ID image) und der GTB. Das
Fleckidentifikationsbild und die GTB werden weiter unten gemeinsam
mit Beispielen in Bezug auf das Fleckidentifikationsmodul 600 beschrieben.
-
Die
Fleckidentifikationsdaten und die GTB werden dann in das Fleckanhäufungsverarbeitungsmodul
(blob cluster processing module) 700 eingegeben. Das Fleckanhäufungsverarbeitungsmodul 700 ordnet
bzw. organisiert dann die Flecken in der globalen Tabelle von Flecken,
wobei Flecken, die eine ähnliche
Farbe haben und die sich räumlich überlagern, in
Anhäufungen
(clusters) assoziiert werden. Das Fleckanhäufungsverarbeitungsmodul 700 weist
die zusammengefassten bzw. angehäuften
Bereiche einer der N Vordergrundebenen zu, abhängig von den Farbwerten des
kombinierten Bereiches.
-
Das
Fleckanhäufungsverarbeitungsmodul 700 gibt
die binären
Daten für
jede der binären
Vordergrundebenen und die Hintergrundebene an das Kompressionsmodul 800 aus.
Das Kompressionsmodul 800 kann jede der binären Vordergrundebenen
und Hintergrundebenen verschieden komprimieren, wobei eine Kompressionsroutine
verwendet wird, die für
den bestimmten Typ von komprimierten Daten geeignet ist, um komprimierte
Bilddaten für
die binären
Vordergrundebenen und die Hintergrundebene zu erzeugen. Das Kompressionsmodul 800 kann dann
die komprimierten binären
Vordergrund- und Hintergrundebenen in einem geeigneten Format, so wie
ein PDF-Format, an einen nachgeschalteten Prozess (downstream process)
ausgeben.
-
3 zeigt
weitere Details eines beispielhaften Fleckidentifikationsmoduls
600.
Das Fleckidentifikationsmodul beinhaltet ein Oben-nach-Unten-Modul
610 und
ein Unten-nach-Oben-Modul
620.
Das Oben-nach-Unten-Modul
610 untersucht jeden Bildpunkt
in einer Scanzeile gemeinsam mit einer Anzahl Kontextbildpunkten
(context Pixels) und identifiziert, zu welchem Fleck die Bildpunkte
gehören,
die von Interesse sind. Das Oben-nach-Unten-Modul
610 gibt dann eine
Scantabelle für
jede Scanlinie oder -zeile (Abtastzeile bzw. -linie) aus, die eine
Identifikation von bis zu 255 Flecken oder einer anderen zufriedenstellenden
Anzahl beinhaltet, die in jeder einzelnen Scanzeile des Bildes auftreten
kann. Da die durch das Oben-nach-Unten-Modul
610 identifizierten
Flecken in einer einzelnen Scanzeile enthalten sind, sind die Flecken
in dieser Situation eindimensionale, „lineare" Flecke. Das Oben-nach-Unten-Modul
610 erzeugt
auch ein Fleckidentifikationsbild, das jedem gescannten Bildpunkt
in dem Bild die Identifikation der in der Scantabelle aufgelisteten
Flecke zuweist, zu der die einzelnen Bildpunkte gehören. Der Betrieb
des Oben-nach-Unten-Moduls
610 und die Erzeugung der Scantabelle
wird im Detail in dem parallelen
US-Patent US 2005/180628 A1 beschrieben, das
an dem gleichen Datum wie das vorliegende eingereicht und am 18.
August 2005 veröffentlicht
wurde.
-
Ein
Beispiel eines anfänglichen
Fleckidentifikationsbildes (initial blob ID image) ist in 5 gezeigt.
Das Fleckidentifikationsbild hat einen Fleckidentifizierer für jeden
Bildpunkt des Bildes. Das Fleckidentifikationsbild, das in 5 gezeigt
ist, hat einen Fleck, der grob die Form eines Buchstabens „A" hat, dessen Ausmaß und Identität unter
Verwendung der Systeme und Verfahren gemäß dieser Erfindung bestimmt
werden.
-
4 zeigt
Details des Unten-nach-Oben-Moduls 620. Das Unten-nach-Oben-Modul 620 beinhaltet
eine CPU 655 und einen Ein-/Ausgabeanschluss 660,
einen Speicher 665, einen Scantabellenumsetzter 670,
einen Fleckinhaltsaktualisierer 675 und einen Erzeuger 680 für die globale
Tabelle der Flecken. Die obigen Komponenten 655–680 können über eine
Datenleitung bzw. einen Bus 685 verbunden sein. Währen das
Unten-nach-Oben-Modul 620 unter
Verwendung eines Busarchitekturdiagramms dargestellt wird, können andere
Typen von Hardwarekonfigurationen verwendet werden, so wie die Verwendung
eines anwendungsspezifischen integrierten Schaltkreises (application
specific integrated circuits – ASICs),
um eine oder mehrere der Komponenten zu implementieren oder ein
Computerprogramm zu schreiben, das in der CPU 655 ausgeführt wird,
um all die Funktionen des Unten-nach-Oben-Moduls
durchzuführen.
-
Das
Unten-nach-Oben-Modul 620 gibt das anfängliche Fleckidentifikationsbild,
die aktuelle Scantabelle für
die aktuelle Scanzeile und die vorangegangene Scantabelle für die vorangegangenen Scanzeilen
durch den Ein-/Ausgabeanschluss 660 von dem Oben-nach-Unten-Modul 610 ein
und speichert die Daten in dem Speicher 665. Das Unten-nach-Oben-Modul kann
die Daten für
eine Scanzeile und eine vorangegangene Scanzeile gleichzeitig empfangen
oder es kann die Daten für
ein gesamtes Bild empfangen und die Daten im Speicher 665 abspeichern.
-
Jede
Linie in dem Fleckidentifikationsbild von 5 ist mit
einer Scantabelle assoziiert, welche die mit den in jeder Scanzeile
identifizierten Flecken in Beziehung stehenden Informationen speichert.
Die Scantabelle für
die mit „Beispiel" markierte Zeile
ist in 6 gezeigt. Die mit „Beispiel" markierte Linie in 5 hat
eine Anzahl von Bildpunkten, die zusammengehörig bzw. miteinander assoziiert
sind. Die Scantabelle für
diese Linie hat vier Tabelleneinträge, einen für einen Fleck Nr. 4, einen
für einen
Fleck Nr. 3, einen für
einen Fleck Nr. 2 und einen für
einen Fleck Nr. 1, so wie in dem Fleckidentifikationsbild identifiziert
(mit „0" gekennzeichnete
Flecke werden der Hintergrundebenen zugewiesen). Die zu dem Fleck
gehörenden
Bildpunkte müssen
nicht zusammenhängend
bzw. angrenzend sein und in der Tat sind sie es nicht für die Beispiellinie.
Die Fleckidentifikationen (blob IDs) in dem anfänglichen Fleckidentifikationsbild
beziehen sich auf die Fleckidentifikationen in der aktuellen Scantabelle.
-
Eine
Scantabelle kann bis zu 255 Einträge oder eine andere zufriedenstellende
Anzahl aufnehmen, wobei jeder Eintrag zwei Bytes des Speichers für eine Scantabelle
von 255 Einträgen
verwendet. Ein Beispiel eines Scantabelleneintrags ist in 7 gezeigt.
Dieser Scantabelleneintrag gehört
zu dem als Nr. 4 in dem Fleckidentifikationsbild identifizierten Fleck.
Die zwei Bytes des Scantabelleneintrags beinhalten das x-Verbindungsfeld
(xlink field) und das y-Verbindungsfeld (ylink field) Das x-Verbindungsfeld verbindet
jeden Fleck mit Bildpunkten auf der gleichen Linie, die zu dem gleichen
Fleck gehört.
Die x-Verbindungsverknüpfungen
(xlink connections) können
als eine rundum laufende Liste verwaltet werden, so dass ein nicht
horizontal mit einem anderen Fleck verbundener Fleck mit sich selber
verbunden sein kann, d. h., die Verbindung (link) zeigt auf sich selber.
Das y-Verbindungsfeld
verbindet auf der aktuellen Scanzeile identifizierte Flecke mit
zuvor auf der unteren Scanzeile identifizierten Flecken. Somit hat der
Scantabelleneintrag für
den Fleck Nr. 4 der Beispielzeile einen x-Verbindungseintrag, welcher
auf die zweite Erscheinung des Fleckes Nr. 4 auf der gleichen Scanzeile
zeigt, und einen y-Verbindungseintrag, der den Fleck Nr. 4 mit dem
Fleck Nr. 3 auf der gleichen Scanzeile unten verbindet.
-
Jeder
Scaneintrag hat eine Größe von 2 Bytes
und jede Scantabelle enthält
bis zu 255 gültige Einträge. Deswegen
benötigt
die Scantabelle für
jede Scanzeile 256 Einträge *2 Bytes = 512 Bytes des Speichers.
-
Das
Unten-nach-Oben-Modul 620 wird die Scantabelleneinträge aufnehmen
und die Flecke vertikal verbinden, indem es den Flecken eine weitere temporäre Identifikation
(temporary ID) gibt, während das
Modul den Inhalt des Flecks zusammensetzt. Wie die Scantabelle werden
die temporären
Identifikationen in einer Tabelle gespeichert, die bis zu 255 temporäre Fleckidentifikationen
enthält.
Ein Beispiel der temporären
Fleckidentifikationstabelle ist in 6 gezeigt.
-
Ein
Beispiel eines temporären
Fleckidentifikationseintrags (temporary blob ID entry) ist in 9 gezeigt.
Wie mit dem Scantabellen-Identifikationseintrag verglichen, beinhaltet
der temporäre
Identifikationseintrag zusätzliche
Informationen, die sich auf die zweidimensionalen Aspekte der temporären Identifikation
beziehen. Insbesondere enthält
der temporäre Identifikationseintrag
vier zusätzliche
Felder, min_x 735, max_x 740, min_y 744 und
max_y 750, welche die x- und y-Ausmaße des Rahmens („bounding box") sind, der den temporären Fleck
umgibt. Der Rahmen ist das kleinste Rechteck, das alle dem Fleck
zugewiesenen Bildpunkte umschließt. Da zusätzliche Bildpunkte durch das
Unten-nach-Oben-Modul
hinzugefügt
werden, wird der Rahmen kontinuierlich aktualisiert, um die neuen Grenzen
wiederzugeben, nachdem die zusätzlichen Bildpunkte
hinzugefügt
wurden.
-
Wie
die Scantabelleneinträge
können
die temporären
Fleckidentifikationsinformationen über die Farbwerte des Flecks
verwalten. Diese Informationen können
zum Beispiel die Farbsummen Summe Y 755, Summe Cb 760 und
Summe Cr 765 beinhalten. Schließlich speichern die temporären Fleckidentifikationseinträge wie die
Scantabelleneinträgen eine
Bildpunktzählung 770 und
Varianzdaten 775. Der temporäre Fleckidentifikationseintrag
identifiziert auch eine Fleckidentifikation 780 und weist
diese zu, um den Fleck zu verfolgen.
-
Jeder
temporäre
Fleckidentifikationseintrag wird mit den folgenden Werten initialisiert:
- (i) max_x und max_y werden zu –1 gesetzt
(keine maximale Position),
- (ii) min_x wird zur Bildbreite +1 gesetzt (kein Minimum),
- (iii) min_y wird zur Bildhöhe
+1 gesetzt (kein Minimum).
-
Zähler (count),
Varianz (var), Summe Y (sum Y), Summe Cb (sum Cb) und Summe Cr (sum
Cr) werden mit Null initialisiert. Die Fleckidentifikationen werden
in sequenzieller Reihenfolge von einem Fleckidentifikationsstapel
zugewiesen.
-
Wenn
das Oben-nach-Unten-Modul erstmalig einen neuen Fleck antrifft,
weist es eine temporäre Identifikation
zu diesem neuen Fleck zu. Die temporäre Identifikation (temporary
ID) wird von einer Fleckidentifikationsstapeltabelle (blob ID stack
table) genommen, die die Liste der in Gebrauch befindlichen Identifikationen
verwaltet. Die Struktur dieser Fleckidentifikationsstapeltabelle
ist in 8 gezeigt. Die Fleckidentifikationsstapeltabelle
kann bis zu 256 temporäre
Fleckidentifikationseinträge
aufnehmen. Ein Eintrag, so wie der erste Eintrag zum Beispiel, ist für die Hintergrundebenen
reserviert. Der Hauptzweck der Fleckidentifikationsstapeltabelle
ist es, die temporären
Fleckidentifikationen wiederzuverwerten. Sobald ein Fleck abgeschlossen
ist, wird er an einen nachgelagerten Prozess ausgegeben und die
mit dem Fleck assoziierte temporäre
Identifikation wird freigegeben und für eine Zuweisung zu einem neuen
Fleck durch den Fleckidentifikationsstapelalgorithmus nutzbar gemacht.
-
Wenn
das Oben-nach-Unten-Modul 620 bestimmt, dass der Fleck
vollständig
ist, d. h. er ist von einer kontinuierlichen Abgrenzung umschlossen
und keine weiteren zusätzlichen
Bildpunkte werden hinzugefügt,
wird das Unten-nach-Oben-Modul 620 den Inhalt der temporären Fleckidentifikation
an die globale Tabelle von Flecken (Global Table of Blobs – GTB) ausgeben.
Das Unten-nach-Oben-Modul 620 aktualisiert auch inkrementell
das Fleckidentifikationsbild, um sich eher auf neue Fleckidentifizierer
zu beziehen als auf die, die in der lokalen Scantabelle verwendet
werden. Das aktualisierte Fleckidentifikationsbild und die GTB werden
dann zur weiteren Verarbeitung durch das Fleckanhäufungsverarbeitungsmodul 700 ausgegeben.
-
Das
Unten-nach-Oben-Modul 620 kann im Wesentlichen vier Schritte
in der Scantabelle und den Fleckidentifikationsbildeingaben ausführen:
- 1) Setze die Scantabelleneinträge in temporäre Fleckidentifikationen
in einer Umsetzungstabelle unter Verwendung der vorangegangen Umsetzungstabelle
auf die untere Zeile um.
- 2) Ein zweiter Durchlauf über
den Umsetzungstabelleninhalt kann ausgeführt werden, wenn ein oder mehrere
Einträge
entdeckt werden, die einen abschließenden x-Verbindungswert enthalten,
der nicht in einer kreisförmige
Weise auf sich selbst zeigt.
- 3) Aktualisiere das Fleckidentifikationsbild zum temporären Flecktabelleninhalt,
um zusätzliche Bildpunkte
auf der aktuellen Scanzeile wiederzuspiegeln, die mit diesen temporären Fleckeinträgen assoziiert
sind.
- 4) Exportiere jegliche geschlossene temporäre Fleckidentifikationen in
die GTB und gebe die Ressourcen frei, die einem geschlossenen Fleck zugewiesen
sind, und mache sie für
die Zuweisung zu einem neuen temporären Fleck nutzbar, so wie benötigt.
-
Der
Fluss von Daten innerhalb des Unten-nach-Oben-Moduls 620 ist
durch 10 dargestellt. Wie in 10 gezeigt
ist, werden die Scantabelleneinträge für die aktuelle Zeile durch
den Scantabellenumsetzer 670 eingegeben. Der Scantabellenumsetzer 670 setzt
die Scantabelleneinträge
zu temporären
Fleckidentifikationen um, wobei er die vorangegangene Umsetzungstabelle
der darunterliegenden bzw. unteren Zeile verwendet. Das Fleckidentifikationsbild
und ein verbessertes Farbbild (enhanced color image – ENH) wird
in den Fleckinhaltsaktualisierer 675 eingegeben, der die
temporäre Flecktabelleninformation
und das Fleckidentifikationsbild für alle Scantabelleneinträge auf der
aktuellen Linie aktualisiert. Der GTB-Erzeuger 680 bestimmt
dann, ob irgendwelche Flecke geschlossen werden können und
wenn dies so ist, schließt
er die Flecke durch ein Ausgeben der Fleckinformationen an die GTB.
Die geschlossene Fleckinformation wird der aktuellen GTB angehängt und
die aktuelle temporäre
Fleckidentifikation wird durch den nächsten nutzbaren GTB-Eintrag in sequenzieller
Reihenfolge ersetzt. Jeder dieser Schritte wird unten im Detail
beschrieben.
-
Auf
einen Erhalt der aktuellen Scantabelle von dem Oben-nach-Unten-Modul 610 und
mit dem Bewahren der vorangegangenen Umsetzungstabelle der unteren
Zeile hin bewertet das Unten-nach-Oben-Modul 620 jeden
Eintrag in der aktuellen Scantabelle von 1 bis 255, um
zu überprüfen, ob
er ein gültiges
(nicht Null) x-Verbindungsfeld ist.
-
Zu
diesem Zeitpunkt hat das Unten-nach-Oben-Modul 620 schon
die vorangegangene Scantabelle der darunterliegenden Zeile verarbeitet,
weil das Modul nach oben fortschreitet.
-
Dementsprechend
haben die vorangegangenen Scantabellen Einträge schon in temporäre Fleckidentifikationen
umgesetzt und die gleichen Identifikationen werden zur aktuellen
Zeile mitgeführt, wenn
sie vertikal verbunden werden. Da die allererste Scanzeile (die
untere Zeile des Bildes) keine vorangegangene Scanzeile hat, mit
der sie verbunden werden kann, sind alle y-Verbindungswerte für diese erste
Scanzeile Null und jedem gültigen
Fleckeintrag für
die erste Scanzeile wird eine anfängliche temporäre Fleckidentifikation
(initial temporary blob ID) gegeben. Während dieser Prozess von einer
Zeile von einem Zeitpunkt von unten nach oben fortschreitet, „entwirrt" er die vertikalen
y-Verbindungsverknüpfungen
und weist einzigartige temporäre
Fleckidentifikationen neu zu, welche von einer Zeile zur nächsten konsistent
sind.
-
Das
Unten-nach-Oben-Modul 620 verwaltet die Zuweisungen der
temporären
Fleckidentifikationen mit Hilfe einer Umsetzungstabelle. Das Unten-nach-Oben-Modul 620 verwendet
zwei Umsetzungstabellen, einen für
die aktuelle Zeile und einen, um die vorangegangene Umsetzungstabelle
von der darunterliegenden Zeile zu verwalten. 14 zeigt die
Struktur der zwei Umsetzungstabellen. Die zwei Umsetzungstabellen
werden bei jeder Zeile abgewechselt. An dem Ende der aktuellen Zeile
wird die aktuelle Umsetzungstabelle die vorangegangene Umsetzungstabelle
für die
nächst
Zeile und die Umsetzungstabelle für die darunterliegende Zeile
wird zerstört,
indem sie durch die Umsetzungstabellendaten der nächsten Zeile überschrieben
wird, da sie nicht länger
gebraucht wird.
-
14 zeigt
ein Beispiel eines gültigen Fleckeintrags 27 in
der Scantabelle für
die darunterliegende Zeile, welche vertikal mit einem gültigen Fleckeintrag 21 in
der Scantabelle der aktuellen Zeile verbunden ist. Als die darunterliegende
Zeile durch das Unten-nach-Oben-Modul 620 verarbeitet
wurde, wurde der Scantabelleneintrag 27 umgesetzt, um zum
Beispiel der temporären
Identifikation 33 zugewiesen zu werden. Da der aktuelle
Zei leneintrag 21 vertikal mit 27 auf der darunterliegenden
Zeile verbunden ist, wird die temporäre Identifikation 33 kopiert
und dem Eintrag 21 in der Umsetzungstabelle mit der aktuellen
Linie zugewiesen. Dies zeigt an, dass die beiden anscheinend nicht
miteinander in Bezug stehenden Scantabelleneinträge zu dem gleichen temporären Fleck
gehören
und daher der gleichen temporären
Fleckidentifikation 33 zugewiesen werden.
-
Alle
nachfolgenden Scanzeilen, die sich über die y-Verbindungsfelder
auf einen Fleck oder eine höhere
Scanzeile beziehen, werden die temporären Fleckidentifikationen von
dem Fleck auf der früheren Scanzeile
miteinander teilen. Deswegen ist die Funktion des Unten-nach-Oben-Moduls,
die vertikalen Assoziationen zwischen den identifizierten Flecken
herzustellen, wobei die im Wesentlichen eindimensionalen Flecken
von den Scantabellen in zweidimensionale Flecken transformiert werden,
die in der temporären
Tabelle der Flecke aufgelistet sind.
-
Der
aktuelle Fleckeintrag in der Scantabelle wird als gültig betrachtet,
wenn das x-Verbindungsfeld (xlink) nicht Null ist. Andererseits,
wenn xlink = 0 ist, zeigt dies an, dass der aktuelle Fleck mit der
Hintergrundebene verbunden ist (id = 0).
-
Für jeden
gültigen
Fleckeintrag wird das y-Verbindungsfeld (ylink) untersucht. Wenn
die y-Verbindung nicht Null ist, ist der aktuelle Fleck vertikal mit
einem anderen Fleck auf der darunterliegenden Zeile verbunden. Die
y-Verbindung wird zu der vorangegangenen Umsetzungstabelle für die darunterliegende
Zeile verfolgt und der temporäre
Fleckidentifikationsinhalt wird abgerufen und in den Umsetzungstabellenfleckeintrag
für die
aktuelle Linie kopiert.
-
Wenn
allerdings andererseits der aktuelle Fleck keine vertikale Verbindung
hat zu einem vorangegangenen Fleck (z. B. ylink = 0), dann kann
es ein neuer Fleck sein, der zum ersten Mal angetroffen wird. Es
wird zuerst eine Überprüfung vorgenommen, um
zu sehen, ob der aktuelle Scantabelleneintrag horizontal mit einem
anderen Scantabelleneintrag auf der aktuellen Zeile verbunden ist.
Ein gültiger
Fleck, der nicht horizontal mit einem anderen Fleck verbunden ist,
hat einen x-Verbindungswert, der auf seinen eigenen Fleckeintrag
zurückverweist,
wie durch die zirkuläre
bzw. kreisförmige
x-Verbindungsliste impliziert. Wenn der aktuelle Fleck dazu bestimmt
wird, horizontal mit anderen Flecken verbunden zu sein, wird der
Fleckeintrag in der Umsetzungstabelle zu Null gesetzt und eine Markierung
(flag) „Hat-Anschluss-X" („HasTerminalX") angeschaltet, um
diesen aufgetretenen Zustand anzu zeigen. In einem nachfolgenden
Schritt kann das Unten-nach-Oben-Modul 620 solche horizontal
verbundenen Umsetzungstabellen-Fleckeinträge weiter untersuchen, um zu
bestimmen, ob ihnen neue temporäre
Fleckidentifikationen zuzuweisen sind oder nicht.
-
Wenn
der aktuelle Fleck gültig
ist, eine y-Verbindung von Null hat und einen x-Verbindungswert hat, der zurück auf sich
selber in einer kreisförmigen Weise
zeigt, dann kann angenommen werden, dass er ein gültiger neuer
Fleck ist, der zum ersten Mal angetroffen wird. Die nächste nutzbare
temporäre
Identifikation wird ihm von dem Identifikationsstapel zugewiesen
und in die aktuelle Umsetzungstabelle eingetragen, um anzuzeigen,
dass der aktuelle Scantabelleneintrag nun mit dieser neuen temporären Identifikation
assoziiert wird. Gleichzeitig wird der Identifikationsstapelzähler (ID
Stack counter) um Eins verringert bzw. dekrementiert und zeigt nun
auf die nächste nutzbare
freie temporäre
Identifikation. Die aktuelle temporäre Identifikation wird in Gebrauch
bleiben, bis sie durch den GTB-Erzeuger 680 freigesetzt
wird, wie unten beschrieben werden wird. Das Unten-nach-Oben-Modul verwaltet die
temporären
Fleckidentifikationen und aktualisiert die temporäre Fleckidentifikation,
während
es fortschreitet, die Scantabelleneinträge den temporären Flecken
zuzuweisen.
-
Schließlich wird,
wenn das aktuelle x-Verbindungsfeld des Fleckes Null ist, angenommen,
dass er mit der Hintergrundebenen verbunden ist. Der dazugehörige Umsetzungstabelleneintrag
wird zu Null gesetzt.
-
Wenn
der Scantabellenumsetzungsprozess einen ersten Durchlauf durch die
Scantabelleneinträge
abgeschlossen hat, um eine Anfangsumsetzungstabelle zu erschaffen,
kann ein neuer Durchlauf durchgeführt werden, wenn die Markierung „Hat-Anschluss-X" („HasTerminalX") angestellt ist,
was anzeigt, dass wenigstens ein Fleck dazu bestimmt wurde, mit
einem anderen Fleck auf der aktuellen Zeile horizontal verbunden
zu sein. In diesem zweiten Durchlauf werden nur Fleckeinträge in der
Umsetzungstabelle untersucht, die zuvor zu Null gesetzt wurden.
Für jeden
solchen Fleckeintrag in der aktuellen Umsetzungstabelle werden die
x-Verbindungs- und y-Verbindungswerte erneut aus der aktuellen Scantabelle
abgerufen. Wenn ylink = 0 ist und die x-Verbindung nicht Null ist,
wird eine neue temporäre Identifikation
von dem Identifikationsstapel, wie oben beschrieben, erhalten und
dem aktuellen Eintrag in der Umsetzungstabelle zugewiesen. Zusätzlich wird dem
x-Verbindungsfeld zu dem nächsten
horizontal verbundenen Fleckeintrag gefolgt, wenn vorhanden, und
dem dazugehörigen
Umsetzungstabelleneintrag für
diesen Fleck wird auch die gleiche neue temporäre Identifikationsnummer zugewiesen.
Dieser Prozess wiederholt sich durch alle horizontal verbundene
Flecke, bis er einen nächsten
x-Verbindungswert erreicht, der zurück zu der allerersten beginnenden Fleckidentifikation
verweist. Dieser Prozess stellt sicher, dass der gesamten Kette
von horizontal verbundenen Flecken konsistent die gleiche temporäre Identifikationsnummer
zugewiesen wird.
-
Wenn
der Scantabellenumsetzer 670 seiner Aufgabe mit bis zu
zwei Durchgängen
pro Zeile durchführt,
werden alle Flecke in der aktuellen Scantabelle gültige temporäre Identifikationsnummern
in den Umsetzungstabelleneinträgen
haben. Diese Werte werden als die temporären Fleckidentifikationsnummern
bezeichnet (temporary blob ID numbers), da sie nur verwendet werden,
bis der Fleck geschlossen ist und durch den GTB-Erzeuger 680 in
die GTB exportiert wird.
-
Zurückkehrend
zu dem durch 5 dargestellten Beispiel ist
der vierte Scantabelleneintrag für die
in der Figur gezeigte Beispielzeile in 7 gezeigt.
Das x-Verbindungsfeld
ist gültig
(4.xlink > 0) und
ist vertikal mit dem Fleck 3 auf der darunterliegenden Zeile verbunden.
Wenn dem y-Verbindungsfeld (ylink) nach unten bis zur Scantabelle
auf der darunterliegenden Zeile gefolgt wird, wird gefunden, dass
3.ylink = 1 ist, das heißt,
dass die temporäre Fleckidentifikation
(blob ID) Nummer 1 in der ersten (unteren) Zeile des Fleckes vertikal
mit der Scantabellenfleckidentifikation Nummer 3 verbunden ist. Der
neue y-Verbindungswert
von 1 wird in den aktuellen Umsetzungstabelleneintrag der aktuellen
Fleckidentifikation Nummer 4 in der Scantabelle kopiert, so dass
nun 4.ylink = 1 ist (temporäre
Identifikation bzw. ID). Da die beiden Scantabellenflecke in diesem Beispiel
vertikal verbunden sind, wird die temporäre Fleckidentifikationszuweisung
von der Umsetzungstabelle der darunterliegenden Zeile in den aktuellen Umsetzungstabelleneintrag
kopiert. Indem dieser Prozess nach oben erweitert wird, wird die
erste mit dieser einen Fleck bildenden Gruppe von Bildpunkten assoziierte
temporäre
Fleckidentifikation (als dem untersten Scantabellenfleck) nach oben
verbreitet und wird die gleiche für alle der vertikal verbundenen
Flecken sein.
-
11 stellt
die vorher und nachher Werte der Umsetzungstabelle für das in 5 gezeigte
Beispiel dar. Wie durch den Vergleich der vorher und nachher Werte
gesehen werden kann, ist der Effekt jener, dass die temporäre Blobidentifikation
(#1), die mit der Verbindung auf der darunterliegenden Zeile assoziiert
ist, wie in der Umsetzungstabelle auf der darunterliegenden Zeile
angezeigt, als der aktuelle Umsetzungstabelleneintrag einge fügt. Dieser
Prozess wird sich für
alle vertikal verbundenen Flecke auf den darüberliegenden Zeilen wiederholen,
wodurch ihnen allen die gleiche temporäre Identifikation in ihren
entsprechenden Umsetzungstabellen zugewiesen wird.
-
Dementsprechend
ist die Aufgabe des Unten-nach-Oben-Moduls 620, zweidimensionale
Flecke aus den im Wesentlichen eindimensionalen Scantabelleninformationen
zu erzeugen, die durch das Oben-nach-Unten-Modul 610 erzeugt
werden, indem die eindimensionalen Flecke zusammen entweder vertikal
oder horizontal verbunden werden, wobei die Umsetzungstabelleneinträge verwendet werden.
Die zweidimensionalen Flecke werde jeweils durch die temporäre Fleckidentifikation
identifiziert, welche die temporäre
Liste von zweidimensionalen Flecken ist, die durch das Unten-nach-Oben-Modul zusammengestellt
wird. Jedes Mal, wenn ein neuer Fleck auf einer Scanzeile angetroffen
wird, der nicht schon vertikal verbunden ist, wird ihm eine neue
temporäre
Fleckidentifikation gegeben. Wenn es ein neuer Fleck ist, der horizontal
mit anderen Flecken auf der aktuellen Zeile verbunden ist, wird
die gleiche temporäre
Fleckidentifikation konsistent allen solchen horizontal verbundenen
Flecken zugewiesen. Da auf diese Identifikation (ID) von aufeinanderfolgenden
Scanzeilen Bezug genommen wird, werden die neuen Bildpunkte mit
der gleichen temporären Fleckidentifikation
assoziiert.
-
Der
Prozess des Fleckinhaltsaktualisierers 675 beginnt, nach
dem die Scantabellenumsetzung 640 die Verarbeitung der
aktuellen Zeile abgeschlossen hat. Der Fleckinhaltsaktualisierer 675 verwaltet eine
Fleckstruktur mit einer Vielzahl von Feldern für jede temporäre Fleckidentifikation
(BID). An dem Ende jeder Zeile aktualisiert der Fleckinhaltsaktualisierer 675 die
Fleckstrukturen für
jede aktive temporäre
Fleckidentifikation, um die Informationen der neuen Bildpunkte aus
der aktuellen Zeile mit einzuschließen, die mit jeder offenen
Identifikation verbunden ist. Für
jeden gültigen
Fleckeintrag in der aktuellen Scantabelle schaut der Fleckinhaltsaktualisierer 675 in
der Umsetzungstabelle nach, um die entsprechende temporäre Fleckidentifikationsnummer
(temorary blob ID number) festzulegen. Der Fleckinhaltsaktualisierer 675 aktualisiert
dann die verschiedenen mit den bestimmten temporären Blobidentifikationseinträgen assoziierten
Felder in der Flecktabelle.
-
Der
Fleckinhaltsaktualisierer 675 scannt dann das BID-Bild
von links nach rechts (in einer Rasterreihenfolge) für die aktuelle
Scanzeile, einen Bildpunkt zu einer Zeit. Für jeden Bildpunkt zeigt der anfängliche
BID-Wert (initial BID value) die lokale Scantabellenfleckidentifikation
an, die mit dem aktuellen Bildpunkt assoziiert ist. Dieser Scantabellenidenti fikationseintrag
wird in der aktuellen Scantabelle nachgeschlagen (für die aktuelle
Zeile) und ihm wird bis zur entsprechenden temporären Fleckidentifikation
gefolgt, indem in dem aktuellen Umsetzungstabelleneintrag nachgeschlagen
wird.
-
Die
zu den temporären
Fleckidentifikationen gehörenden
Fleckstruktureinträge
werden aktualisiert, um jegliche neue Bildpunkte mit einzubeziehen, die
mit dieser temporären
Fleckidentifikation auf der aktuellen Zeile assoziiert sind. Näher spezifiziert
werden die Felder in dem temporären
Flecktabelleneintrag, die wie folgt aktualisiert:
- (i)
min_y wird zur aktuellen Zeile gesetzt (wenn die Zeilennummer < min_y ist)
- (ii) max_y wird zur aktuellen Zeile gesetzt (wenn die Zeilennummer > max_y ist)
- (iii) min_x wird zum aktuellen Bildpunkt gesetzt (wenn der Bildpunkt < min_x ist)
- (iv) max_x wird zum aktuellen Bildpunkt gesetzt (wenn der Bildpunkt > max_x ist)
- (v) Die Anzahl von Bildpunkten in dem lokalen Scantabellenfleck
wird zum Zähler
(count) hinzugefügt
- (vi) Die Varianz im lokalen Scantabellenfleck wird zu var hinzugefügt
- (vii) Die Farbsummen im lokalen Scantabellenfleck werden jeweils
zu sum Y, sum Cb und sum Cr hinzugefügt.
-
Dies
fügt praktisch
den Inhalt der Bildpunkte, die mit dem lokalen Scantabellenfleck
assoziiert sind, den dazugehörigen
temporären
Fleckfeldern hinzu und aktualisiert das temporäre Fleckrahmenkästchen (temporary
blob bounding-box) unter Bezug auf den Ort des aktuellen Bildpunktes.
-
Um
eine Überlaufen
der YCC-Summenfelder (sum Y, sum Cb, sum Cr) von jedem gültigen (nicht
im Hintergrund liegenden) Fleckeintrag in der temporären Flecktabelle
zu verhindern, können
diese Felder jedes Mal neu normalisiert werden, wenn der Wert von
einem von ihnen zu groß wird.
Dies kann dadurch erreicht werden, indem die YCC-Summenfelder durch 2 geteilt werden
und auch die Zählernummer
von Bildpunkten durch 2 geteilt wird, um zum Beispiel die gleichen
Verhältnisse
beizubehalten.
-
Schließlich aktualisiert
der Fleckinhaltsaktualisierer die Fleckidentifikationen der aktuellen
Bildpunkte, um den temporären
Fleck zu verweisen (der gerade aktualisiert wurde), anstatt des
ursprünglichen
lokalen Scantabellenfleckes. Dieser Prozess aktualisiert das BID-Bild,
damit es sich auf die temporären
Fleckidentifikationsnummern anstatt auf die ursprünglichen
Scantabellenflecksegmente bezieht. 12 ist
das Fleckidentifikationsbild von 4, worin
die Fleckidentifikationen für
alle in dem Fleck den Buchstaben „A" bildenden Bildpunkte durch die temporäre Fleckidentifikation
#1 aus der temporären
Fleckidentifikationstabelle ausgetauscht wurden, gemäß der temporären Fleckidentifikationsinformation
von jeder der Scanzeilen, welche einen Teil des Buchstabens „A" bilden. Die min_x,
max_x, min_y und max_y sind die Koordinaten des Rahmenkästchens,
das den Fleck #1 wie in 12 gezeigt
umgibt. Der Fleck #1 kann nun geschlossen werden, weil die nächste Zeile
darüber
keine weiteren Bildpunkte enthält,
die mit dem Fleck #1 assoziiert sind.
-
Die
temporäre
Fleckidentifikation wird effektiv belassen, bis eine Festlegung
vorgenommen wurde, dass der Fleck „geschlossen" werden kann, d.
h., dass keine weiteren Bildpunkte auf einer aktuellen Scanzeile
mit dem temporären
Fleck assoziiert werden. Eine temporäre Fleckidentifikation kann
geschlossen werden, wenn (1) der Fleck die aktuelle Scanzeile nicht
erreicht (min_y > aktuelle
Zeile); und (2) der Fleck einen Zähler hat, der nicht Null ist (non-zero
count) (absolute Anzahl von Bildpunkten). Zusätzlich, wenn die aktuelle Zeile
die letzte Scanzeile ist (Zeile = 0), werden die Flecke geschlossen,
weil es keine weiteren zu verarbeitenden Zeilen gibt. Da das Unten-nach-Oben-Modul 620 von
der Unterseite der Zeile zur Oberseite arbeitet, ist die letzte
Scanzeile die erste Zeile des Bildes.
-
Für jeden
Fleck, der den obigen Bedingungen genügt, kann der GTB-Erzeuger 680 die
temporäre
Fleckinformation normalisieren, indem er die YCC-Summen durch den
Zähler
teilt usw. Da der Fleckeintrag in die finale GTB exportiert wird,
wird der Fleckinformationsinhalt der GTB angehängt und die temporäre Fleckidentifikation
wird durch die nächst verfügbare Identifikation
aus der GTB ersetzt die finale Fleckidentifikationszuweisung). Danach
werden der temporäre
Fleckeintrag und die assoziierten Informationen aus der temporären Flecktabelle
entfernt. Der Exportprozess kann die folgenden Schritte beinhalten:
- 1) Teile die drei temporären Fleckfarbensummen (sumY/Cb/Cr)
durch den Fleckbildpunktzähler und
runde das Ergebnis zu dem nächsten
ganzzahligen Wert (integer value) ab. Dieser Vorgang erzeugt eine
mittlere Fleckfarbe. Um zeitauf wändige
Operationen zu vermeiden, kann die Teilungsoperation dadurch implementiert
werden, dass eine Zuweisungstabellen-Multiplikation (lookup table
multiply) und Nach-Rechts-Versetzungsoperation (shift-right) verwendet
wird.
- 2) Überprüfe, um sicherzugehen,
dass es keinen Platz für
weitere Flecke in der GTB gibt. Wenn da kein Platz ist, weise eine
neue GTB zu, die zweimal so viele Flecke aufweisen kann, kopiere
den alten Tabelleninhalt in die neue Tabelle und lösche dann
die alte Tabelle. Benutze die neue GTB von diesem Punkt an. Dieser
Schritt kann notwendig werden, da die Größe der GTB variabel ist, aufgrund
dessen, dass der Seiteninhalt und die Anzahl von Flecken im Voraus
nicht bekannt sind. Der Schritt 2 lässt zu, dass die Größe der GTB
dynamisch wächst
(durch Potenzen von 2 in diesem Beispiel), während die GTB erzeugt wird.
- 3) Füge
einen neuen Fleck zur GTB hinzu, indem der Zähler der GTB durch 1 inkrementiert
bzw. erhöht
wird.
- 4) Kopiere den Inhalt aller Felder des temporären Fleckeintrags
von der temporären
Flecktabelle in die GTB unter dem letzten neuen Eintrag.
-
Wenn
die GTB exportiert wird, wird ihm eine neue sequenzielle Fleckidentifikationsnummer
in der GTB zugewiesen. Im Unterschied zur temporären Flecktabelle, die auf maximal
256 Einträge
beschränkt
ist, ist die Anzahl in der GTB nicht eingeschränkt und kann tausende von Flecke
für eine
komplexe Seite beinhalten.
-
Nachdem
der Inhalt des aktuellen temporären
Fleckes in die GTB eingetragen wurde, kann der temporäre Fleck
aus der temporären
Flecktabelle entfernt werden. Der Entfernungsprozess kann beinhalten,
dass die verschiedenen Fleckfelder auf ihre Ursprungswerte (default
bzw. initial values) zurückgesetzt
werden. Nach der Initialisierung wird die aktuelle temporäre Fleckidentifikation
auf den temporären
Fleckidentifikationsstapel zurückgeschoben. Dies
veranlasst die temporäre
Fleckidentifikation dazu, als letzter Stapeleintrag hinzugefügt zu werden und
der Stapelzähler
wird durch Eins inkrementiert bzw. erhöht. Als ein Ergebnis ist die
Fleckidentifikation für
eine Neuverwendung nutzbar. Wenn keine weiteren Fleckidentifikationen
freigesetzt werden, bevor ein neuer Fleck gefunden wird, kann die
Fleckidentifikation unverzüglich
einem neu gefundenen Fleck neu zugewiesen werden.
-
Folglich
wird der geschlossene temporäre Fleck
in die GTB übertragen,
indem der Inhalt des assoziierten temporären Fleckeintrags kopiert wird.
Die GTB speichert die abschließende
Liste von Flecken ab, so wie sie durch das Fleckidentifikationsmodul 600 identifiziert
wurden, gemeinsam mit der assoziierten Fleckinformation für jeden
Fleck in der GTB.
-
Die
GTB und das Fleckidentifikationsbild-BID werden nachfolgend durch
das Fleckanhäufungsverarbeitungsmodul 700 verwendet,
welches die Flecke in der GTB gemäß Farbähnlichkeiten und räumlichen Überlappungen
anhäuft.
Die Anhäufungen
(clusters) werden dann den binäre
Vordergrundebenen zugewiesen, die dann an das Kompressionsmodul 800 ausgegeben
werden und zur weiteren Manipulation bzw. Verarbeitung in ein PDF-Dokument zusammengepackt
werden können.
-
Obwohl
die vorangegangene Beschreibung mit Bezug auf eine Hardwareausführungsform
gegeben wurde, kann der Fleckanhäufungsprozess
auch als eine auf einem Mikroprozessor ausgeführte Software implementiert
werden. In diesem Falle wird jeder Schritt des Verfahrens durch
einen geeignet programmierten Mikroprozessor oder durch eine Kombination
von Hardware und Software ausgeführt.
-
13 ist
ein Flussdiagramm, das ein beispielhaftes Verfahren zum Verbinden
von Flecken umreißt,
die in einer Zeilenscanvorrichtung identifiziert werden. Das Verfahren
beginnt in einem Schritt S100, worin ein erster oder nächster Zeilenscan
ausgewählt
wird. Der Prozess fährt
zum Schritt S200 fort, worin die Scantabelle umgesetzt wird. Der
Prozess fährt
dann bei einem Schritt S300 fort, worin eine Festlegung gemacht
wird, ob „Hat-Anschluss-X" („HasTerminalX") zu 1 gesetzt wurde.
Wenn dies so ist, fährt
der Prozess bei einem Schritt S400 fort, worin eine neue Identifikation
(ID) allen horizontal verbundenen Flecken zugewiesen wird. Wenn
nicht, fährt
der Prozess bei einem Schritt S500 fort, worin eine Festlegung gemacht
wird, ob die x-Verbindung (xlink) größer als Null ist. Wenn dies
so ist, fährt
der Prozess bei einem Schritt S600 fort. Im Schritt S600 wird das
y-Verbindungsfeld (ylink field) aus der Scantabelle erneuert und
zu der vorangegangenen Zeile gefolgt. Der Prozess schreitet dann
zu einem Schritt S700 fort, worin die y-Verbindung von dazwischenkommenden
Zeilen gefolgt wird, bis die unterste Zeile erreicht wird, von wo
aus die temporäre
Fleckidentifikation erneuert wird. Der Prozess fährt dann zu einem Schritt S800
fort, worin das Fleckidentifikationsbild durch die temporäre Fleckidentifikation
anstelle der Scantabellenfleckidentifikation ausgetauscht wird.
Der Prozess fährt
zu einem Schritt S900 fort, worin der temporäre Fleckidentifikationseintrag
aktualisiert wird, um die zusätzlichen
Bildpunkte wiederzugeben, die dem Fleck aus der aktuellen Scanzeile hinzugefügt wurden.
In einem Schritt S1000 wird die temporäre Flecktabelle bewertet, um
zu sehen, ob irgendwelche Flecke geschlossen werden können. Wenn
dies so ist, werden die temporären
Fleckidentifikationseinträge
normalisiert, indem ihre Farbsummen durch den Pixelzähler in
einem Schritt S1100 normalisiert werden. Dieser Prozess macht bei
einem Schritt S1200 weiter, worin der temporäre Fleckeintrag in die GTB
kopiert wird. In einem Schritt S1300 wird die temporäre Fleckidentifikation
initialisiert und an die temporäre
Fleckidentifikationstabelle zur weiteren Verwendung zurückgegeben.
Der Prozess fährt zu
einem Schritt S1400 fort, worin eine Festlegung gemacht wird, ob
die vorliegende Scanzeile die letzte Scanzeile ist. Wenn nicht,
springt der Prozess zurück zum
Schritt S100. Wenn dies so ist, endet der Prozess.
-
15 ist
ein Flussdiagramm, das weitere Details des Schritts S200 aus 13 umreißt. Der Prozess
beginnt in einem Schritt S210, in welchem die Markierung „Hat-Anschluss-X" („HasTerminalX") zu Null gesetzt
wird. Dieser Prozess schreitet dann zu einem Schritt S215 fort,
worin der nächste
Fleckeintrag in der Scantabelle ausgewählt wird. In einem Schritt
S220 wird eine Festlegung gemacht, ob die x-Verbindung (xlink) gleich
Null ist. Wenn dies so ist, fährt
der Prozess zu einem Schritt S240 fort, worin die aktuelle Umsetzungstabelle
zu Null gesetzt wird. Wenn nicht, wird einem Schritt S225 eine Festlegung gemacht,
ob die y-Verbindung (ylink) gleich Null ist. Wenn nicht, wird der
aktuelle Eintrag aus der Umsetzungstabelle der darunterliegenden
Zeile in das y-Verbindungsfeld kopiert. Wenn die y-Verbindung im Schritt
S225 nicht gleich Null ist, dann wird in einem Schritt S230 eine
Festlegung gemacht, ob die x-Verbindung gleich dem aktuellen Fleckeintrag
ist. Wenn nicht, fährt
der Prozess zu einem Schritt S250 fort, worin die aktuelle Umsetzungstabelle
zu Null gesetzt wird und „Hat-Anschluss-X" („HasTerminalX") zu Eins gesetzt
wird. Wenn die x-Verbindung
nicht dem aktuellen Flecktabelleneintrag in Schritt S230 gleich
ist, dann wird eine neue Identifikation (ID) in einem Schritt S235
zugewiesen. Der Prozess fährt
bei einem Schritt S255 fort, worin eine Festlegung gemacht wird,
ob der Eintrag der letzte Fleckeintrag in der Scantabelle ist. Wenn
nicht, springt der Prozess zurück
zum Schritt S215. Wenn dies so ist, endet der Prozess in einem Schritt
S260.
-
16 ist
ein Flussdiagramm, das weiter Details des Schrittes S100 aus 13 umreißt. Der Prozess
beginnt in einem Schritt S110, worin der nächste Scantabelleneintrag ausgewählt wird.
Der Prozess fährt
zu einem Schritt S215 fort, worin die x-Verbindung und y-Verbindung
in der Scantabelle nachgeschlagen werden. In einem Schritt S120
wird eine Festlegung gemacht, ob die x-Verbindung gleich Null ist.
Wenn nicht, fährt
der Prozess bei einem Schritt S125 fort, worin eine Festlegung gemacht wird,
ob die y-Verbindung gleich Null ist. Wenn dies so ist, fährt der
Prozess bei einem Schritt S130 fort, worin eine Festlegung gemacht
wird, ob der Umsetzungstabelleneintrag gleich Null ist. Wenn dies
so ist, wird eine neue Identifikation von den Identifikationsstapel
zugewiesen. Dieser Prozess fährt
dann zu einem Schritt S140 fort, worin der x-Verbindung zu dem nächsten Fleckeintrag
gefolgt wird. In einem Schritt S145 wird die gleiche neue Identifikation
dem Fleckeintrag zugewiesen. In einem Schritt S150 wird eine Festlegung
gemacht, ob die letzte x-Verbindung bewertet wurde. Wenn nicht,
springt der Prozess zum Schritt S140, worin der x-Verbindung zu
dem nächsten
Fleckeintrag gefolgt wird. Wenn dies so ist, fährt der Prozess zu einem Schritt
S155 fort, worin eine Festlegung gemacht wird, ob der letzte Scantabelleneintrag
bewertet wurde. Wenn nicht, springt der Prozess zum Schritt S110,
worin der nächste
Scantabelleneintrag ausgewählt
wird. Wenn der letzte Scantabelleneintrag bewertet wurde, endet
der Prozess in einem Schritt S160.