-
Die Erfindung bezieht sich auf grafisches Skalieren
von Bildern. Im Besonderen bezieht sich die Erfindung auf ein Verfahren
und ein System zum rückwärts Abbilden
grafischer Daten mehrer Bytes auf ein Mal.
-
Skalieren grafischer Daten ist allgemein
auf dem einschlägigen
Gebiet der Technik gut bekannt. Zwei häufig verwendete Ansätze sind
das Vorwärtsabbilden
und das Rückwärtsabbilden.
In einer Vorwärtsabbildung,
fragt der Algorithmus für
jedes Quellenpixel nach, wo es in dem Zielortbild landet. Umgekehrt,
für eine
Rückwärtsabbildung
ist die Frage für jedes
Zielortpixel, woher es von dem Quellenbild kommt. Ein Vorwärtsabbilden
erfordert ein Entscheiden zwischen Pixeln, die in dem gleichen Zielort
landen, während
ein Rückwärtsabbilden
einer bestimmten Arbeitsaufwand erfordert, um für jedes Pixel zu bestimmen,
von welchem Quellenbildpixel oder -pixeln es herkam, und dann ist
es nie notwendig, dass Pixel wieder zu kontrollieren.
-
Sobald in einem Rückwärtsabbildungsschema für jedes
Zielortpixel festgelegt wurde, woher es aus der Quelle oder den
Quellen kommt, ist es für
jedes Quellenpixel notwendig, das zu dem Zielortpixel beiträgt, einen
Beitragskoeffizienten von dem Quellenpixel zu bestimmen. Typischerweise
werden in Fällen,
in denen mehr als ein Quellenpixel beiträgt, entweder zwei oder vier
Pixel erachtet einen Beitrag zu leisten. Dies entspricht einer bi-linaren,
bzw. einer bi-kubischen Filterung. Die Berechnung dieser Koeffizienten
ist allgemein auf dem einschlägigen
Gebiet der Technik gut bekannt und obwohl rechenintensiv, muss sie
nur einmal für
jede Zeile und einmal für
jede Spalte durchgeführt
werden. Die berechneten Koeffizienten werden dann zum Zugreifen
während
folgender Verarbeitung in ein Feld gespeichert. Das oben beschriebene
Schema wird einem erlauben, entweder bloß horizontale oder bloß vertikale
Skalierung durchzuführen.
Dennoch, falls es wünschenswert wäre, sowohl
vertikales als auch horizontales Skalieren zugleich durchzuführen, würde es gewiss
notwendig sein, einige Quadrate von Quellenpixeln auszuwählen und
sie mit angemessenen Koeffizienten zu gewichten. Dieses würde eine
Pixel-für-Pixel
Koeffizientenberechnung und -manipulation erfordern. Durch korrekte
Wahl der Filterkoeffizienten ist es möglich, Streckung in einer trennbaren
Art und Weise durchzuführen,
d. h. zuerst horizontale Streckung und dann vertikale oder umgekehrt.
Solche Techniken sind auf dem einschlägigen Gebiet der Technik gut
bekannt.
-
Koeffizienten werden ausgesucht,
indem ein geometrischer Punkt, der die Mitte des Zielortpixels ist,
ausgewählt
wird und die Funktion, die die Punkte in der Quelle auf den Zielort
abbildet, festgelegt wird, wobei eine skalierte Translation erzeugt
wird, bei der der Zielort eine lineare Funktion von X und Y ist.
Die Inverse der Funktion ergibt den Punkt in der Quelle, von dem
die Daten kommen. Wenn der ausgesuchte Punkt nicht die Mitte des
Quellenpixels ist, ist es notwendig die Quellendaten zu interpolieren,
um die relativen Abstände
zwischen den unterschiedlichen Quellenpixelmitten zu bestimmen und
sie entsprechend zu gewichten. Demnach sind die Filterkoeffizienten
eine Funktion von Teilpixelpositionen eines rückwärts abgebildeten Zielortpunktes.
-
In "Resampling Algorithms for Image Resizing
and Rotation" Proc.
SPIE Digital Image Processing Applications, vol. 1075, pp. 260–269, 1989,
stellen Joseph Ward und David R. Lok einen Algorithmus bereit, die
Teilpixelpositionen runter bis zum z. B. 1/32tel oder 1/256tel eines
Pixels zu quantifizieren und stellen gebrauchsfertige Tabellen von
Filtern bereit, die für
ein Pixel in dem Bereich zutreffen. Jeder Bereich ist als ein "bin" bekannt. Demnach
wird für
jedes bin ein unterschiedlicher Filterkoeffizient festgelegt.
-
Dokument D1 offenbart ein System
zum Transformieren von Bildern, das einen transponierenden Speicher
enthält,
der die Richtung der Abtastung der Felder ändert die innerhalb gespeichert
sind. Demnach erzeugt der transponierende Speicher einen digitalen
Datenstrom, der eine vertikale abgetastete Version der eingegebenen
Daten darstellt.
-
Es ist relativ einfach, ein Programm
in C oder einer C Variante zu schreiben, um einzelne Quellenpixel
von einem Quellenbild zu lesen und sie einzeln zu skalieren. Dennoch
gibt es keine einfache Art und Weise mehrfach aneinandergrenzende
Pixel von Quellendaten zu bearbeiten. Mehrfache Pixel von angrenzenden
Quellendaten sind weiterhin schwierig zu bearbeiten aufgrund der
Tatsache, dass die Daten sehr wohl in unbekannten Formaten abgespeichert werden
können.
Zum Beispiel werden grafische Daten im Allgemeinen im bandverschachtelten
Format abgespeichert, wo z. B. drei aufeinanderfolgende Bytes im
Speicher rote, grüne
und blaue Komponenten eines einzelnen Pixels darstellen. Dies erschwert den
Sachverhalt, in dem es gewünscht
wird, die angrenzenden Pixel im Speicher durch einen Filter zu multiplizieren,
da es für
einen beliebigen Abschnitt von Bilddaten nicht klar ist, ob vier
Bytes vier Pixel oder 1–1/3
Pixel darstellen. Indem mehrere Bytes gleichzeitig bearbeitet werden,
kann die Geschwindigkeit eines Standardskalierungsalgorithumusses gewaltig
erhöht
werden. Deswegen ist es wünschenswert,
ein Verfahren zu entwickeln, bei dem mehrere Datenbytes gleichzeitig
ohne Rücksicht
auf deren Speicherformat bearbeitet werden können.
-
Gemäß einem ersten Aspekt der vorliegenden
Erfindung wird ein Bildverarbeitungsverfahren bereitgestellt, wie
in Anspruch 1 beansprucht. Gemäß eines
weiteren Aspekts der vorliegenden Erfindung wird ein Computersystem
bereitgestellt, wie in Anspruch 10 beansprucht.
-
Eine Vielzahl von Puffern wird dynamisch
in dem Speicher des Computersystems erzeugt. Unter den erzeugten
Puffern sind ein Horizontalabtastpuffer und zwei Vertikalabtastpuffer.
Der Horizontalabtastpuffer wird mit Daten einer Vielzahl von Zeilen des
Quellenbildes gefüllt.
So ein Füllen
kann mit mehreren Bytes zugleich vollzogen werden.
-
Der Horizontalabtastpuffer ist typischerweise 8
Bytes breit und so lang, wie die Breite der Quellenbildzeile. Grundsätzlich wird
eine erste Quellenbildzeile in dem Horizontalabtastpuffer untergebracht:
8 Bytes in Zeile 0, dann werden sieben Reihen übersprungen und die nächsten 8
Bytes in die Pufferzeile 8 usw. untergebracht, bis die gesamte Quellenzeile
in dem Horizontalbabtastpuffer ist. Der Prozess wird für jede folgende
Quellenbildzeile, mit einem Versatz einer von seiner vorhergehenden
Zeile, wiederholt, bis 8 Quellenzeilen in dem Horizontalabtastpuffer
sind, z. B. wird die zweite Quellenzeile in Pufferzeilen 1, 9, 17,
usw. untergebacht. Demnach sind vertikale Nachbarn in dem Quellenbild
vertikale Nachbarn in dem Horizontalabtastpuffer. Die Horizontalabtastpuffer
sind aus Teilpuffern zusammengesetzt, wobei jede Quelle acht Bytes
von acht angrenzenden Quellenbildzeilen bildet. Jeder Teilpuffer
wird Bitweise transponiert, um einen leichten Zugang zu den unterschiedlichen
Kanälen
der Bilddaten bereitzustellen. Die Transposition setzt die Bänder eines
bandverschachtelten Formats zur leichten Verarbeitung aus.
-
Sobald die Daten transponiert sind,
wird ein Filter auf die transponierten Daten angewandt, was dazu
führt,
dass sie in einem anderen Puffer, entweder einem Zwischenpuffer
oder einem Vertikalabtastpuffer, gespeichert werden. Dennoch, wenn
die Daten direkt in dem Vertikalabtastpuffer untergebracht werden,
wird hier ein Transponieren erforderlich sein. Demnach wird das
Transponieren vereinfacht, indem ein Zwischenpuffer benutzt wird.
Die gefilterten Daten werden dann umtransponiert, um deren ursprüngliche
Konfiguration anzunehmen. Die umtransponierten Daten werden in einem
vorher erzeugten Vertikalabtastpuffer gespeichert. Die vorhergehenden
Schritte werden wiederholt, um einen zweiten Vertikalabtastpuffer
zu füllen.
Nachfolgend werden, während
der gesamten Verarbeitung des Quellenbildes, zwei vertikale Abtastpuffer
fortlaufend gefüllt,
um vertikales Filtern bei hoher Geschwin digkeit zu erlauben. Wenn
Daten nicht länger
in einem der Vertikalabtastpuffer zum laufenden Filtern benötigt werden,
kann er mit neuen Daten, die der nächsten Gruppe vertikaler Nachbarn
entsprechen, nachgefüllt
werden. Es kann notwendig sein, die gefilterten Daten von 16 Bitwerten
auf 8 an den Extremen festgehaltene Bitwerte zu konvertieren. Sobald
die Konvertierung vollständig
ist, kann das skalierte Bild auf dem Bildschirm ausgegeben oder
im Speicher zur späteren
Verarbeitung gespeichert werden.
-
Der Abbildungsbefehlssatz der Ultrasparc von
Sun Microsystems unterstützt
mehrere Befehle, die die Verarbeitung mit der beschriebenen Methode vereinfacht.
Unter Verwendung des Abbildungsbefehlssatzes (VIS) werden 8 Bytes
gleichzeitig gelesen oder geschrieben. Gleichermaßen erlaubt
VIS Bearbeitung mit 4 Byte Operanden. Bestimmte Befehle, wie z.
B. der fpmerge Befehl, erlauben einfaches Transponieren gegenüber früheren Verfahren. Durch
Ausrichten der Daten in Puffern können Angelegenheiten der Ausrichtungskantenbedingungen früh in dem
Skalierungsschema adressiert werden, um eine effizientere Verwendung
der Verarbeitungsresourcen zu erlauben, indem Nachprüfungen und Verzweigungen
in inneren Schleifen eliminiert werden. Gleichermaßen können alle
formatspezifischen Angelegenheiten in einer äußeren Schleife gehandhabt werden,
wobei das System das Format der Quellen und Zielortdaten kennen
muss. Da horizontale und vertikale Verarbeitung getrennt durchgeführt werden
können,
kann Multi-Threading in einem Multiprozessorfeld leicht ausgeführt werden.
-
Kurze Beschreibung
der Zeichnungen
-
1 ist
ein Blockdiagramm eines Computersystems, das die Erfindung benutzt.
-
2a ist
ein Blockdiagramm des Pufferschemas in einer Ausführungsform
der Erfindung.
-
2b ist
ein Diagramm, das die Art und Weise zeigt, wie Puffer in einer Ausführungsform
der Erfindung gefüllt
werden.
-
3a ist
ein Teilpufferbeispiel der Erfindung und ihrer Transponierten gemäß der Erfindung.
-
3b ist
ein Diagramm einer Teilpuffertransposition in Teilen, gemäß einer
Ausführungsform
der Erfindung.
-
3c ist
ein Transponierungsbaum für
die Hälfte
eines Teilpuffers in einer Ausführungsform
der Erfindung.
-
Detaillierte
Beschreibung der Zeichnungen
-
Das Verfahren und die Vorrichtung
zur Skalierung grafischer Bilder in einem Computer wird offenbart.
In der folgenden Beschreibung werden zum Zweck der Erklärung, spezifische
Anwendungen, Zahlen, Materialien und Konfigurationen dargelegt, um
ein volles Verständnis
der vorliegenden Erfindung bereitzustellen. Dennoch würde es einem
Fachmann selbstverständlich
erscheinen, dass die vorliegende Erfindung auch ohne die spezifischen
Details umgesetzt werden kann. In anderen Fällen werden wohlbekannte Systeme
in Form eines Schemas oder Blockdiagramms gezeigt, um die vorliegende
Erfindung nicht unnötig
zu verschleiern.
-
1 zeigt
ein Blockdiagramm eines Computersystems zur Verwendung in Verbindung
mit der Erfindung. CPU 10 ist mit Hauptspeicher 11 und
Zwischenspeicher 13 durch Bus 12 gekoppelt. Hauptspeicher 11 ist
aus pufferbarem Speicher 15 und nichtpufferbarem Speicher 14 zusammengesetzt. Abtastspeicher 16 der
vorliegenden Erfindung befinden sich im pufferbarem Speicher 15.
Filterkoeffizientenfelder 17 befinden sich auch im pufferbaren
Speicher 15. Es ist wünschenswert,
dass Pufferspeicher 16 dynamisch zuteilbar sind, um die
Flexibilität
des Systems zu erhöhen.
-
2a zeigt
das Pufferungsschema der beispielhaften Ausführungsform der Erfindung. Ein
Horizontalabtastpuffer 20, 8 Bytes breit und N Zeilen lang,
wird verwendet, um 8 Zeilen von Bilddaten von dem Quellenbild entgegenzunehmen.
Demnach ist N der Bytelänge
einer Quellenbildzeile gleich, die größer oder gleich der Pixellänge der
Quellenbildzeile sein kann. Ausrichtungsangelegenheiten und Kantenbedingungen
werden behandelt, während
die Daten vom Speicher in den Horizontalabtastpuffer bewegt werden.
Anpassung der Kantenbedingungen und Ausrichtungsangelegenheiten
wird weiter unten in vollem Umfang erklärt. Die Daten in dem Horizontalabtastpuffer
werden transponiert und untergebracht, um Bänder zur Verarbeitung auszusetzen. Das
Transformieren wird auch in vollem Umfang weiter unten erklärt werden.
Ein Horizontalfilter 25 wird auf die transponierten Daten
in dem Horizontalabtastpuffer angewandt, wobei das Ergebnis der
Filterung in einem Zwischenpuffer 23 untergebracht wird, 8
Bytes breit und M Zeilen lang. M ist der Länge einer Zeile in dem Zielortbild
gleich. Die Daten in dem Zwischenspeicher werden entweder in einen
ersten Vertikalabtastpuffer 21 oder einen zweiten Vertikalabtastpuffer 22 umtranspo niert.
Controller 24 schreibt vor, welcher Puffer die augenblicklichen
Daten aus dem Zwischenpuffer 23 erhält. Ein Vertikalfilter 26 wird
auf die Daten in dem Vertikalabtastpuffer 21, 22 angewandt.
In einer beispielhaften Ausführungsform, bedingt
die Anwendung eines Vertikalfilters 8 Bytes von jeder relevanten
Zeile in dem Vertikalabtastpuffer zu nehmen. Relevante Zeilen werden
von der Filterbreite vorgeschrieben, z. B. ein Filter mit der Breite
4 führt
zu vier relevanten Zeilen. Parallele Multiplikationen und Additionen
werden mit diesen Daten durchgeführt,
um vertikalabgetastete Daten zu erhalten, die möglicherweise, wie unten erklärt, konvertiert werden
müssen.
VIS stellt fmul8x16 und fpadd16 bereit, die optimal zur Verwendung
bei paralleler Multiplikation und Addition dieses vertikalen Filterschemas
sind.
-
Das Rückwärtsabbildungsschema ist derart, dass
während
die Verarbeitung in dem Quellenbild absteigend fortschreitet; es
auch im Quellenbild streng absteigend fortschreitet. Deshalb, sobald
der Vertikalfilter 26 Daten über die des zweiten Vertikalabtastpuffers 22 hinaus
benötigt,
werden die Daten in dem ersten Abtastpuffer 21 nie mehr
wieder kontrolliert. Deshalb kann der erste Abtastpuffer sofort mit
neuen Daten nachgefüllt
werden. Dies setzt voraus, dass die Filterbreite kleiner oder gleich
der Anzahl der Zielortzeilen in dem Puffer ist, in diesem Beispiel
acht. Während
der Vertikalfilter 26 den zweiten Vertikalabtastpuffer 22 durchquert,
tritt er wieder beim ersten Vertikalabtastpuffer ein, um neue Daten zu
verarbeiten. Sobald der Vertikalfilter 26 die Durchquerung
von dem zweiten Abtastpuffer zurück
zum ersten vertikalen Abtastpuffer 21 gemacht hat, kann der
vertikale Abtastpuffer 22 nachgefüllt werden. Demnach schaltet
Controller 24 die von dem ersten zu dem zweiten Abtastpuffer 22 gerichteten
Daten in Reaktion auf die Durchquerung des Vertikalfilters 26 von
einem Puffer zu dem nächsten.
Der Controller 24 schaltet dann zwischen den Vertikalabtastpuffern
hin und her, sobald benötigte
Daten nicht länger
vorhanden sind. Für
einen Fachmann ist es selbstverständlich, dass zusätzliche
Puffer verwendet werden könnten,
ohne von dem Schutzumfang oder der Betrachtung der Erfindung abzuweichen.
-
Da eine Anwendung des Filters nicht
einen 8 Bit Wert ergeben könnte,
konvertiert Konverter 27 sechzehn Ausgabebits des Vertikalfilters 26 zu
einem 8 Bit Eingang für
die M Byte Ausgabezeile 28. Außerdem hält der Konverter 27 die
Extreme bei 0 und 255 fest. Wenn die Erfindung mit dem Ultrasparc
Abbildungsbefehlssatz (VIS) verwendet wird, erfüllt der Befehl fpack diese
Konvertierungsfunktion.
-
Bezeichnenderweise, weil die Horizontalabtastung
und Vertikalabtastung unabhängig
von einander sind, kann zusätzliche
Horizontalabtastung zusammen mit der Vertikal abtastung der vorher
horizontal abgetasteten Daten abgetastet werden. Es ist auch innerhalb
des Schutrumfangs und der Betrachtung dieser Erfindung, zusätrliche
Zwischenpuffer 23 vorzusehen, um keinen Flaschenhals beim
Zwischenpuffer 23 zu erzeugen. Diese Anordnung ist ideal
für Multi-Threading,
da die Arbeitslast bequem auf mehrere Prozessoren verteilt werden
kann. Demnach, sobald der Horizontalabtastpuffer vollständig in den
Zwischenpuffer abgetastet wurde, kann er nachgefüllt werden, und die Verarbeitung
kann wieder beginnen.
-
2b zeigt
ein Beispiel-Quellenbild 30 mit acht Zeilen, jede 24 Bytes
lang. Horizontalabtastpuffer 20 ist gefüllt mit z. B. den ersten 8
Bytes der Zeile 31, die in Zeile 0 des Horizontalabtastpuffers 20 übergehen,
Bytes 9–16
der Zeile 31, die in Zeile 8 des Horizontalabtastpuffers 20 übergehen,
und Bytes 17–24,
die in Zeile 16 des Horizontalabtastpuffers 20 übergehen.
Gleiches gilt für
Reihe 32, wobei Bytes 1–8 in Reihe 1 des Horizontalabtastpuffers 20 übergehen,
Bytes 9–16
die in Zeile 9, und Bytes 17–24
die in Zeile 17 übergehen.
Die restlichen Zeilen folgen dem gleichen Muster. Wenn das Quellenbild 30 aus zusätzlichen
Zeilen zusammengesetzt wäre,
würden sie
bei einer nachfolgenden Füllung
des Horizontalabtastpuffers 20 verarbeitet werden. Wenn
das Beispielbild 30 Zeilen größerer Länge aufweisen würde, würde die
Länge des
Horizontalabtastpuffers proportional erhöht werden. Bezeichnenderweise
ist die Länge
des Horizontalabtastpuffers dem nächsten Vielfachen von 8 gleich,
größer oder
gleich der Länge der
Quellenbildlinie. Zum Beispiel würde
jede Linie eines Quellenbilds mit Linien zwischen 25 und 32 Bytes
Länge zu
einem Horizontalabtastpuffer von 32 Linien Länge führen. Jede Iteration der Verarbeitung des
Horizontalabtastpuffers, bearbeitet 8 komplette Linien des Quellenbildes.
-
Kantenbedingungen sind wohl bekannt
und betreffen Skalierungsalgorithmen. Grundlegend festgestellt besteht
ein Problem, wenn ein Pixel von links oder das äußerste linke Pixel benötigt wird.
Was wird getan? Kantenbedingungen können leicht erfüllt werden,
indem der Horizontalabtastpuffer gefüllt wird. Zum Beispiel, wenn
wir zwei Kantenpixel benötigen, beginnt
man die Daten an der dritten Stelle jeder Zeile in dem Horizontalabtastpuffer
unterzubringen. Die Eingaben in dem ersten und zweiten Byte können entweder
mit Kopien der ersten eingegebenen Daten in dem dritten Byte synthetisiert
werden oder z. B. mit Null. Ausrichten ist eine andere Angelegenheit
die früh
in dem Pufferschema adressiert werden kann. Grundsätzlich gibt
es keine Garantie, dass eine Quellenbildzeile ausgerichtet mit einem
Speichewort beginnt. Demnach, wo das System mehrfache Bytes wiederfindet,
z. B. 8 zugleich, gibt es keine Gewissheit, dass eine Quellenzeile
mit einem geraden Vielfachen von 8 beginnen wird. Demnach kann das
erste Wiederfinden Daten beinhalten, die nicht inner halb des Quellenbilds
sind und die der Benutzer nicht puffern will. VIS stellt die Befehle
faligndata und alignaddr bereit, die es erlauben, wenn sie gemeinsam verwendet
werden, dass Daten aus dem Speicher genommen und leicht in dem Horizontalabtastpuffer ausgerichtet
werden, durch Verwenden eines internen Registers, des Grafikstatusregistes
("gsr"). Zum Beispiel,
wenn eine Gruppe von 8 Bytes r, fünf Bytes Ausschuss gefolgt
von drei Bytes gültiger
Bitdaten aufweist, und eine andere Gruppe s, acht gültige Bytes
enthält,
setzt alignaddr (0,5) die gsr Ausrichtungsbits auf 5. Nachfolgende
Verwendung des Befehls faligndata auf r und s, wird 8 Bytes gültiger Daten
ergeben. Demnach, wo t die nächste
gültige Gruppe
von acht Bytes von Bilddaten enthält, wird faligndata (r, s)
und falingdata (s, t) r5–7 s0–4 bzw.
s5–7 t1–4 ergeben.
Eine analoge Angelegenheit besteht beim Schreiben der Ergebnisse
einer vertikalen Übergabe in
einen möglicherweise
nicht ausgerichteten Zielort. Der faligndata Befehl kann verwendet
werden, Ausrichtungsangelegenheiten des Zielorts mit den Quellendaten
zu lösen.
-
Transponieren wird innerhalb des
Horizontalabtastpuffers 20 in acht Zeilenblöcken durchgeführt, z.
B. werden in dem Beispiel von 2b Zeilen
0–7 transponiert,
Zeilen 8 bis 15 werden transponiert und Zeilen 16 bis 23 werden
transponiert. 3a zeigt eine
solche Transponierung. Solche byteweise Transponierung setzt jedes
Mal Daten Band für
Band aus. Zum Beispiel, wenn in 3a,
RGB bandverschachteltes Format vorhanden wäre, würde 0, 3, 6 dem roten Band
1, 4, und 7 dem grünen
Band entsprechen, und 2 und 5 würden
dem blauen Band entsprechen. Im Allgemeinen ist Transponieren ineffizient,
weil jede Zeile der Ausgabe von jeder eingegebenen Zeile abhängt. Glücklicherweise
beinhaltet VIS eine Funktionalität
bei der zwei 4-Byteworte
verbunden werden können,
um eine Gruppe von 8 (Doppelwort) Bytes zu bilden. Der fpmerge Befehl
auf a0 a1 a2 a3 und 0 e1 e2 e3 angewandt, ergibt a0 e0 a1 e1 a2
e2 a3 e3. 3c zeigt einen
Transponierungsbaum, der die Verbindungsfunktionalität verwendet, um
die Transponierung zu bewerkstelligen. Wie in 3c innerhalb eines 8 × 8 Segments gezeigt, wird jedes
Wort mit einem 4 Zeilen entfernten Wort verbunden. Dies ist der
Effekt einen 8 × 8
Block als zwei 4 × 8
Blöcke
zu transponieren, wie in 3b gezeigt. Der
Horizontalabtastpuffer kann hier unter Verwendung dieses Verfahrens
transponiert werden, oder die Daten können in einem Vorpuffer untergebracht werden
und in den Horizontalabtastpuffer 20 transponiert werden.
Es wird erwartet, dass zukünftige
Computersysteme die Funktionalität
des fpmerge Befehls des VIS unterstützen werden. Entsprechend ist
nicht beabsichtigt, dass dies Verfahren der Transponierung und Bildskalierung
auf das Ultrasparc System beschränkt
sein soll.
-
Bezeichnenderweise ist es wesentlich,
dass die Daten angemessen ausgerichtet werden, bevor die Transponierung
durchgeführt
wird. Die Transponierung der Daten im Speicher, zieht einen Leistungsnachteil
nach sich, weil, (1) Sorgfalt getroffen werden muss um ein Überschreiben
der Quellenbilddaten zu verhindern, und (2) weil im Speicher keine Gewissheit über eine
korrekte Ausrichtung besteht, z. B. könnte das erste Wort einer Quellenzeile
an einem willkürlichen
Punkt im Speicherwort beginnen, und es gibt keine Gewissheit dass
folgende Quellenzeilen relativ zum Speicherwort gleich ausgerichtet sind.
Das oben beschriebene Pufferungsschema ordnet die Daten angemessen,
so dass jeder 8 × 8
Block für
die Transponierung ausgerichtet ist.
-
Sobald die Daten transponiert wurden
und horizontal in den Zwischenpuffer 23 abgetastet wurden,
werden sie unter Verwendung des gleichen Transponierungsschemas
in einen der Vertikalabtastpuffer 21, 22 umtransponiert.
Der Fachmann wird erkennen, dass es möglich ist die vorliegenden
Daten innerhalb des Zwischenpuffers 23 zu transponieren. Entsprechend
wäre es
möglich,
den Zwischenpuffer 23 vollständig zu eliminieren und die
vorliegenden Daten in einem der Vertikalabtastpuffer 21, 22 zu transponieren.
-
Wenn es gewünscht wird weniger als alle Bänder in
dem Quellenbild auszudehnen, ist es möglich, das schrittweise, durch
angemessenes Transponieren der Daten zu erreichen. Zum Beispiel,
wenn die Daten in rotem, grünem,
blauem Format sind und man nur das blaue Band auszudehnen wünscht, würde das
Filtern mit Zeile 2 beginnen und Schritt bei 3 zum Füllen des
Zwischenspeichers. Dieses führt
zu einem Zwischenpuffer mit gültigen
blauen Daten und Ausschuss in den roten und grünen Datenstellen. Eine Bitmaske
kann zur Kanalauswahl beibehalten werden, um den Ausschuss davor
zu bewahren in den Vertikalabtastpuffer geschrieben zu werden. Die Maske
sollte zumindest acht Bit lang und ein gerades Vielfaches der Zahl
der Ausgangskanäle
sein. Nach jeder Anwendung wird die Maske um acht gedreht und auf
die nächsten
acht Zeilen des Zwischenspeichers angewandt.
-
Manchmal ist es wünschenswert die Ausgabe in
ein unterschiedliches Format als das Quellenformat zu setzen. Zum
Beispiel kann der Bildwiederholpuffer, der benutzt wird, um ein
Bild auf dem Monitor auszugeben, von dem Format xbgr sein, während die
Quelle in einem rgb Format ist. In einem solchen Fall, werden die
Bänder,
da sie horizontal verarbeitet werden, derart in dem Zwischenpuffer
untergebracht, dass die Umtransponierung in den Vertikalabtastpuffer
zu der gewünschten
Ausrichtung führt. Zum
Beispiel, werden rote Daten aus dem ersten Eingang in dem Horizontalabtastpuffer
in den Eingang des Zwischenpuffers bewegt, der in dem vierten Schlitz
des Vertikalabtastpuffers sein wird. Eine Maske wird verwendet,
um z. B. die X-Zeilen des Vertikalabtastpuffers auszublenden, die
nicht gültige
Daten des Quellenbildes darstellen. Das VIS unterstützt Teilabspeicherungen
und Kantenbefehle, die in einer beispielhaften Ausführungsform
verwendet werden, um die gewünschte
Ausgabeformatierung zu bewirken.
-
In der vorhergehenden Beschreibung
wurde die Erfindung, mit Bezug auf besondere Ausführungsformen
davon, beschrieben. Es wird dennoch offenkundig sein, dass unterschiedliche
Abwandlungen dazu gemacht werden können, ohne vom Schutzumfang
der Erfindung, wie in den angefügten
Ansprüchen
dargelegt, abzuweichen. Entsprechend sind die Beschreibung und Zeichnungen
veranschaulichend zu betrachten, statt in einem einschränkenden
Sinn. Demnach sollte der Schutrumfang der Erfindung nur durch die
angefügten
Ansprüche
eingeschränkt
werden.