-
Gebiet der
Erfindung
-
Die
vorliegende Erfindung bezieht sich auf die Erzeugung computergenerierter
Bilder sowohl in der Form von Stehbildern als auch einer Videoabbildung,
und insbesondere auf ein Verfahren, eine Vorrichtung und ein System
zur Erzeugung eines durch die Zusammensetzung einer Vielzahl von
Komponenten aufgebauten Bildes.
-
Hintergrund
-
Computergenerierte
Bilder bestehen typischerweise aus vielen verschiedenen Komponenten
oder Graphikelementen, die zur Erzeugung eines endgültigen Bildes
gerendert und zusammengesetzt werden. Bisher wurde allgemein ein „Opazitätskanal
(der auch als „Matt"-, „Alphakanal" oder einfach als „Opazität" bekannt ist) verwendet.
Der Opazitätskanal
beinhaltet Informationen hinsichtlich der Durchlässigkeit jedes Elements. Der
Opazitätskanal
ist zusammen mit jeder Einheit einer Farbe gespeichert, sodass beispielsweise
ein Bildelement basiertes Bild mit Opazität einen Opazitätswert als
Teil der Darstellung jedes Bildelementes speichert. Ein Element
ohne explizite Opazitätskanalinformationen
wird typischerweise als vollständig
undurchlässig
innerhalb definierter Grenzen des Elements verstanden, und von ihm
wird angenommen, dass es außerhalb
dieser Grenzen vollständig
transparent ist.
-
Ein
Ausdrucksbaum bietet ein systematisches Mittel oder eine systematische
Darstellung zum Rendern von Objekten oder Elementen eines Bildes.
Ausdrucksbäume
umfassen eine Vielzahl von Knoten einschließlich Blattknoten, inneren
Knoten und eines Wurzelknotens. Ein Blattknoten, der einen äußersten Knoten eines
Baums darstellt, hat keine Nachkommenknoten und besteht aus einem
oder mehreren Graphikelementen. Ein innerer Knoten verzweigt typischerweise
in linke und rechte Unterbäume,
wobei jeder Unterbaum selbst ein Ausdrucksbaum mit zumindest einem
Blattknoten ist. Die inneren Knoten eines Ausdruckbaums sind Zusammensetzungsoperatoren,
die den linken und rechten Unterbaum als Operanden des Operators
behandeln. Der erste Knoten des Ausdrucksbaums wird allgemein als
Wurzelknoten bezeichnet. Der Wurzelknoten eines Ausdrucksbaums stellt
das endgültige
Bild dar, und jeder Knoten des Baums stellt einen Teil des endgültigen Bildes
dar.
-
Obwohl
ein Graphikelement selbst eine bestimmte Größe haben kann, muss es im endgültigen Bild nicht
unbedingt vollständig
sichtbar sein, oder es kann sich lediglich ein Teil des Elements
auf das endgültige Bild
auswirken. Beispielsweise wird angenommen, dass ein Bild einer bestimmten
Größe auf einer
Anzeigeeinrichtung anzuzeigen ist. Ist aber das Bild derart positioniert,
dass lediglich die obere linke Ecke des Bildes von der Anzeigeeinrichtung
angezeigt wird, wird der Rest des Bildes nicht angezeigt. Das endgültige Bild
wie auf der Anzeigeeinrichtung angezeigt umfasst somit den sichtbaren
Abschnitt des Bildes, und der unsichtbare Abschnitt muss in diesem
Fall nicht gerendert werden.
-
Ein
anderer Fall, in dem lediglich ein Abschnitt eines Elements eine
Auswirkung haben kann, ist dann gegeben, wenn der Abschnitt durch
ein anderes Element verdeckt wird. Beispielsweise kann ein anzuzeigendes
(oder zu Renderndes) endgültiges
Bild ein oder mehrere undurchlässige
Graphikelemente umfassen, von denen einige andere Graphikelemente
verdecken. Daher haben die verdeckten Elemente keine Auswirkung auf
das endgültige
Bild.
-
Kann
ein Element, oder Teile eines Elements, die keine Auswirkung auf
das endgültige
Bild haben, identifiziert werden, müssen diese Elemente (oder Teile)
nicht gerendert werden, wodurch erheblich Zeit und möglicherweise
Speicherplatz eingespart wird.
-
Die
am 31. Januar 1996 veröffentlichte
Europäische
Patentanmeldung mit der Veröffentlichungsnummer
EP 0 694 881 A2 (Europäische Patentanmeldung
Nr. 95305144.8) von Canon Kabushiki Kaisha und Canon Information
Systems Research Australia Pty Ltd) beschreibt ein System, ein Verfahren
und eine Sprache zur Zusammensetzung oder Erzeugung von Bildern.
Die Bilder umfassen typischerweise eine Vielzahl von Graphikelementen,
die jeweils Farb- und Opazitätsinformationen
enthalten. Das System verwendet Operatoren, die die Graphikelemente
aufweisen, und Operanden, wobei die Operatoren die Operanden entsprechend einer
durch die Operatoren definierten Funktion, den Farbinformationen
und Opazitätsinformationen
zur Erzeugung neuer Graphikelemente kombinieren. Ein Teil des Systems
beinhaltet die Interpretation der Parsingsprache und die Ausführung einer
Folge von Aussagen und die Bildung eines Ausdrucksbaums, dessen
Knoten ein Graphikelement umfassen. Anweisungen werden dann anhand
des Baums erhalten. Ein anderer Teil erlaubt die Zusammensetzung
undurchlässiger
Graphikelemente und zugehöriger
Abschneidoperationen. Bounding-Box-Verfahren werden zum Lokalisieren
aktiver Bereiche der Graphikelemente aus den Knoten verwendet.
-
Die
EP 0 694 881 A2 offenbart
ein Verfahren und eine Vorrichtung zum Optimieren eines Ausdrucksbaums.
Der Ausdrucksbaum gemäß der
EP 0 694 881 A2 dient
der Zusammensetzung eines Bildes und umfasst zumindest drei Knoten.
Jeder Knoten des Baums ist entweder ein Graphikelement oder ein
Graphikoperator und weist eine durch den Knoten dargestellte Region
des Bildes auf. Das Verfahren der
EP 0 694 881 A2 umfasst für zumindest einen Graphikoperatorknoten
im Baum die Schritte des Vergleichs einer ersten Region, die aus
Operanden des Operatorknotens hergeleitet wird, mit einer Region,
die von einem anderen Operanden des Operatorknotens hergeleitet
wird, die Bestimmung, ob die erste Region die zweite Region total
oder teilweise verdeckt, und die Modifikation des Ausdrucksbaums,
wenn die erste Region die zweite Region ganz oder teilweise verdeckt.
-
Aus
dem Verfahren des Standes der Technik ergeben sich zumindest für Bilder
Probleme, in denen eine Überlappung
auftritt, weil diese Verfahren mit transparenten Graphikobjekten
nicht leicht fertig werden, und auch nicht den vollständigen Bereich
von Zusammensetzungsoperatoren behandeln. Daher soll zumindest eines
dieser Probleme vermindert werden.
-
Kurzzusammenfassung
-
Gemäß einer
Ausgestaltung der Erfindung ist ein Verfahren zur Optimierung eines
Ausdrucksbaums ausgebildet, der zum Zusammensetzen eines Bildes
dient und zumindest drei Knoten umfasst, wobei jeder Knoten des
Baums zumindest entweder ein eine Bildregion definierendes Graphikelement
oder ein Graphikoperator ist, wobei das Verfahren für zumindest
einen Knoten im Baum die Schritte umfasst
Vergleichen einer
ersten Region des Knotens mit einer zweiten Region, die von zumindest
einem anderen Knoten irgendwo im Ausdrucksbaum erhalten wird,
Bestimmen,
ob die erste Region durch die zweite Region ganz oder teilweise
verborgen ist, und
Modifizieren des Ausdrucksbaums, wenn die
erste Region zumindest teilweise oder ganz durch die zweite Region
verborgen ist, um einen optimierten Ausdrucksbaum zum Zusammensetzen
des gleichen Bildes auszubilden, wobei ein optimierter Teil des
Ausdrucksbaums im wesentlichen nicht-verborgene Abschnitte der ersten Region
darstellt.
-
Gemäß einer
anderen Ausgestaltung der Erfindung ist eine Vorrichtung zur Optimierung
eines Ausdrucksbaums ausgestaltet, der zum Zusammensetzen eines
Bildes dient und zumindest drei Knoten umfasst, wobei jeder Knoten
des Baums zumindest entweder ein eine Bildregion definierendes Graphikelement
oder ein Graphikoperator ist, mit
einer Einrichtung zum Vergleichen
einer ersten Region des Knotens mit einer zweiten Region, die von
zumindest einem anderen Knoten irgendwo im Ausdrucksbaums erhalten
wird,
einer Einrichtung zum Bestimmen, ob die erste Region
durch die zweite Region ganz oder teilweise verborgen ist, und
einer
Einrichtung zum Modifizieren des Ausdrucksbaums, wenn die erste
Region zumindest teilweise oder ganz durch die zweite Region verborgen
ist, um den optimierten Ausdrucksbaum zum Zusammensetzen des gleichen
Bildes auszubilden, wobei ein optimierter Teil des Ausdrucksbaums
im wesentlichen nicht-verborgene Abschnitte
der ersten Region darstellt.
-
Kurzbeschreibung
der Zeichnung
-
Nachstehend
wird ein bevorzugtes Ausführungsbeispiel
der Erfindung unter Bezugnahme auf die beiliegende Zeichnung und
den Anhang näher
beschrieben. Es zeigen:
-
1 eine
schematische Darstellung verschiedener Zusammensetzungsoperationen,
-
2A bis 2D ein
Beispiel der Anwendung eines Abschneideoperators gemäß einem
Ausführungsbeispiel
der Erfindung,
-
3 ein
Beispiel eines aus einfachen Graphikobjekten bestehenden gerenderten
Bildes,
-
4 einen
Bildausdrucksbaum, der die Zusammensetzung der einfachen Graphikobjekte
zum Zusammensetzen oder Rendern des Bildes in 3 darstellt,
-
5 einen
vereinfachten Bildausdrucksbaum des Bildausdrucksbaums in 4 gemäß einem
Ausführungsbeispiel
der Erfindung,
-
6 ein
weiteres Beispiel eines aus einfachen Graphikobjekten bestehenden
gerenderten Bildes,
-
7 einen
Bildausdrucksbaum, der die Zusammensetzung der Graphikobjekte zum
Zusammensetzen oder Rendern des Bildes in 6 darstellt,
-
8 einen
vereinfachten Ausdrucksbaum zum Zusammensetzen des Bildes in 6 gemäß dem Ausführungsbeispiel
der Erfindung,
-
9 ein
abstraktes Ablaufdiagramm, das einen Überblick über den erfindungsgemäßen Vorgang
der Optimierung eines Ausdrucksbaums liefert, der zum Zusammensetzen
eines Bildes verwendet wird,
-
10 ein
ausführliches
Ablaufdiagramm der Modifikation des Ausdrucksbaums gemäß Schritt 912 in 9,
-
11 ein
weiteres ausführliches
Ablaufdiagramm zur Optimierung des Ausdrucksbaums, und
-
12 ein
Blockschaltbild eines herkömmlichen
Universalcomputers, der zum Implementieren der Ausführungsbeispiele
der Erfindung verwendet werden kann.
-
Der
Anhang umfasst Pseudo-Code-Routinen, die für eine Computerimplementierung
des bevorzugten Ausführungsbeispiels
geeignet sind.
-
Ausführliche Beschreibung
-
In
der folgenden Beschreibung des bevorzugten Ausführungsbeispiels wird angenommen,
dass ein Bildzusammensetzungsausdrucksbaum, wie er hier beschrieben
wird, für
ein zu renderndes Bild bestimmt wurde.
-
Vorzugsweise
sind Bildregionsdarstellungen hierarchische Datenstrukturen, die
zur Darstellung einer Region oder eines Abschnitts eines Bildes
geeignet sind, und typischerweise bei der Bildverarbeitung verwendet
werden. Eine derartige Bildregionsdarstellung ist dem Fachmann als „Quadtree" bekannt. Andere
Formen der Bildregionsdarstellungen können auch zweckmäßig sein.
Der Einfachheit halber wird eine Bildregionsdarstellung nachstehend
als Quadtree bezeichnet.
-
Typischerweise
erfordert die Erzeugung eines Quadtree, der eine Region eines Bildes
darstellt, die Unterteilung der Region in eine Vielzahl von Zellen,
wobei jede Zelle ein Teil der Region ist, und jede Zelle durch einen
Knoten des Quadtree dargestellt wird. Daher erhöht die Erhöhung der Anzahl von Unterteilungen einer
Region eines Bildes entsprechend die Anzahl von Knoten des Quadtree,
wodurch sich die Tiefe des Quadtree und die Auflösung der durch den Quadtree
dargestellten Region erhöht.
-
ZUSAMMENSETZUNGSOPERATIONEN
-
Zusammensetzungsoperationen
enthalten 13 Hauptzusammensetzungsoperationen zum Zusammensetzen
von zwei Abschnitten eines einzelnen Bildes. Die Funktion jeder
dieser Zusammensetzungsoperationen ist in Tabelle 1 aufgeführt, wobei
Dc ein vormultipliziertes Ziel oder eine resultierende Farbe ist,
Do ein Ziel oder ein resultierender Alpha-(α)Kanalwert ist, Ac eine vormultiplizierte
Elementfarbe eines ersten Abschnitts einer ersten Quelle A ist,
Ao ein α-Wert
ist, der dem Bildelement mit der Farbe Ac entspricht, Bc ein vormultiplizierter
Bildelementfarbwert eines Abschnitts eines Bildes einer zweiten
Quelle B ist, und Bo der α-Kanalwert
des Bildelements ist, das Bc der Quelle B entspricht.
-
Tabelle
1: Zusammensetzungsoperationen
-
Tabelle
1 zeigt insbesondere verschiedene Zusammensetzungsverfahren zum
Zusammensetzen von zwei verschiedenen Bildern unter Verwendung verschiedener
Operatoren. Es sind auch zusätzliche
Operatoren möglich.
Die zusätzlichen
Operatoren können
zum Implementieren von Spezialeffekten verwendet werden.
-
Die „wrap around"-Eigenschaft des „plusW"-Operators bedeutet,
dass, wenn beispielsweise die Addition von Ac + Bc größer als
ein maximaler Wert einer Farbkomponente ist, der Wert „herumgewickelt" wird, um erneut
unter Bezugnahme auf den minimalen Wert im Farbraum zu beginnen.
Alternativ dazu beinhaltet der Vorgang „clamping", der von „plusC" verwendet wird, eine abschneidende
bzw. begrenzende Addition beispielsweise von Ac + Bc auf einen maximalen
Wert einer Farbkomponente, wenn die Addition größer als diese Komponente ist.
-
1 zeigt
verschiedene Beispiele des endgültigen
Bildes, das erzeugt wird, wenn verschiedene Operationen (wie sie
in Tabelle 1 aufgeführt
sind) bei der Zusammensetzung von zwei vollständig undurchlässigen Kreisen
A und B verwendet werden. Die Operatoren „rover", „rin", „rout" und „ratop" sind dem Vertauschen
der Operanden gemäß dem „r" (Umkehr-)Operator
und Anwenden des entsprechenden Operators „over" („über"), „in", „out" („außerhalb") und „atop" („zu Oberst") jeweils äquivalent.
-
Bei
dem bevorzugten Ausführungsbeispiel
kann ein Ausdrucksbaum eine Vielfalt von Knotentypen enthalten,
die binäre
Zusammensetzungsoperatoren, unäre
Operatoren und Primitive beinhalten. Unäre Operatoren enthalten typischerweise
Farbtransformationen, Bildfaltungen, affine Transformationen und
eine Bildverbindung. Primitive beinhalten typischerweise Graphikelemente,
wie Bildelement-basierte Bilder, splinebasierte Wege, Text, „all" („all" ist ein Graphikelement,
das die Größe des gesamten
erzeugten Bildes überspannt),
Kantenmischungen, Boxen oder dergleichen.
-
BINÄRE ZUSAMMENSETZUNGSOPERATOREN
-
Tabelle
2 listet einen Satz binärer
Zusammensetzungsoperatoren und die durchzuführende Aktion auf, wenn diese
Operatoren bei der Vereinfachung eines Ausdrucksbaums behandelt
werden.
-
-
Bei
einem Knoten eines Ausdrucksbaums, der durch einen Operator dargestellt
wird, wird typischerweise während
des Vorgangs der Vereinfachung des Ausdrucksbaums jedem Operanden
eine Regionsdarstellung, wie ein Quadtree, übergeben. An dem den Operator
vergleichenden Knoten muss ein Vorgang dahingehend ausgeführt werden,
ob ein vom Knoten verzweigender Unterbaum verschwindet (das heißt, Zweige müssen nicht
beschnitten werden), oder ein den verdeckten Abschnitten der Graphikelemente
entsprechender Quadtree von diesem Knoten für eine mögliche weitere Verarbeitung
an andere Knoten zurückzugeben
ist.
-
In
Tabelle 2 wird folgende Notation verwendet:
q0: der dem Knoten übergebene
Quadtree,
qL, qR: der von dem linken und rechten Unterbaum
entsprechend dem linken und rechten Operanden eines Operators aus
Tabelle 2 zurückgegebene
Quadtree,
eingestellte Quadtree-Operation
und
B(Knoten): ein Quadtree, der vollständig die Bounding-Box des Knotens
enthält.
-
In
den letzten zwei Spalten in Tabelle 2 sind typische Ersetzungsregeln
spezifiziert, wobei „L" bedeutet, dass ein
aktueller Knoten durch den linken Unterbaum zu ersetzen ist, der
vom aktuellen Knoten verzweigt, „R" bedeutet, dass ein aktueller Knoten
durch den rechten Unterbaum zu ersetzen ist, der vom aktuellen Knoten
verzweigt, und „V" bedeutet, dass der
aktuelle Knoten verschwindet. Ein Knoten, der „verschwindet", lässt darauf
schließen,
dass die durch den Knoten dargestellte Region des Bildes durch andere
Graphikelemente verborgen wird. Der Knoten hat daher keine Auswirkung
auf das endgültige
Bild. Verschwinden beide Operanden, verschwindet auch der aktuelle
Knoten.
-
Für die in
Tabelle 2 beschriebenen Operatoren können Umkehroperatoren eingesetzt
werden. Der als „A
over B" beschriebene „Over"-Operator gibt an,
dass das Graphikelement „A" über dem Graphikelement „B" liegt. Dies kann
durch einen Umkehroperator des „Over"-Operators ersetzt werden, der typischerweise
mit „rover" (umgekehrtes über) bezeichnet
wird, sodass „B
rover A" in einer
Zusammensetzung der Graphikelemente „A" und „B" äquivalent
zu „A
over B" resultiert.
-
BEISPIELE BINÄRER ZUSAMMENSETZUNGSOPERATOREN
-
Als
Beispiel wird der (erste) Operator in der ersten Reihe der „Operator"-Spalte in Tabelle
2 (das heißt, der „Over"-Operator) betrachtet. An einem aktuellen
Knoten eines Ausdrucksbaums, der durch einen „Over"-Operator dargestellt wird, übergibt
ein Elternknoten dem aktuellen Knoten einen Quadtree q0. Den Vorgang
unter der Überschrift „dem linken
Operanden übergeben" (Spalte 2 in Tabelle
2) folgend wird der Quadtree q0 dem linken Operanden übergeben,
der der linke Unterbaum oder Zweig am aktuellen Knoten ist.
-
Der
Quadtree q0 wird zur Verarbeitung des linken Operanden verwendet,
und ein Quadtree qL wird als verbergender Bereich des linken Operanden
zurückgegeben.
Wegen „dem
rechten Operanden übergeben" (Spalte 3 in Tabelle
2) ist die am aktuellen Knoten auszuführende Aktion die Übergabe
einer Vereinigung des Elternknotens, des Quadtree q0, und des nun
zurückgegebenen
Quadtree qL des linken Operanden als rechten Operanden. Der sich
aus dieser Vereinigung (q0 ∪ qL)
ergebene Quadtree wird zur Verarbeitung des rechten Operanden verwendet.
Ein Quadtree qR wird dem aktuellen Knoten als verbergender Bereich
des rechten Operanden zurückgegeben.
Der aktuelle Knoten gibt dann die Vereinigung (qL ∪ qR) des
linken Operanden qL und des rechten Operanden qR dem Elternknoten
zurück
(4 „Rückgabe" in Spalte 4 der
Tabelle 2).
-
Geht
hervor, dass die durch den linken Operanden dargestellte Region
vom Quadtree q0 vollständig verborgen
ist, der dem linken Operanden übergeben
wird, besteht der Vorgang „wenn
linker Operand verschwindet" in
Spalte 5 in Tabelle 2 in dem Ersetzen des aktuellen Knotens durch
den rechten („R") Unterbaum beziehungsweise
den rechten Operanden. Dies ist erwünscht, da die Änderung
des Baums durch Ersetzen des aktuellen Knotens durch seinen rechten
Operanden das gerenderte Bild nicht ändert, jedoch die zum Rendern
des Bildes erforderlich Zeit verbessert. Ergibt sich, dass die durch
den rechten Operanden dargestellte Region vollständig vom Quadtree (q0 ∪ qL) verborgen
ist, der dem rechten Operanden übergeben
wird, besteht der Vorgang „wenn
rechter Operand verschwindet" in
Spalte 6 in Tabelle 2 im Ersetzen des aktuellen Knotens durch den
linken („L") Unterbaum.
-
UNÄRE OPERATOREN
-
Die
Behandlung unärer
Operatoren bei der Vereinfachung des Ausdrucksbaums hängt vom
Typ der Operation ab:
- (a) Bei einer Farbtransformation
wird der Quadtree q0 dem Operanden des Farbtransformationsoperators übergeben.
Bewahrt die Transformation die Undurchsichtigkeit (das heißt, undurchsichtige
Bildelemente bleiben nach der Transformation undurchsichtig), wird
der vom Operanden zurückgegebene
Quadtree vom unären
Operator zurückgegeben.
Das heißt,
der Operand verbirgt das, was das Ergebnis der Farbtransformation
verbirgt. Bewahrt die Transformation die Undurchsichtigkeit nicht,
gibt der unäre
Operator einen leeren Quadtree zurück, da die Region, die die
unäre Operation
verbirgt, nicht bestimmt werden kann. Verschwindet der Operand,
verschwindet der unäre
Operator, wenn die Unsichtbarkeit (Null-Opazität) nicht bewahrt wird. Wird
die Unsichtbarkeit nicht bewahrt, wird der Unterbaum mit dem unären Operator
als Wurzel durch ein geeignetes „All"-Graphikelement ersetzt.
- (b) Affine Transformationen und Verbindungen bewahren die Geometrie
zwischen dem Quadtree und den Primitiven nicht. Wird der unäre Operator
durch den Quadtree q0 verborgen, verschwindet er. Ansonsten wird
der Durchlauf am Operanden der affinen Transformation oder des Bildverbindungsoperators
neu gestartet, wobei ein leerer Quadtree als verbergende Region
durchlaufen wird. Ein leerer Quadtree wird zum Operator zurückgegeben,
wenn der durch einen Operanden zurückgegebene Quadtree nicht leicht
transformiert werden kann.
- (c) Bildfaltung: Wird der unäre
Operator durch den Quadtree q0 verborgen, verschwindet er. Ansonsten
wird der Durchlauf am Operanden der Bildfaltung neu gestartet, wobei
ein leerer Quadtree als verbergender Bereich durchlaufen wird. Ein
leerer Quadtree wird durch einen solchen Operator zurückgegeben,
da das vom Operator bewirkte Verwischen die Verwendung eines durch
seinen Operanden zurückgegebenen
Quadtree schwierig macht. Ändert
der Bildfaltungsoperator allerdings die Opazität nicht, kann der vom Operanden des
Operators zurückgegebene
Quadtree wiederum vom Operator der Bildfaltung zu seinem Elternknoten zurückgegeben
werden.
-
OPTIMIERUNG
DES AUSDRUCKSBAUMS
-
Bei
dem bevorzugten Ausführungsbeispiel
wird ein Bildzusammensetzungsausdrucksbaum (der nachstehend als „Ausdrucksbaum" bezeichnet wird)
eines zu rendernden Bildes durchlaufen, vorzugsweise zuerst in einer
Tiefenrichtung. Jeder Knoten des Ausdrucksbaums erhält von seinem
Elternknoten eine Regionsdarstellung eines oder mehrerer Bereiche
jedes Bildes. Die Regionsdarstellung wird mit der am Knoten dargestellten
Region zur Bestimmung verglichen, ob die von diesem Knoten dargestellte
Region verborgen ist.
-
Ein
Knoten, bei dem die durch den Knoten dargestellte Region vollständig verborgen
ist, wird aus dem Ausdrucksbaum mit einer geeigneten Vereinfachung
des Ausdrucksbaums wie nachstehend beschrieben entfernt. Ist die
durch den Knoten dargestellte Region lediglich teilweise verborgen,
wird ein Abschneideoperator bei der durch den Knoten dargestellten
Region zum Abschneiden der am Knoten dargestellte Region des Bildes
zum Verwerfen der verborgenen Abschnitte des Bildes angewendet.
Ist beispielsweise die durch einen Knoten dargestellte Region durch
eine oder mehrere durch andere Knoten des Ausdrucksbaums dargestellte Regionen
vollständig
verborgen, wird der Knoten aus dem Ausdrucksbaum derart entfernt,
dass eine Graphikoperation oder ein Graphikelement an dem Knoten
nicht ausgeführt
oder gerendert werden muss, was auch immer der Fall ist.
-
Ist
ein Knoten teilweise durch eine oder mehrere durch andere Knoten
im Ausdrucksbaum dargestellte Regionen verborgen, wird ein Abschneideoperator
bei dem Knoten derart angewendet, dass bei der Ausführung eines
Zusammensetzungsoperators im wesentlichen nicht-verborgene Regionen
des Bildes, die am Knoten dargestellt werden, sich in der resultierenden
Zusammensetzung der Region des Knotens befinden. Wird ein Bild aus
einem Ausdrucksbaum zusammengesetzt und danach gerendert, der durch
einen Abschneideoperator abgeschnittene Knoten enthält, werden
im wesentlichen solche Abschnitte der Graphikelemente wiedergegeben
oder gerendert, die von anderen Graphikelementen des Bildes nicht
verborgen sind.
-
Die
Anwendung eines Abschneideoperators bei einem Knoten kann in der
einfachsten Form im Abschneiden der an den Nachkommenknoten dargestellten
Graphikelemente auf im wesentlichen solche Abschnitte der Graphikelemente
resultieren, die nicht verborgen sind. Allerdings ist die Anwendung
eines Abschneideoperators bei einem Knoten nicht darauf beschränkt. Die
Anwendung eines Abschneideoperators bei einem Knoten eines Ausdrucksbaums
mit einer Zusammensetzungsoperation an dem Knoten kann in einer unterschiedlichen
Kombination von Zusammensetzungsoperatoren resultieren, was eine
Auswirkung auf den Knoten haben kann, als ob die dargestellte Region
bis auf ihren nicht-verborgenen Abschnitt abgeschnitten ist.
-
Der
Vorgang der Zusammensetzung eines in 2A gezeigten
Ausdrucksbaums 101 wird nun unter Bezugnahme auf die 2B bis 2D beschrieben.
Wie es in 2B gezeigt ist, wird ein Pfeil 102 im
Uhrzeigersinn um 30° gedreht,
und der „In"- Operator wird in Verbindung mit einer
undurchsichtigen Box 104 ausgeführt, damit ein Abschnitt des
gedrehten Pfeils erhalten wird, der in der Box 104 liegt.
Dies kann durch die Anwendung eines Abschneideoperators bei dem
im Uhrzeigersinn um 30° gedrehten
Pfeil zum Abschneiden des gedrehten Pfeils bis auf die Grenzen der
Box 104 bewirkt werden.
-
Alternativ
dazu kann wie in 2C gezeigt die Anwendung einer
anderen Kombination von Operatoren im wesentlichen das gleiche Endbildergebnis 105 liefern.
Die Box 104 wird gegen den Uhrzeigersinn um 30° gedreht,
und der Pfeil 102 wird auf die Box 104 zugeschnitten.
Das resultierende Bild 107 wird um 30° im Uhrzeigersinn gedreht, um
das Bildendergebnis 105 zu erhalten. Wie in 2D gezeigt,
ergibt dies aber nicht das Gleiche wie das Zuschneiden des Pfeils 102 auf
die Box 104 und dann Anwenden einer Drehung um 30° im Uhrzeigersinn,
um ein endgültiges
zusammengesetztes Bild 106 zu erhalten. Auf diese Weise
kann die Anwendung eines Abschneideoperators aus einem Knoten eine
unterschiedliche Kombination von Zusammensetzungsoperatoren ergeben.
-
Wurde
eine durch einen Knoten dargestellte Region des Bildes als nicht-verborgen
oder lediglich teilweise verborgen bestimmt, übergibt der Knoten die Regionsdarstellung,
die der Knoten von einem Elternknoten erhalten hat, wiederum jedem
seiner Nachkommenknoten. Der gleiche Vorgang geschieht an jedem
Nachkommenknoten mit dem Effekt, dass jeder Nachkommenknoten seinem
Elternknoten entweder eine Bilddarstellung der Bereiche des Bildes,
die durch die am Nachkommenknoten dargestellte Region verborgen
sind, oder eine Anzeige zurückgibt,
dass der Nachkommenknoten vollständig
verborgen ist.
-
Wurden
die Nachkommen eines Knotens verarbeitet, werden die von dem Nachkommen
zurückgegebenen
Regionsdarstellungen zum Herleiten einer Regionsdarstellung der
Regionen des Bildes verwendet, die von dem Knoten verborgen sind.
Dieses Ergebnis wird dem Elternknoten des Knotens zurückgegeben.
-
Bei
dem bevorzugten Ausführungsbeispiel
wird der Durchlauf des Ausdrucksbaums zum Vereinfachen des Baums
an der Wurzel des Baums immer in der Tiefenrichtung zuerst initiiert,
was dem Fachmann bekannt ist. Vorzugsweise wird beim Durchlaufen
eines Ausdruckbaums in der Tiefenrichtung zuerst dem zum linken Zweig
führenden
Weg an jedem Knoten Priorität
gegeben, und dieser Weg den Baum hinunter zu einem Nachkommenknoten
wird zuerst genommen. Sind keine weiteren linken Zweigwege an einem
aktuellen Knoten vorhanden, kehrt die Verarbeitung zu dem vorhergehenden
Knoten zurück,
und ein Weg einen rechten Zweig dieses Knotens hinunter wird genommen.
Ein Ausdrucksbaum wird auf diese Weise durchlaufen, bis alle Knoten des
Ausdruckbaums besucht wurden.
-
ABLAUFDIAGRAMME ZUR OPTIMIERUNG
EINES AUSDRUCKSBAUMS
-
9 zeigt
ein abstraktes Ablaufdiagramm, das eine Übersicht über den Vorgang der Optimierung
eines Ausdrucksbaums 902 gemäß dem bevorzugten Ausführungsbeispiel
liefert, der zum Zusammensetzen eines Bildes verwendet wird. Der
Ausdrucksbaums 902 enthält
zumindest zwei Knoten, und jeder Knoten ist entweder ein Graphikelement
oder Graphikoperator. Vorzugsweise sind die Graphikoperatoren Bildzusammensetzungsoperatoren.
Des weiteren wird eine Region des Bildes durch den Knoten dargestellt.
Der Ausdrucksbaum 902 kann von Knoten zu Knoten durchlaufen
werden. Ein Steuerblock 904 hat vorzugsweise eine Schleifensteuerstruktur
zur Verarbeitung jedes Knotens des Ausdrucksbaums 902,
der als Eingangssignal zugeführt wird.
Wurde der gesamte Ausdrucksbaum 902 verarbeitet (was durch „fertig" angegeben wird),
endet die Verarbeitung in Schritt 914. Ansonsten wird die
Verarbeitung in Schritt 906 fortgesetzt.
-
In
Schritt 906 wird einer der verbleibenden Knoten als aktueller
Knoten ausgewählt.
In Schritt 908 wird die durch den Knoten dargestellte Region
mit einer Regionsdarstellungsdatenstruktur verglichen, die einer oder
mehreren Regionen entspricht, die durch zumindest einen weiteren
Knoten dargestellt werden. Die Regionsdarstellung hat vorzugsweise
die Form einer hierarchischen Datenstruktur, und kann eine Quadtree-Darstellung
sein. Im Endscheidungsblock 910 wird überprüft, ob die durch den Knoten
dargestellte Region durch eine der Regionen entweder ganz oder teilweise
verborgen wird. Gibt der Endscheidungsblock 910 falsch (nein)
zurück,
wird die Verarbeitung am Steuerschritt 904 fortgesetzt.
Ansonsten wird die Verarbeitung in Schritt 912 fortgesetzt,
wenn der Endscheidungsblock 910 wahr (ja) zurückgibt.
In Schritt 912 wird der Ausdrucksbaum modifiziert. Die
Modifizierung kann die Entfernung des aktuellen Knotens oder das
Ersetzen des aktuellen Knotens durch einen anderen Knoten des Ausdrucksbaums
beinhalten. Sie kann ferner ein Abschneiden oder ein späteres Abschneiden
der durch den aktuellen Knoten dargestellten Region enthalten. Die Verarbeitung
wird dann im Steuerschritt 904 fortgesetzt.
-
10 zeigt
ein ausführlicheres
Ablaufdiagramm der Schritte zum Modifizieren des Ausdrucksbaums gemäß Schritt 912 in 9.
Die Verarbeitung beginnt in Schritt 1002, und in Schritt 1004 wird überprüft, ob die durch
den aktuellen Knoten dargestellte Region vollständig oder teilweise verborgen
ist. Bestimmt der Endscheidungsblock 1004, dass die Region
teilweise verborgen ist, wird die Verarbeitung in Schritt 1012 fortgesetzt.
In Schritt 1012 wird ein Abschneideoperator bei dem Knoten
angewendet, und dann kehrt der Prozess zu Schritt 1014 zurück. Ansonsten
wird die Verarbeitung im Endscheidungsblock 1006 fortgesetzt,
wenn der Endscheidungsblock 1004 bestimmt, dass die Region
total verborgen ist.
-
Im
Endscheidungsblock 1006 wird überprüft, ob der aktuelle Knoten
ein Graphikelement oder Graphikoperator ist. Bestimmt der Endscheidungsblock 1004,
dass der Knoten ein Graphikelement ist, wird die Verarbeitung in
Schritt 1008 fortgesetzt. In Schritt 1008 wird
der Knoten aus dem Ausdrucksbaum entfernt und die Verarbeitung springt
zur Aufrufprozedur in Schritt 1014 zurück. Ansonsten wird die Verarbeitung
in Schritt 1010 fortgesetzt, wenn der Endscheidungsblock 1006 bestimmt,
dass der Knoten ein Graphikoperator ist. In Schritt 1010 wird
ein vorbestimmter Satz von Knotenersetzungsregeln entsprechend dem
Graphikoperator angewendet.
-
Der
vorbestimmte Satz an Knotenersetzungsregeln (in den 9 und 10 nicht
gezeigt) kann eine oder mehrere der folgenden Regeln beinhalten:
ist
der Elternknoten ein „Over"-Graphikoperator,
und ist der aktuelle Knoten auf dem linken Zweig des Elternknotens,
ersetze den Elternknoten durch einen rechten Unterbaum des Elternknotens,
ist
der Elternknoten ein „Over"-Graphikoperator
und ist der aktuelle Knoten auf dem rechten Zweig des Elternknotens,
ersetze den Elternknoten durch einen linken Unterbaum des Elternknotens,
ist
der Elternknoten ein „In"-Graphikoperator,
entferne den Elternknoten und jeden vom Elternbaum verzweigenden
Unterbaum,
ist der Elternknoten ein „Ratop"-Graphikoperator und ist der aktuelle
Knoten auf einem linken Zweig des Elternknotens, entferne den Elternknoten
und jeden vom Elternknoten verzweigenden Unterbaum,
ist der
Elternknoten ein „Ratop"-Graphikoperator
und ist der aktuelle Knoten auf einem rechten Zweig des Elternknotens,
ersetze den Elternknoten durch einen linken Unterbaum des Elterknotens,
ist
der Elternknoten ein „Out"-Graphikoperator
und ist der aktuelle Knoten auf einem linken Zweig des Elternknotens, entferne
den Elternknoten und jeden vom Elternknoten verzweigenden Unterbaum,
ist
der Elternknoten ein „Out"-Graphikoperator
und ist der aktuelle Knoten auf einem rechten Zweig des Elternknotens,
ersetze den Elternknoten durch einen linken Unterbaum des Elternknotens,
ist
der Elternknoten ein „PlusC"-Graphikoperator
und ist der aktuelle Knoten auf einem linken Zweig des Elternknotens,
ersetze den Elternknoten durch einen rechten Unterbaum des Elternknotens,
ist
der Elternknoten ein „PlusC"-Graphikoperator
und ist der aktuelle Knoten auf einem rechten Zweig des Elternknotens,
ersetze den Elternknoten durch eine linken Unterbaum des Elternknotens,
ist
der Elternknoten ein „PlusW"-Graphikoperator
oder ein „Xor"-Graphikoperator
und ist der aktuelle Knoten auf einem linken Zweig des Elternknotens,
ersetze den Elternknoten durch einen rechten Unterbaum des Elternknotens
und
ist der Elternknoten ein „PlusW"-Graphikoperator oder ein „Xor"-Graphikoperator
und ist der aktuelle Knoten auf einem rechten Zweig des Elternknotens,
ersetze den Elternknoten durch eine linken Unterbaum des Elternknotens.
-
11 zeigt
ein ausführliches
Ablaufdiagramm eines Vorgangs der Optimierung eines Ausdrucksbaums 1102 gemäß einem
anderen Ausführungsbeispiel.
Der Ausdrucksbaum umfasst eine Anzahl von Knoten, von denen jeder
entweder ein graphisches Element oder ein Graphikoperator sein kann
und eine Region des Bildes darstellt. Ein Steuerblock 1104 hat
vorzugsweise eine Schleifensteuerstruktur zur Verarbeitung jedes
Knotens des Ausdrucksbaums 1102, der als Eingangssignal
zugeführt
wird. Der Ausdrucksbaum wird Knoten um Knoten durchlaufen. An jedem
aktuellen Knoten, der einen Graphikoperator aufweist, werden die Schritte 1108 bis 1120 angewendet,
wie es nachstehend beschrieben ist. Wurde der gesamte Ausdrucksbaum 1102 verarbeitet
(was durch „fertig" angegeben ist),
vorzugsweise in der Tiefenrichtung zuerst, ist die Verarbeitung
in Schritt 1106 beendet. Ansonsten wird die Verarbeitung
in Schritt 1108 fortgesetzt.
-
In
Schritt 1108 wird einer der verbleibenden Knoten als aktueller
Knoten ausgewählt.
In Schritt 1110 wird eine erste Regionsdarstellung von
einem Elternknoten erhalten. In Schritt 1112 durchläuft eine
modifizierte erste Regionsdarstellung einen ersten Operanden des
Graphikoperators entsprechend einer ersten vorbestimmten Modifikationsregel
für diesen
Operator. In Schritt 1114 wird eine zweite Regionsdarstellung
von durch einen Unterbaum des ersten Operanden verborgenen Regionen
bestimmt, und zum Graphikoperator zurückgegeben. In Schritt 1116 durchläuft eine
modifizierte zweite Regionsdarstellung einen zweiten Operanden des Graphikoperators
gemäß einer
zweiten vorbestimmten Modifikationsregel für den Operator.
-
In
Schritt 1118 wird eine dritte Regionsdarstellung von Regionen,
die durch einen mit dem zweiten Operanden verbundenen Unterbaum
verborgen werden, zum Graphikoperator zurückgegeben. In Schritt 1120 wird
eine endgültige
Regionsdarstellung entsprechen einer Einstellregel für den Graphikoperator
bestimmt und zu einem Elternknoten des aktuellen Knotens zurückgegeben.
Vorzugsweise wird die Regel aus der folgenden Gruppe ausgewählt:
- (A) Ist der Graphikoperator ein „Over"- oder ein „PlusC"-Operator, wird die endgültige Regionsdarstellung aus
einer Vereinigung der zweiten Regionsdarstellung und der dritten
Regionsdarstellung bestimmt,
- (B) ist der Graphikoperator ein „In"-Operator, wird die endgültige Regionsdarstellung
aus einer Schnittmenge der zweiten Regionsdarstellung und der dritten
Regionsdarstellung bestimmt,
- (C) ist der Graphikoperator ein „Ratop"-Operator, ist die endgültige Regionsdarstellung
die zweite Regionsdarstellung,
- (D) ist der Graphikoperator ein „Out"-Operator, wird die endgültige Regionsdarstellung
aus einer Differenz der zweiten Regionsdarstellung und einer Regionsdarstellung
mit zumindest einer durch eine Bounding-Box eines Knotens im rechten
Unterbaum des aktuellen Knotens dargestellten Region bestimmt, und
- (E) ist der Graphikoperator ein „Xor"- oder ein „PlusW"-Operator,
wird die endgültige
Regionsdarstellung aus einer Vereinigung der zweiten Regionsdarstellung
weniger einer Regionsdarstellung mit zumindest einer durch eine
Bounding-Box eines Knotens im rechten Unterbaum des aktuellen Knotens
dargestellten Region und der dritten Regionsdarstellung weniger
einer Regionsdarstellung mit einer Bounding-Box eines Knotens im
rechten Unterbaum des aktuellen Knotens bestimmt.
-
Die
erste vorbestimmte Modifikationsregel besteht vorzugsweise im Weitergeben
im wesentlichen der ersten Regionsdarstellung als modifizierte erste
Regionsdarstellung, wenn der Graphikoperator ein „Over"-, „In"-, „Ratop"-, „PlusC"-, „PlusW"-, „Xor"-, „Out"-(linken Operanden
zuerst vornehmen)-Operator
oder dergleichen ist. Ist der Graphikoperator ein „Out(rechten
Operanden zuerst vornehmen)"-Vorgang,
beinhaltet er das Weitergeben einer Vereinigung der ersten Regionsdarstellung
mit der zweiten Regionsdarstellung als modifizierte erste Regionsdarstellung.
-
Des
weiteren besteht die zweite vorbestimmte Modifikationsregel im wesentlichen
im Weitergeben der ersten Regionsdarstellung als modifizierte zweite
Regionsdarstellung, wenn der Graphikoperator ein „In"-, „Ratop"-, „Out"-, „Plus"-, „PlusW"-, „Xor"-Operator oder dergleichen
ist. Ist der Graphikoperator ein „Over"-Operator, beinhaltet er das Weitergeben
einer Vereinigung der ersten Regionsdarstellung mit der zweiten
Regionsdarstellung als modifizierte zweite Regionsdarstellung.
-
Vorzugsweise
wird die Bilddarstellung nicht an einem Knoten erzeugt oder zu einem
Elternknoten des Knotens zurückgegeben,
wenn die Bilddarstellung nicht danach verwendet wird, oder wenn
der Knoten der rechte Operand eines „Over"-Operators ist, und der „Over"-Operatorknoten keine
Bilddarstellung zu seinem Elternknoten zurück zu geben braucht. Gleichermaßen wird
die Bilddarstellung nicht am Knoten erzeugt oder zurückgegeben,
wenn der Knoten der linke oder rechte Operand eines „In"-, „PlusC"-, „PlusW"- oder „Xor"-Operators ist, und
der Operatorknoten keine Bilddarstellung zu seinem Elternknoten
zurück
zu geben braucht. Des weiteren wird die Bilddarstellung an dem Knoten
eventuell nicht erzeugt oder zu dem Elternknoten zurückgegeben,
wenn der Knoten der linke Operand eines „Out"- oder
eines „Ratop"-Operators ist, und
zu seinem Elternknoten keine Bilddarstellung zurück zu geben braucht. Die Bilddarstellung
wird eventuell auch am Knoten nicht erzeugt oder zurückgegeben,
wenn der Knoten der rechte Operand eines „Ratop"-Operators ist, die Wurzel des Ausdrucksbaums
ist, der Operand einer Bildverbindung, affinen Transformation oder
eines Faltungsoperators ist, der Operand einer Farbtransformation
die Undurchsichtigkeit nicht bewahrt, oder wenn der Transformationsknoten
keine Bilddarstellung zu seinem Elternknoten zurück zu geben braucht.
-
Weitere
Ausgestaltungen des bevorzugten Ausführungsbeispiels sind in ihren
Einzelheiten im Anhang dargestellt, der einen Teil der Beschreibung
bildet. Insbesondere enthält
der Anhang Pseudocodeprotokolle zum Implementieren des Verfahrens
gemäß dem bevorzugten
Ausführungsbeispiel.
In diesem Zusammenhang ist das bevorzugte Ausführungsbeispiel vorzugsweise
als Computersoftware implementiert, die auf Aufzeichnungsträgern gespeichert
werden kann, die als auf einer Computereinrichtung ausgeführter Prozess
ausgeführt
werden kann, wie auf einem Universalcomputer.
-
Die
Ausführungsbeispiele
der Erfindung können
vorzugsweise unter Verwendung eines herkömmlichen Universalcomputers ausgeübt werden,
wie unter Verwendung eines in 12 gezeigten,
um Prozesse einschließlich
der in den 9 bis 11 gezeigten
auszuführen,
sowie den im Anhang enthaltenen Pseudocode. Insbesondere werden
die Schritte des Verfahrens zum Optimieren der Ausdrucksbäume durch
Software-Befehle bewirkt, die durch den Computer ausgeführt werden.
Das Computersystem 1200 umfasst den Computer 1202,
eine Videoanzeige 1216 und Eingabeeinrichtungen 1218, 1220.
Außerdem
kann das Computersystem 1200 eine beliebige Anzahl weiterer
Ausgabeeinrichtungen einschließlich
Zeilendrucker, Laserdrucker, Plotter und andere mit dem Computer 1202 verbundene
Wiedergabeeinrichtungen umfassen. Das Computersystem 1200 kann
mit einem oder mehreren Computern unter Verwendung eines geeigneten
Kommunikationskanals, wie eines Modemkommunikationsweges, eines
Computernetzes oder dergleichen verbunden sein.
-
Der
Computer 1202 selbst umfasst eine Zentralverarbeitungseinheit
beziehungsweise -Einheiten (die nachstehend einfach als Prozessor
bezeichnet werden) 1204, einen Speicher 1206,
der einen Speicher mit wahlfreiem Zugriff (RAM) und einen Nur-Lese-Speicher
(ROM) enthalten kann, eine Eingangs-/Ausgangs-(IO)-Schnittstelle 1208,
eine Videoschnittstelle 1210 und eine oder mehrere Speichereinrichtungen,
die allgemein durch einen Block 1212 in 12 dargestellt
sind. Die Speichereinrichtung(en) 1212 kann ein oder mehrere
Elemente aus der folgenden Gruppe umfassen: Diskettenlaufwerk, Festplattenlaufwerk,
magnetoptisches Plattenlaufwerk, CD-ROM oder eine beliebige weitere
einer Anzahl nicht flüchtiger
Speichereinrichtungen, die dem Fachmann bekannt sind. Jede der Komponenten 1204 bis 1212 ist
typischerweise mit einer oder mehreren der anderen Einrichtungen über einen
Bus 1214 verbunden, der wiederum aus Daten-, Adress- und Steuerbussen
bestehen kann.
-
Die
Videoschnittstelle 1210 ist mit der Videoanzeige 1216 verbunden
und stellt Videosignale vom Computer 1202 zur Anzeige auf
der Videoanzeige 1216 bereit. Benutzereingaben zum Bedienen
des Computers 1202 können
durch eine oder mehrere Eingabeeinrichtungen zugeführt werden.
Beispielsweise kann der Bediener die Tastatur 1218 und/oder
eine Zeigeeinrichtung wie eine Maus 1220 zur Bereitstellung
einer Eingabe in den Computer 1202 verwenden. Beispielcomputer,
auf denen das Ausführungsbeispiel
praktiziert werden kann, beinhalten IBM-PC/ATs und kompatible Einrichtungen,
sowie Sun Sparc Stations.
-
ERSTES BEISPIEL
-
3 zeigt
ein Bild 10 aus einer Anzahl von Graphikelementen. Die
Graphikelemente enthalten ein undurchsichtiges Bild A, das als Unterbild 11 bezeichnet
wird, einen Kreis 12, der als Kreis B bezeichnet wird, der
durch das Unterbild 11 verborgen ist, und den Text „hello" 13, der
optional als Text „C" bezeichnet wird. Eine
gestrichelte Linie 14 zeigt den Umfang des Bildes 10 und
stellt eine leere Vordergrundregion dar, die nichts enthält, was
das Bild 10 verdecken könnte.
-
4 zeigt
einen Ausdrucksbaum 20, der die Zusammensetzung des Bildes
in 3 darstellt. Nachstehend wird ein Beispiel der
Vereinfachung des Ausdrucksbaums in 4 beschrieben.
Am Wurzelknoten (ersten Knoten) 21 des Ausdrucksbaums 20 übergibt
ein computerimplementierter Vorgang dem ersten Knoten 21 eine
leere Quadtree-Darstellung der leeren Region 14, die das
Bild 10 in 3 nicht verbirgt, beziehungsweise äquivalent
dazu einen weiteren Knoten über
dem ersten Knoten 21 des Ausdrucksbaums 20 hat, um
diesen zu verbergen.
-
Der
erste Knoten 21 ist ein Zusammensetzungsoperator (das heißt, ein „Over"-Operator), der einen linken
und rechten Operanden braucht. Der linke Operand ist ein Blattknoten 22,
der das Unterbild 11 in 3 darstellt,
und der rechte Operand wird durch einen zweiten Knoten 23 des
Ausdrucksbaums zurückgegeben, der
auch ein „Over"-Zusammensetzungsoperator
ist.
-
Nach
dem Empfang des leeren Quadtree im ersten Knoten 21 übergibt
der Prozess den leeren Quadtree dem Blattknoten 22. Am
Blattknoten 22 wird der Quadtree typischerweise mit dem
Unterbild 11 zur Bestimmung verglichen, ob das Unterbild 11 verborgen
wird. Da der Quadtree bei diesem Beispiel aber ein leerer Quadtree
ist, ist kein direkter Vergleich erforderlich, um das Ergebnis zu
erhalten, dass das Unterbild 11 nicht durch den leeren
Quadtree verborgen wird (verborgen werden kann).
-
Der
Vergleich eines Quadtrees mit einem Graphikelement (beispielsweise
dem Unterbild 11) bringt einen Vergleich mit sich, in dem
durch den Quadtree dargestellte Regionen eines Bildes mit Regionen
des Bildes verglichen werden, die durch das Graphikelement gedeckt
werden, um zu bestimmen, ob eine Region eine andere Region des Bildes
verbirgt. Der Vergleich einer Quadtreedarstellung einer Region eines
Bildes mit anderen Regionen des Bildes beinhaltet das Vergleichen
der Region des Bildes mit den anderen Regionen entweder durch direkte
Vergleiche ihrer jeweiligen Bereiche oder durch Vergleichen äquivalenter
Darstellungen oder dergleichen.
-
Das
durch den Blattknoten 22 dargestellte Unterbild 11 ist
undurchsichtig und kann daher potenziell andere Graphikelemente
des Bildes 10 verbergen. Eine erste Quadtreedarstellung
des Unterbildes 11 wird daher aufgebaut, die die Grenzen
des Unterbildes 11 enthält,
und wird zum ersten Knoten 21 zurückgegeben, da kein weiterer
linker oder rechter Zweig am Blattknoten 22 des Ausdrucksbaums 10 verfügbar ist.
Am ersten Knoten 21 führt
der „Over"-Operator eine Vereinigung
des ursprünglich
zu diesem Knoten gegebenen Quadtree, der ein leerer Quadtree ist,
und der vom linken Knoten zurückgegebenen
Quadtreedarstellung entsprechend den in Tabelle 2 aufgestellten
Regeln für
die Verarbeitung binärer
Zusammensetzungsoperatoren durch.
-
Die
Vereinigung eines leeren Quadtree mit der ersten Quadtreedarstellung
des Unterbildes 11 ergibt einen Quadtree, der der Quadtreedarstellung äquivalent
(oder im wesentlichen identisch) ist, und der nachstehend als der
erste linke Quadtree bezeichnet wird.
-
Der
erste linke Quadtree wird dem zweiten Knoten 23 des Ausdrucksbaums 10 übergeben,
und wird wie in Verbindung mit dem Knoten 21 beschrieben
dem linken Zweig des zweiten Knotens, d. h. einem Blattknoten 24 übergeben,
der vom zweiten Knoten 23 abzweigt. Der Kreis 12 ist
am Blattknoten 24 dargestellt. Beim Weitergeben des ersten
linken Quadtree zum Blattknoten 24 vergleicht der Prozess
den ersten linken Quadtree (das heißt, eine durch den ersten linken
Quadtree dargestellte Bildregion) mit der Region des Bildes, die
vom Kreis 12 belegt wird, wodurch zumindest bei diesem
Beispiel herausgefunden wird, dass die Region des Kreises 12 in 3 vollständig von
der durch den ersten linken Quadtree dargestellten Region verborgen wird.
Das Ergebnis, dass die Region des Kreises 12 vollständig verborgen
ist, wird dem zweiten Knoten 23 zurückgegeben.
-
Der
zweite Knoten 23 erhält
typischerweise vom linken Knoten 24 eine Quadtreedarstellung
des Abschnitts des Bildes 10, der vom Unterbild 11 und
dem Kreis 12 verborgen ist (eine durch die Vereinigung
des Unterbildes 11 und des Kreises erhaltene Region). Da
bei diesem Beispiel aber der Kreis 12 vollständig vom Unterbild 11 verborgen
wird, braucht keine Vereinigung der Quadtrees für das Unterbild 11 und
den Kreis 12 durchgeführt
werden.
-
Ein
der ersten linken Quadtreedarstellung des Unterbildes 11 im
wesentlichen äquivalenter
Quadtree wird dem zweiten Knoten 23 zurückgegeben, und dieser Quadtree
wird einem rechten Blattknoten 25 übergeben, der vom zweiten Knoten 23 abzweigt.
Der linke Blattknoten 25 des Ausdrucksbaums stellt eine
Region des Bildes mit dem Text („hello") 13 dar.
-
Der
Text wird von dem vom zweiten Knoten 23 übergebenen
Quadtree (der durch den Quadtree dargestellten Bildregion) nicht
verborgen. Typischerweise wird eine Quadtreedarstellung der Region
des Bildes zum zweiten Knoten 23 zurückgegeben, die vom Graphikelement
am rechten Blattknoten 25 verborgen wird. Da der Text aber
in diesem Fall keine wesentliche Region (keinen wesentlichen Bereich)
verbirgt, wird ein leerer Quadtree zum zweiten Knoten 23 zurückgegeben.
Eine wesentliche Region ist vorzugsweise durch einen Leistungsgrad
des Prozesses wie nachstehend beschrieben definiert.
-
Der
zweite Knoten 23 empfängt
den leeren Quadtree vom rechten Blattknoten 25. Nach der
Aktion (siehe Tabelle 2) eines „Over"-Operators am Knoten, wenn der linke
Operand verborgen ist, ersetzt der zweite Knoten 23 sich
selbst durch den rechten Blattknoten 25 und schneidet den
linken „Zweig" aus, was in diesem Beispiel
der linke Blattknoten 24 ist. Der dem zweiten Knoten 23 zurückgegebene
Quadtree (wenn auch der leere Quadtree) wird dem ersten Knoten 21 zurückgegeben.
-
Am
ersten Knoten 21 wird keiner seiner Abkömmlinge abgeschnitten, und
die Aktion eines „Over"-Operators besteht
in der Bildung einer Vereinigung der Quadtrees, die zu dem „Over"-Operator der linken
und rechten Zweige zurückgegeben
wurden. Typischerweise wird das Ergebnis dieser Vereinigung dem Elternknoten
des Knotens 21 zurückgegeben.
Allerdings kann dieser Schritt bei diesem Beispiel wegoptimiert werden,
da der erste Knoten 21 der oberste Knoten des Ausdrucksbaums
(der Wurzelknoten) ist. Daher wird das Ergebnis der Vereinigung
bei der Optimierung des Ausdrucksbaums nicht verwendet, und der
vereinfachte Ausdrucksbaum ist in 5 dargestellt,
in dem der zweite Knoten 23 und der linke Blattknoten 24 aus
dem Ausdrucksbaum in 4 beseitigt wurden. Der vereinfachte
Ausdrucksbaum in 5 kann dann zum Rendern des
Bildes in 3 verwendet werden, ohne dass
das Graphikelement gerendert werden muss, da der Kreis 12 als
Graphikelement vom Unterbild 11 verborgen wird.
-
ZWEITES BEISPIEL
-
Nachstehend
wird ein weiteres Beispiel der Vereinfachung (Optimierung) eines
Ausdrucksbaums unter Bezugnahme auf die 6 bis 8 beschrieben. 6 zeigt
ein Bild 40 mit mehreren Graphikelementen: eine Seite „D" 41, ein
undurchsichtiges Unterbild 42, einen Text 43 und
einen Kreis 44. Ein entsprechender Ausdrucksbaum zum Zusammensetzen
oder Rendern des Bildes 40 in 6 ist in 7 gezeigt.
In 7 stellen S0 bis S14 die bei diesem Beispiel vorgenommenen
Schritte des bevorzugten Ausführungsbeispiels zum
Vereinfachen oder Optimieren des Ausdrucksbaums 50 dar.
-
Die
folgenden Schritte S0 bis S14 entsprechen der von einem Computer-implementierten
Prozess an jedem Knoten bei der Vereinfachung des Ausdrucksbaums 50 in 7 vorgenommenen
Aktion.
-
S0:
Ein leerer Quadtree q0 wird erzeugt, der die leere Vordergrundregion 39 darstellt,
die das gesamte Bild nicht verbirgt. Dieser leere Quadtree q0 wird
einem ersten Knoten 51 (oder Wurzelknoten) des Ausdrucksbaums 50 übergeben.
-
S1:
Der erste Knoten 51 des Ausdrucksbaums 50 ist
ein „Over"-Operator. Der Prozess erhält den leeren
Quadtree q0, der dem ersten Knoten 51 vom vorhergehenden
Schritt S0 zugeführt
wurde, und vergleicht die durch den Quadtree q0 dargestellte Region
des Bildes mit einer durch den ersten Knoten 51 dargestellten Region,
um zu bestimmen, ob die durch den ersten Knoten 51 dargestellte
Region verborgen ist. Da q0 ein leerer Quadtree ist und die durch
den ersten Knoten 51 dargestellte Region nicht verbergen
kann, geht der Prozess zu den Nachkommenknoten über. Zuerst wird der Quadtree
q0 einem zweiten Knoten 52 auf dem linken Zweig des Knotens 51 übergeben.
-
S2:
Der zweite Knoten 52, der hier ein „In"-Operator ist, erhält den leeren Quadtree q0.
Der Quadtree q0 wird mit einer durch den zweiten Knoten dargestellten
Region zur Bestimmung verglichen, ob diese Region durch den Quadtree
q0 verborgen wird. Die Region des zweiten Knotens 52 wird
durch den Quadtree q0 nicht verborgen, da der Quadtree q0 leer ist.
Der Prozess wird in der Tiefenrichtung fortgesetzt und übergibt
den Quadtree q0 dem linken Zweig des zweiten Knotens 52.
-
S3:
Ein dritter Knoten 53 ist ein Blattknoten, der das Unterbild 42 darstellt.
Dieser dritte Knoten 53 erhält den durch den Schritt S2 übergebenen
Quadtree q0 und vergleicht die Region dieses Knotens 53 mit
der durch den Quadtree q0 dargestellten Region, um zu bestimmen,
ob die durch den Knoten 53 dargestellte Region vom Quadtree
q0 verborgen wird. In diesem Beispiel ist der Quadtree q0 leer,
und daher wird der Knoten 53 nicht verborgen. Allerdings
ist das Bild „A" ein Graphikelement,
das andere Graphikelemente potenziell verbergen kann. Daher wird
ein Quadtree q0 erzeugt, der die durch das Bild verborgene Region
darstellt, und zum zweiten Knoten 52 zurückgegeben,
da keine weiteren linken Zweige am dritten Knoten 53 verfügbar sind.
-
S4:
Der zweite Knoten 52 erhält vom dritten Knoten 53 den
Quadtree q1, und da der zweite Knoten 52 ein „In"-Operator ist, wird
der Quadtree q1 im Speicher als verbergende Region des linken Operanden
des „In"-Operators gespeichert.
Die verbergende Region des linken Operanden eines Operators wird
hier als qL bezeichnet. So ist hier qL = q1. Die Aktion des Prozesses
besteht gemäß Tabelle
2 darin, den am zweiten Knoten 52 erhaltenen, von dessen
Elternknoten 51 übergebenen
Quadtree dem rechten Nachkommenknoten 54 des Knotens 52 zu übergeben.
In diesem Beispiel wird der dem zweiten Knoten 52 von dem
ersten Knoten 51 (Elternknoten) übergebene Quadtree q0 den rechten
Zweig zum rechten Nachkommenknoten 54 hinuntergeschickt.
-
S5:
Der rechte Nachkommenknoten 54 (fünfter Knoten) ist wiederum
ein Blattknoten und stellt die durch den Kreis 54 angegebene
Region dar. Der Quadtree q0 wurde vom zweiten Knoten 52 nach
Schritt S4 übergeben,
und wird mit der mit dem Kreis 54 belegten Region des Bildes
verglichen, um zu bestimmen, ob die durch den Quadtree q0 dargestellte
Region durch den Kreis 44 verborgen wird. Wiederum ist
der Quadtree q0 leer, und der Knoten 44 wird daher nicht
verborgen. Allerdings ist der Kreis 44 ein Graphikelement
(ein Objekt) mit der Möglichkeit
des Verbergens von Graphikelementen (Objekten), die darunter liegen
können.
Daher wird ein die Region des Bildes darstellender Quadtree q2 erzeugt,
die durch den Kreis belegt wird. Der Quadtree q2 wird dem zweiten
Knoten 52 zurückgegeben,
da keine weiteren Zweige an diesem Knoten 54 verfügbar sind.
-
S6:
Der zweite Knoten 52 erhält den von seinem rechten Nachkommenknoten 54 zurückgegebenen Quadtree
q2, und der Quadtree q2 wird als verbergende Region des rechten
Operanden des „In"-Operators gespeichert
(das heißt,
qR = q2). Der Prozess wird entsprechen der in Tabelle 2 festgelegten
Aktion für
den „In"-Operator fortgesetzt.
Die Schnittmenge der durch die zwei Operanden des Prozesses dargestellten
Regionen werden zum Elternknoten (das heißt, zum ersten Knoten 51)
zurückgegeben
(das heißt,
das Unterbild 42 mit der Region des Kreises 44).
Das Zuschneiden resultiert in der durch den Abschnitt des Unterbildes 42 dargestellten
Region, der mit dem Kreis 44 (das heißt, dem Quadtree q2) übereinstimmt.
In diesem Fall stellt die Schnittmenge qL ∩ qR = q1 ∩ q2 = q2 die Region dar, in
der der Knoten 52 andere Graphikelemente verbergen kann.
-
S7:
Der erste Knoten 51 erhält
den vom zweiten Knoten 52 zurückgegebenen Quadtree q2. Der Quadtree
q2 wird als verbergende Region des linken Operanden des „Over"-Operators gespeichert
(qL = q2). Gemäß Tabelle
2 ist die durchzuführende
Aktion, wenn ein Nachkomme eines rechten Zweiges eines Knotens einen „Over"-Operator umfasst,
eine Vereinigung (das heißt,
q0 ∪ qL
= q0 ∩ q2
= q2) des Quadtree q0 und des Quadtree qL, die vom zweiten Knoten 52 zurückgegeben
wird, den rechten Zweig hinunter zu schicken. Das Ergebnis dieser
Vereinigung (q0 ∪ qL)
ist ein im wesentlichen mit q2 identischer Quadtree. Daher wird
das Ergebnis dieser Vereinigung (der Quadtree q2) den rechten Zweig
zu einem fünften
Knoten 55 hinuntergeschickt, der auch einen „Over"-Operator darstellt.
-
S8:
Die Region, die durch den dem fünften
Knoten 55 zugeführten
Quadtree q2 dargestellt wird, wird mit der am fünften Knoten 55 dargestellten
Region zur Bestimmung verglichen, ob die Region des Knotens 55 durch
den Quadtree q2 (dessen Region) verborgen wird. Die am fünften Knoten 55 dargestellte
Region des Bildes wird nicht durch die Region des Quadtree q2 verborgen.
Der Quadtree q2 wird den linken Zweig hinuntergeschickt, der vom
fünften
Knoten 55 abzweigt.
-
S9:
Der linke Nachkomme des fünften
Knotens 55 ist ein Blattknoten 56, der die Region
des Bildes in 6 darstellt, die den Text 43 zeigt.
Der Blattknoten 56 erhält
den vom fünften
Knoten 55 übergebenen Quadtree
q2 und wird mit der am Blattknoten 56 dargestellten Region
(typischerweise ist die Region des Bildes 6, die vom Text 43 belegt
wird, eine Bounding-Box mit Text) zur Bestimmung verglichen, ob
die durch den Quadtree q2 dargestellte Region die am Blattknoten 56 dargestellte
Region verbirgt. Die durch den Quadtree q2 dargestellte Region (die
durch den Kreis 44 belegte Region) verbirgt den Text 43 teilweise.
Daher wird der Text 43 für ein späteres Abschneiden begrenzt
oder gekennzeichnet. Der Text 43 wird durch die Anwendung eines
Abschneideoperators abgeschnitten, wobei die Abschneideoperation
einen „Schneide-Weg" aus dem Quadtree
q2 konstruiert und den Text 43 bis zu diesem Weg wegschneidet
oder abschneidet.
-
An
diesem Punkt wird typischerweise ein neuer Quadtree erzeugt, der
die durch den Text belegte Region des Bildes darstellt, und zu dem
fünften
Knoten 55 zurückgegeben.
Ist aber bei diesem Ausführungsbeispiel
ein Graphikelement zu klein, um andere Graphikelemente des Bildes
wesentlich zu verbergen (beispielsweise verbirgt das graphische
Textelement „hello" 43 andere
Graphikelemente nicht wesentlich, obwohl die Bounding-Box des Texts 43 eine
wesentliche Region darstellt), wird vorzugsweise ein leerer Quadtree
zurückgegeben,
anstatt Verarbeitungszeit zu investieren, um eine Quadtreedarstellung
der Region des Textes 43 zu erzielen. Daher wird die Erzeugung
eines neuen Quadtree q3 für
Regionen des Bildes, die durch den Text 43 belegt sind,
als leerer Quadtree bewirkt. Die Wahl der Erzeugung eines leeren
Quadtree für
die durch den Text 43 dargestellte Region ist ein Leistungsmerkmal
des Prozesses, was nachstehend unter der Unterüberschrift „Leistungsmerkmale" beschrieben ist.
Obwohl eine Quadtreedarstellung für den Text 43 erzeugt
werden kann, übersteigt
die Arbeitsgeschwindigkeit des Prozesses die zum Rendern des Textes
erforderliche Zeit. Daher wird der leere Quadtree q3 erzeugt und
dem fünften
Knoten 55 zurückgegeben.
-
S10:
Der fünfte
Knoten 55 erhält
den durch den vorhergehenden Schritt S9 zurückgegebenen leeren Quadtree
q3. Dieser Quadtree q3 wird als verbergende Region des linken Operanden
des „Over"-Operators am fünften Knoten 55 gespeichert
(qL = q3). Wiederum besteht gemäß Tabelle
2 die durchzuführende
Aktion beim Durchlaufen eines rechten Zweiges eines Knotens mit
einem „Over"-Operator im Übergeben
einer Vereinigung des dem Knoten 55 durch den Elternknoten 51 übergebenen
Quadtree q2 mit dem mit dem linken Operanden verbundenen Quadtree
q3 zu dem rechten Zweig (qL ∪ q2
= q3 ∪ q2
= q2). Die Vereinigung des Quadtree q3 mit dem Quadtree q2 resultiert
in einem zu dem Quadtree q2 äquivalenten
Quadtree, da der Quadtree q3 der in Schritt S9 beschriebene leere
Quadtree ist. Daher wird der Quadtree q2 dem rechten Zweig des Ausdrucksbaums
für einen rechten
Blattknoten 57 des Elternknotens (fünfter Knoten) 55 übergeben.
-
Der
Blattknoten 57 ist durch ein Graphikelement Seite „D" 41 dargestellt,
die die Hintergrundseite in 6 darstellt.
Der dem rechten Blattknoten 57 durch den fünften Knoten 55 übergebene
Quadtree q2 wird mit der Region der Seite „D" 41 zur Bestimmung verglichen,
ob die durch den Quadtree q2 dargestellte Region die durch die Seite „D" 41 dargestellte
Region verbirgt. Das Ergebnis dieses Vergleichs ist, dass die durch
den Quadtree q2 (Kreis 49) dargestellte Region die Seite „D" 41 teilweise
oder ganz verbirgt.
-
Das
Graphikelement Seite „D" wird daher entweder
markiert, um später
auf die Grenze des Kreises 44 zugeschnitten zu werden (einen
aus dem Quadtree q2 hergeleiteten Abschneideweg), was typischerweise vor
einem Render-Vorgang geschieht, oder es wird ein Abschneideoperator
angewendet, und die Seite „D" 41 wird
zugeschnitten, sodass die durch den Kreis 44 beschriebene
Region aus der Seite „D" 41 ausgeschnitten wird.
Zur Darstellung der Seite „D" 41 kann
ein Quadtree erzeugt werden, sodass er zurück zu einem Elternknoten gegeben
werden kann. Allerdings ist bei diesem Beispiel die Erzeugung eines
derartigen Quadtree nicht erforderlich, da entnommen werden kann,
dass keine weiteren Graphikelemente verborgen sein können.
-
S12:
Der Prozess kehrt zum fünften
Knoten 55 zurück,
an dem keine weiteren Quadtrees zu erzeugen sind.
-
S13:
Der Prozess kehrt zum ersten Knoten 51 zurück, an dem
keine weiteren Quadtrees zu erzeugen sind.
-
S14:
Der Prozess endet mit der Optimierung des Ausdrucksbaums 50 in 7,
womit der Ausdrucksbaum 60 in 8 erhalten
wird. Die Symbole 58 und 59 in Diamantform in 8 zeigen, dass
der Text 43 und die Seite „D" 41 jeweils zuzuschneiden sind
(oder auch zugeschnitten wurden).
-
LEISTUNGSMERKMALE
-
Die
vorstehenden Beispiele der Quadtreedarstellungen, die unter Bezugnahme
auf die 1 bis 8 beschrieben
wurden, umfassen die Darstellung einer Region eines Bildes, die
von einem Graphikelement (Objekt) belegt wird, ungeachtet der relativen
Größe des Graphikelements
verglichen mit dem gesamten Bild. Allerdings wird der bei dem Ausführungsbeispiel
durchgeführte
Prozess vorzugsweise von den folgenden Prinzipien und Folgerungen
gesteuert:
- (a) Es wird bevorzugt, so wenig
als möglich
zur Abdeckung der meisten Fälle
zu tun, anstelle zu versuchen, perfekte Ergebnisse zu erzielen,
und
- (b) an einem Knoten ist zumindest zu Beginn nicht bekannt, ob
tatsächlich
eine Verbergung in einem Bild geschieht oder nicht, weshalb es zu
bevorzugen ist, kostspielige Tests mit unsicherem Ausgang zu vermeiden.
Diese Prinzipien gelten im Folgenden.
-
Zum
einen erhöht
die Erhöhung
der Tiefe (das heißt,
die Anzahl von Knoten und Zweigen) eines Quadtree die Quadtreeauflösung und
die Fähigkeit
zur Erfassung einer Verbergung. Allerdings erhöhen sich ab einer bestimmten
Auflösung
die Berechnungskosten zur Erzeugung und Kombination von Quadtrees
exponentiell, was die Verarbeitungseinsparungen durch das Versuchen
der Beseitigung verschwindender Bereiche aus einem Ausdrucksbaum,
die durch die erhöhte
Quadtreetiefe dargestellt werden, überschreitet.
-
Außerdem ist
es bezüglich
der Berechnung kostspielig, jedes undurchsichtige Primitiv als potenziellen Verberger
zu behandeln (als Graphikelement, das wahrscheinlich ein anderes Graphikelement
eines Bildes verbirgt). Je kleiner das Primitiv ist, desto weniger
wahrscheinlich verbirgt es ein anderes Primitiv. Daher ist die Erzeugung
von Quadtrees vorzugsweise auf mögliche
Verberger begrenzt, die eine vorbestimmte Größe haben oder größer sind.
Typischerweise werden Primitive, deren Umwandlung in einen Quadtree
zu kostspielig ist, nicht betrachtet, da sie kein gutes Investitionsergebnis
garantieren können.
Ein „guter
Verberger" hat daher vorzugsweise
die folgenden Merkmale:
- (a) Vollständig undurchsichtig,
- (b) Größer als
eine vorbestimmte Größe (und
daher sehr wahrscheinlich ein Verberger anderer Primitive eines
Bildes),
- (c) Einfach in einen Quadtree sehr schnell umzuwandeln (beispielsweise
werden lediglich Graphikelemente mit einer einzigen einfachen konvexen
Umrisslinie gewählt).
-
Zum
Dritten kann das Testen auf eine Verbergung (das heißt, die
Bestimmung, ob ein erstes Graphikelement eines oder mehrerer Graphikelemente
eines Bildes verbirgt) durch die Darstellung der durch das erste Graphikelement
abgedeckten Region als Quadtree und Testen durchgeführt werden,
ob eine oder mehrere Zellen der an den Knoten des Quadtree dargestellten
Region durch das eine oder die mehreren Graphikelemente des Bildes
abgedeckte Regionen verbergen. Typischerweise sind die eine oder
mehreren Regionen auch durch Quadtrees dargestellt, und die Zellen
der Quadtrees werden verglichen. Allerdings kann sich die Darstellung
einer beliebigen Region eines Bildes als Quadtreedarstellung ab
einer bestimmten Auflösung
als sehr rechenintensiv, obwohl insgesamt möglich, erweisen. Daher wird
vorzugsweise eine Bounding-Box einer an einem Knoten eines Ausdrucksbaums
dargestellten Region konstruiert. Ob der Knoten ein Graphikelement oder
ein Operator ist, die am Ausdrucksbaumknoten dargestellte Region
ist gut definiert.
-
Obwohl
die Bounding-Box an einem Knoten eines Ausdrucksbaums die durch
den Knoten abgedeckte Region eventuell nicht exakt darstellt, macht
die Verbesserung der Rechenleistung typischerweise den Nachteil
der Verarbeitung dahingehend, dass Verborgenheiten nicht erfasst
werden, wett. Das Testen auf verborgene Graphikelemente durch das
Vergleichen ihrer jeweiligen Bounding-Box wird gegenüber dem
Vergleichen einer Quadtreedarstellung der Regionen des Bildes bevorzugt,
die durch die Graphikelemente belegt werden. Dadurch können manche
verborgenen Graphikelemente unterhalb einer vorbestimmten Größe übersehen
und als nicht verborgen betrachtet werden. Allerdings ist die Auswahl
eines einfachen Tests die Bestimmung, ob Graphikelemente durch andere
Graphikelemente des Bildes verborgen werden, gegenüber rechenintensiver Tests
zu bevorzugen, die in den meisten Fällen die Investition nicht
rechtfertigen.
-
Im
Folgenden wird ein Beispiel eines Pseudo-Code-Aufrufs einer Routine „test" beschrieben, die
die Bounding-Box an einem Knoten mit einer Quadtreezelle (die nachstehend „Zelle" genannt wird) vergleicht.
-
-
-
Diese
Funktion (Routine) wird aufgerufen durch:
if bounding_box keine
leere Schnittmenge mit dem durch die Quadtree-Wurzel dargestellten
Rechteck hat then
call test (bounding_box, Quadtree-Wurzel)
-
Quadtrees
werden kontinuierlich erzeugt und verworfen. Ein sehr einfaches
und schnelles Schema zur Verwaltung des Computerspeichers mit geringer
Speicherzuweisungsaktivität
wird bevorzugt (beispielsweise die Zuweisung ziemlich großer Speicherblöcke, das
heißt,
1000 Quadtree-Zellen auf einmal). Zellen werden diesen Blöcken zugewiesen,
als nur einmal beschreibbar und nur lesbar behandelt, und bis zum
Ende des gesamten Ausdrucksbaumdurchlaufs nicht freigegeben. Dieser
Ansatz ermöglicht
das gemeinsame Nutzen von Zellen unter Quadtrees und verringert
erheblich ein Kopieren der Durchführung von Quadtreeeinstelloperationen.
-
Muss
keine Regionsdarstellung (kein Quadtree) erzeugt werden, wird vorzugsweise
als Leistungsmerkmal an einem Knoten keine Regionsdarstellung erzeugt.
Beispielsweise kann ein Elternknoten von einem Nachkommenknoten
einen Quadtree der Region anfordern, die der Nachkommenknoten und
seine Nachkommenknoten verbergen können. Wird eine Regionsdarstellung
bei einer nachfolgenden Berechnung nie verwendet, muss die Regionsdarstellung
vorzugsweise nicht erzeugt werden.
-
Der
vorstehende Prozess zur Optimierung eines Ausdrucksbaums ist für eine angemessene
Darstellung als Rekursion beschrieben. Die Implementierung des Prozesses
ist auch unter Verwendung eines nicht rekursiven Prozesses durch
Rück-Zeiger
möglich.
Dies dient sowohl der Verringerung eines Funktionsaufrufsoverheads
und auch der Handhabung sehr großer Bäume, die in der Praxis kaum
harmonisch sind.
-
Vorstehend
wurde lediglich eine kleine Anzahl von Ausführungsbeispielen der Erfindung
beschrieben, und es können
Modifikationen anhand der vorstehenden Beschreibung vom Fachmann
durchgeführt
werden, ohne vom Schutzbereich der Erfindung abzuweichen.
-
ANLAGE
-
Die
folgende Funktion testet einen Knoten auf eine Verbergung gegenüber einem
Quadtree q0. Sie gibt zurück,
ob alle sichtbaren Teile des Knotens verborgen sind oder nicht.
Bei Ergebnis_erforderlich gibt sie auch eine Quadtreedarstellung
zurück,
welche Bereiche der Knoten verbirgt.
-
Sie
wird mit dem Aufruf:
obscure (Wurzelknoten des Baums, false,
leerer Quadtree)
aufgerufen.
function obscure (Knoten,
Ergebnis_erforderlich, q0)
begin
case Knotentyp begin
Primitiv →
if
q0 verbirgt die Knotenboundingbox then
return verborgen
else
if q0 verbirgt teilweise die Knotenboundingbox and es wird ein Vorteil
beim Beschneiden des Primitivs erzielt (beispielsweise handelt es
sich um ein Bild-, Kantenmisch-Box-,
all- oder Wegprimitiv) then
begin
Zuschneiden, wenn der
Zuschneideoverhead die Einsparung der Nichterzeugung und Zusammensetzung
der abgeschnittenen Bildelemente es wert ist.
Einen Abschneideweg
aus q0 erhalten. Dieser Abschneideweg bleibt mit q0 verbunden, während q0
vorhanden ist, sodass er lediglich einmal erzeugt wird.
Den
Knoten markieren, dass er ein Zuschneiden auf diesen Weg erfordert.
end
if
Ergebnis_erforderlich then
begin
if das Primitiv ein guter
Verberger ist (ein großes
undurchsichtiges Bild, eine Box oder all; ein großer undurchsichtiger
Weg mit einer einzelnen, einfachen, konvexen Kante) then
einen
Quadtree aus der Primitivgrenze konstruieren.
return diesen
Quadtree.
else
return leeren Quadtree.
end
Farbtransformation →
if
q0 verbirgt die Knotenboundingbox then
return verborgen.
else
if q0 verbirgt teilweise die Knotenboundingbox then
begin
Zuschneiden,
da der Abschneideoverhead die Einsparung der Nichttransformation
der nicht abgeschnittenen Bildelemente es wert ist.
Abschneideweg
aus q0 erhalten. Dieser Abschneideweg bleibt mit q0 verbunden, während q0
vorhanden ist, sodass er lediglich einmal erzeugt wird.
Knoten
markieren, dass er ein Zuschneiden auf diesen Weg erfordert.
end
Bestimmen,
ob die Transformation die Undurchsichtigkeit bewahrt
(Opazität 1 bildet
auf Opazität
1 ab), und ob sie die Unsichtbarkeit bewahrt (Opazität 0 bildet
auf Opazität
0 ab).
call obscure (Knotenoperand, Transformation bewahrt
Undurchsichtigkeit and Ergebnis_erforderlich q0), Quadtree q1 auf
Anforderung erhalten. Wird die Undurchsichtigkeit nicht bewahrt,
ist nicht bekannt, welche Bereiche nach der Anwendung der Transformation
verborgen sein werden, so dass es keinen Anlass zur Anforderung
eines Quadtree gibt.
if Operand ist verborgen then
begin
soll
der Operand verborgen sein, dann sind es lediglich die sichtbaren
Abschnitte (Opazität
#0), die garantiert verborgen sein werden.
if Transformation
bewahrt Unsichtbarkeit then
return verborgen.
else
begin
Bestimmen,
was die Transformation unsichtbar transformieren wird (Opazität = 0).
Diesen Knoten durch ein „All"-Primitiv dieser
Farbe (Opazität)
ersetzen.
if Ergebnis_erforderlich then
return einen aus
den All-Grenzen konstruierten Quadtree.
return
end
end
if
Ergebnis_erforderlich then
if Transformation bewahrt Undurchsichtigkeit
then
return Quadtree q1.
else
return leeren Quadtree.
Affine
Transformation, Bildverwindung →
if
q0 verbirgt die Knotenboundingbox then
return verborgen.
else
if q0 verbirgt teilweise die Knotenboundingbox then
begin
Zuschneiden,
da der Abschneideoverhead die Einsparung der Nichterzeugung und
Zusammensetzung der zugeschnittenen Bildelemente es wert ist.
Abschneideweg
aus q0 erhalten. Dieser Abschneideweg bleibt mit q0 verbunden, wenn
q0 vorhanden ist, sodass er lediglich einmal erzeugt wird.
Den
Knoten markieren, dass er ein Zuschneiden auf diesen Weg erfordert.
end
call
obscure (Knotenoperand, false, leerer Quadtree). q0 kann im Baum
nicht weitergereicht werden oder es kann kein Ergebnis akzeptiert
werden, wenn die Quadtrees nicht durch die Transformation invertiert/transformiert
werden.
Bildfaltung →
if
q0 verbirgt die Knotenboundingbox then
return verborgen
call
obscure (Knotenoperand, false, leerer Quadtree).
Binäroperator →
if
q0 verbirgt die Knotenboundingbox then
return verborgen
case
Knotenoperator begin
over →
call
obscure (linker Operand des Knotens, true, q0), durch linken Operanden
verborgenen Bereich qL erhalten.
call obscure (rechter Operand
des Knotens, Ergebnis_erforderlich, ist linker Operand verborgen
then q0 else q0 ∪ qL),
durch rechten Operanden verborgenen Bereich qR bei Ergebnis_erforderlich
erhalten.
if linker Operand ist verborgen und rechter Operand
ist verborgen then
return verborgen.
else if linker Operand
ist verborgen then
begin
Ersetze diesen Knoten durch seinen
rechten Operanden.
if Ergebnis_erforderlich then
return
qR.
end
else if rechter Operand ist verborgen then
begin
Diesen
Knoten durch seinen linken Operanden ersetzen.
if Ergebnis_erforderlich
then
return qL.
end
else
if Ergebnis_erforderlich
then
return qL ∪ qR.
end
in →
call
obscure (linker Operand des Knotens, Ergebnis_erforderlich, q0),
durch linken Operanden verborgenen Bereich qL bei Ergebnis_erforderlich
erhalten.
if linker Operand ist verborgen then
return
verborgen.
call obscure (rechter Operand des Knotens, Ergebnis_erforderlich,
q0), durch rechten Operanden verborgenen Bereich qR bei Ergebnis_erforderlich
erhalten.
if rechter Operand ist verborgen then
return
verborgen.
if Ergebnis_erforderlich then
return qL ∪ qR.
out
call
obscure (rechter Operand des Knotens, true, q0), durch rechten Operanden
verborgenen Bereich qR erhalten.
call obscure (linker Operand
des Knotens, Ergebnis_erforderlich, ist rechter Operand verborgen
then q0 else q0 ∩ qR),
durch linken Operanden verborgenen Bereich qL bei Ergebnis erforderlich
erhalten.
if linker Operand ist verborgen then
return
verborgen.
else if rechter Operand ist verborgen then
begin
Diesen
Knoten durch seinen linken Operanden ersetzen.
if Ergebnis_erforderlich
then
return qL.
end
else
if Ergebnis_erforderlich
then
return qL-B(rechter Operand).
end
ratop →
call
obscure (linker Operand des Knotens, Ergebnis_erforderlich, q0),
durch linken Operanden verborgenen Bereich qL bei Ergebnis_erforderlich
erhalten.
if linker Operand ist verborgen then
return
verborgen.
call obscure (rechter Operand des Knotens, false,
q0).
if rechter Operand ist verborgen then
Diesen Knoten
durch seinen linken Operanden ersetzen.
if Ergebnis_erforderlich
then
return qL.
plusC →
call
obscure (linker Operand des Knotens, Ergebnis_erforderlich, q0),
durch linken Operanden verborgenen Bereiche qL bei Ergebnis_erforderlich
erhalten.
call obscure (rechter Operand des Knotens, Ergebnis_erforderlich,
q0), durch rechten Operanden verborgenen Bereich qR bei Ergebnis_erforderlich
erhalten.
if linker Operand ist verborgen und rechter Operand
ist verborgen then
return verborgen.
else if linker Operand
ist verborgen then
begin
Diesen Knoten durch seinen rechten
Operanden ersetzen.
if Ergebnis_erforderlich then
return
qR.
end
else if rechter Operand ist verborgen then
begin
Diesen
Knoten durch seinen linken Operanden ersetzen.
if Ergebnis_erforderlich
then
return qL.
end
else
if Ergebnis_erforderlich
then
return qL ∪ qR.
end
plusW,
Xor →
call
obscure (linker Operand des Knotens, Ergebnis_erforderlich, q0),
durch linken Operanden verborgenen Bereich qL bei Ergebnis_erforderlich
erhalten.
call obscure (rechter Operand des Knotens, Ergebnis_erforderlich,
q0), durch rechten Operanden verborgenen Bereich qR bei Ergebnis_erforderlich
erhalten.
if linker Operand ist verborgen and rechter Operand
ist verborgen then
return verborgen.
else if linker Operand
ist verborgen then
begin
Diesen Knoten durch seinen rechten
Operanden ersetzen.
if Ergebnis_erforderlich then
return
qR.
end
else if rechter Operand ist verborgen then
begin
Diesen
Knoten durch seinen linken Operanden ersetzen.
if Ergebnis_erforderlich
then
return qL.
end
else
begin
if Ergebnis_erforderlich
then
return (qL-B(rechter Operand)) ∪ (qR-B(linker Operand)).
end
end
case Binäroperator
end
case Knotentyp
end