DE102005055665B4 - Verfahren zur Interpolation von Volumendaten - Google Patents

Verfahren zur Interpolation von Volumendaten Download PDF

Info

Publication number
DE102005055665B4
DE102005055665B4 DE102005055665A DE102005055665A DE102005055665B4 DE 102005055665 B4 DE102005055665 B4 DE 102005055665B4 DE 102005055665 A DE102005055665 A DE 102005055665A DE 102005055665 A DE102005055665 A DE 102005055665A DE 102005055665 B4 DE102005055665 B4 DE 102005055665B4
Authority
DE
Germany
Prior art keywords
interpolation
data
points
order data
determined
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
DE102005055665A
Other languages
English (en)
Other versions
DE102005055665A1 (de
Inventor
Dr. Schneider Robert
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Siemens Healthcare GmbH
Original Assignee
Siemens AG
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Siemens AG filed Critical Siemens AG
Priority to DE102005055665A priority Critical patent/DE102005055665B4/de
Priority to US11/602,269 priority patent/US20070120852A1/en
Publication of DE102005055665A1 publication Critical patent/DE102005055665A1/de
Application granted granted Critical
Publication of DE102005055665B4 publication Critical patent/DE102005055665B4/de
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • G06F17/10Complex mathematical operations
    • G06F17/17Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method
    • G06F17/175Function evaluation by approximation methods, e.g. inter- or extrapolation, smoothing, least mean square method of multidimensional data
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T3/00Geometric image transformations in the plane of the image
    • G06T3/40Scaling of whole images or parts thereof, e.g. expanding or contracting
    • G06T3/4007Scaling of whole images or parts thereof, e.g. expanding or contracting based on interpolation, e.g. bilinear interpolation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Mathematical Physics (AREA)
  • Computational Mathematics (AREA)
  • Mathematical Analysis (AREA)
  • Mathematical Optimization (AREA)
  • Pure & Applied Mathematics (AREA)
  • Data Mining & Analysis (AREA)
  • Algebra (AREA)
  • Databases & Information Systems (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Image Generation (AREA)
  • Image Processing (AREA)

Abstract

Verfahren zur Interpolation von Volumendaten, bei dem mit Hilfe eines Prozessors (14) die einer Menge von Abtastpunkten (12) zugeordneten Stützpunkte (13) ermittelt werden und bei dem von Stützpunktwerten der ermittelten Stützpunkte (13) auf die den Abtastpunkten (12) zuzuordnenden Abtastpunktwerte interpoliert wird, wobei die Stützpunktwerte der ermittelten Stützpunkte (13) in einem linearen Stützwertspeicherbereich einer Speichereinheit (21, 23) zwischengespeichert werden und wobei auf die Abtastpunktwerte mit Hilfe von Vektoroperationen interpoliert wird, dadurch gekennzeichnet, dass der lineare Stützwertspeicherbereich mit mehr Stützwerten gefüllt wird, als durch einen einzelnen Ladebefehl in ein Register (19) für die Vektoroperationen ladbar sind, so dass eine Fast-Forward-Violation in dem Prozessor (14) vermieden wird.

Description

  • Die Erfindung betrifft ein Verfahren zur Interpolation von Volumendaten, bei dem mit Hilfe eines Prozessors die einer Menge von Abtastpunkten zugeordneten Stützpunkte bestimmt werden und bei dem von Stützpunktwerten der Stützpunkte auf die den Abtastpunkten zu zuzuordnenden Abtastpunktwerte interpoliert wird.
  • Derartige Verfahren kommen zum Einsatz, wenn mit diskreten Volumendaten gearbeitet wird. Die Volumendaten sind dabei diskreten Volumenelementen, den so genannten Voxeln zugeordnet. Die Volumendaten können sowohl Skalare als auch Vektoren sein. Bei einem mit Hilfe der Computertomographie erstellten dreidimensionalen Modells eines Körperteils kann es sich bei den Volumendaten beispielsweise um die Dichte des untersuchten Körperteils handeln. Wenn ein Schnitt durch das dreidimensionale Modell erstellt werden soll, müssen die Volumendaten auf das Gitter des Schnitts interpoliert werden. Das Gitter des Schnitts wird von Abtastpunkten aufgespannt, auf die von Stützpunkten der ursprünglichen Volumendaten interpoliert werden muss. Um die Interpolation ausführen zu können, müssen die den Abtastpunkten benachbarten Stützpunkte bestimmt werden, von denen auf die Abtastpunkte interpoliert werden kann. Zu diesem Zweck werden zunächst Ordnungsdaten der benachbarten Stützpunkte bestimmt. Bei den Ordnungsdaten kann es sich um ein- oder mehrdimensionale Indices, Schlüsselworte mit alphanumerischen Zeichen, physikalische Adressen oder Ähnliches handeln.
  • Im Grunde handelt es sich um das Problem, diejenigen Volumenelemente zu bestimmen, in denen eine Menge von Abtastpunkten liegt und diese Volumenelemente auf die Position der Abtastpunkte zu interpolieren. Die Menge von Abtastpunkten kann dabei auf einer Kurve, auf einer zweidimensionalen Fläche oder auch in einem Volumenbereich liegen.
  • Bislang wird für jeden Abtastpunkt das zugehörige Raumelement oder Voxel bestimmt, in dem der Abtastpunkt liegt, und unmittelbar danach die Interpolation durchgeführt. Die skalare Bestimmung des betreffenden Raumelements und die unmittelbar darauf folgende Interpolation erfordern einen hohen Rechenaufwand, da die Berechnung seriell für eine große Anzahl von Raumpunkten durchgeführt werden muss.
  • Moderne Prozessoren für Arbeitsplatzrechner sind jedoch auch in der Lage, zur Verarbeitung von Bilddaten Vektoroperationen durchzuführen. Bei den Vektoroperationen werden durch einen einzelnen Befehl Daten parallel verarbeitet (SIMD = Single Instruction Multiple Data). Die Verwendung von Vektoroperationen für die Interpolation setzt allerdings voraus, dass die für die Durchführung der Interpolation erforderlichen Daten linear im Speicher liegen, was naturgemäß nicht der Fall ist, wenn auf eine entlang einer beliebigen Kurve gelegene Menge von Abtastpunkten interpoliert wird.
  • In der Regel müssen daher zwischen der Bestimmung der Indices und der eigentlichen Interpolation skalare Operationen zum Umsortieren oder Sammeln von Daten eingeschoben werden. Dabei ist es zwar grundsätzlich möglich, Befehle zu verwenden, die den unmittelbaren Datenaustausch zwischen den Registern für Vektoroperationen und den skalaren Registern ermöglichen. Derartige Befehle sind jedoch sehr zeitaufwändig, so dass die durch die Verwendung von Vektoroperationen gewonnene Zeit wieder verloren geht.
  • Ein Beispiel für ein solches Vorgehen mit einer Interpolation auf Abtastpunktwerte mit Hilfe von SIMD-Operationen geht aus dem Aufsatz „Real-Time Multimodal Medical Image Processing: A Dynamic Volume-Rendering Application”, M. Santarelli, V. Positano, L. Landini, erschienen in: IEEE TRANSACTIONS ON INFORMATION TECHNOLOGY IN BIOMEDICINE; VOL. 1, No. 3, SEPTEMBER 1997.
  • Desweiteren zeigt der Aufsatz „Parallel Volume Rendering” R. Westermann, erschienen in IEEE, Seiten 693 fortfolgende, einen Ansatz zum Rendern von großen Volumendatensätzen auf einer MIMD-Rechnerarchitektur (MIMD: Multiple instruction, multiple data), wobei jeder Prozessor über einen eigenen Speicher verfügt.
  • Ein weiterer Ansatz, um hocheffizient 3D-Rendering und Volumenvisualisierungstechniken auf Vektorrechnern auszuführen, ist beschrieben in „Approaches that exploit vectorparallelism for three rendering and volume visualization techniques”, T. S. Newman, N. Tang, erschienen in Computer & Graphics 24 (2000) 755–774.
  • Im Stand der Technik sind desweiteren Ansätze bekannt, die Adressierungsschemata und Speicherschemata kombinieren. So offenbart „A memory addressing and access design for real-time volume rendering” von M. Doggett und M. Meißner, eschienen in IEEE, 1999 in Abschnitt IV, Seite 344 bis 347 einen Ansatz zur Verbesserung der Performance unter Verwendung eines Adressierungsschemas und mehreren FIFO-Pufferspeichern, um einen sogenannten „Pipelinestall” zu vermeiden.
  • Ein weiterer Ansatz, um die Performance durch die Anwendung eines bestimmten Caching Schemas zu verbessern, ist offenbart in „A „Brick” caching scheme for 3D medical imaging” von J. Li, R. Shekhar und C. Papachristou, erschienen 2004 in IEEE, Seite 563 bis 566. Dabei wird die Brick-Prefetching Strategie zum Vorladen der Daten in den Pufferspeicher anhand von partitionierten dreidimensionalen Volumeneinheiten verwendet.
  • Ausgehend von diesem Stand der Technik liegt der Erfindung daher die Aufgabe zugrunde, ein Verfahren zur effektiven Interpolation von Volumendaten zu schaffen.
  • Diese Aufgabe wird durch ein Verfahren mit den Merkmalen des unabhängigen Anspruchs gelöst. In davon abhängigen Ansprüchen sind vorteilhafte Ausgestaltungen und Weiterbildungen angegeben.
  • Das Verfahren zeichnet sich dadurch aus, dass die Stützpunktwerte der ermittelten Stützpunkte in einen linearen Stützwertspeicherbereich einer Speichereinheit zwischengespeichert werden und das auf die Abtastpunkte mit Hilfe von Vektoroperation interpoliert wird.
  • Unter einem linearen Speicherbereich soll in diesem Zusammenhang ein Speicherbereich verstanden werden, der auf physikalischer Ebene inkrementell beschrieben oder ausgelesen werden kann. Ferner soll unter Speichereinheit insbesondere ein Datenspeicher mit wahlfreiem Zugriff verstanden werden.
  • Zwar ist das Zwischenspeichern von Daten in einem linearen Speicherbereich mit einem gewissen Zeitaufwand verbunden, aber das Schreiben in den linearen Speicherbereich kann in der Regel mit hoher Geschwindigkeit erfolgen und die zusätzlich benötigte Zeit kann bei den nachfolgenden Berechnungen mit Hilfe von Vektoroperationen wieder hereingeholt werden, so dass insgesamt wesentlich weniger Zeit benötigt wird. Insbesondere können vorausgehende skalare Operationen in den Speicherbereich schreiben und nachfolgende Berechnungen können auf linear abgelegte Daten mit Vektoroperationen zugreifen. Infolgedessen können nachfolgende Berechnungen auch Vektoroperationen ausführen, durch die eine Vielzahl von Daten parallel verarbeitet werden kann. Insgesamt wird daher beim Zwischenspeichern in einen linearen Speicherbereich im Vergleich zu einem rein skalaren Verfahren oder einem Verfahren, bei dem ein Datenaustausch zwischen skalaren Registern und Vektorregistern stattfindet, Zeit eingespart.
  • Erfindungsgemäß ist die Ablage der Stützpunktwerte im linearen Speicherbereich für den Zugriff mit Hilfe von Vektoroperation optimiert. Dadurch können die Daten aus dem linearen Speicherbereich mit hoher Geschwindigkeit ausgelesen und in den linearen Speicherbereich übertragen werden.
  • Erfindungsgemäß wird der Speicherbereich mit einer größeren Datenmenge an Stützwerten gefüllt, als durch einzelne Vektoroperation auslesbar oder schreibbar ist. In diesem Fall können die in unterschiedlicher Breite erfolgenden Speicherzugriffe mit ausreichendem Zeitabstand durchgeführt werden, um zu vermeiden, dass ein Ereignis eintritt, das dem Fachmann unter der Bezeichnung ”Fast Forward Violation” bekannt ist und das dazu führt, dass der Prozessor gehemmt wird, da sichergestellt sein muss, dass keine Kollisionen zwischen den auf den gleichen Speicherbereich mit unterschiedlicher Breite zugreifenden Operationen auftreten.
  • Um das Verfahren zu beschleunigen, werden zu Beginn des Verfahren zunächst Ordnungsdaten der den Abtastpunkten zuzuordnenden Stützpunkte mit Hilfe von Vektoroperationen bestimmt und die Ergebnisse in einem linearen Ordnungsdatenspeicherbereich abgespeichert. Nachfolgende skalare Operationen, durch die die Stützpunktwerte aus dem Speicher ausgelesen, gegebenenfalls sortiert und in den Stützwertspeicherbereich abgespeichert werden, können dann auf den Ordnungsdatenspeicherbereich zugreifen, ohne das eine Fast Forward Violation ausgelöst wird.
  • Auch der Ordnungsdatenspeicherbereich kann für einen Datenzugriff über Vektoroperation optimiert sein. Ferner wird der Ordnungsdatenspeicherbereich vorzugsweise mit einer größeren Datenmenge an Ordnungsdaten gefüllt, als durch einzelne Vektoroperationen in den Ordnungsdatenspeicherbereich schreibbar sind.
  • Weitere Eigenschaften und Vorteile der Erfindung gehen aus der nachfolgenden Beschreibung hervor, in der Ausführungsbeispiele der Erfindung anhand der beigefügten Zeichnung im Einzelnen erläutert werden. Es zeigen:
  • 1 ein Blockschaltbild einer medizinischen Vorrichtung;
  • 2 ein zweidimensionaler Raumbereich, der entlang einer Geraden durchlaufen wird;
  • 3 ein Blockschaltbild eines Mikroprozessors; und
  • 4 ein Ablaufdiagramm eines Interpolationsverfahren.
  • 1 zeigt ein medizinisches Diagnosegerät, bei dem es sich beispielsweise um ein Gerät für die Magnet-Resonanz-Tomographie handelt. Ein derartiges medizinisches Diagnosegerät umfasst unter anderen einen Mikrowellensender 2 und einen Mikrowellenempfänger 3, sowie eine in 1 nicht dargestellte Vorrichtung zur Erzeugung eines starken Magnetfelds, das den Körper eines zu untersuchenden Patienten 4 durchdringt. Anhand der vom Mikrowellenempfänger 3 nach dem Aussenden eines Mikrowellenpulses durch den Mikrowellensender 2 empfangenen Signale können dreidimensionale Modelle vom Körperinneren des Patienten 4 erstellt werden. Für die Signalauswertung wird üblicherweise ein Rechner 5 verwendet, der die Ergebnisse an einem Bildschirm 6 anzeigt. In 1 zeigt der Bildschirm 6 eine dreidimensionale Darstellung eines inneren Organs 7, von dem eine Schnittansicht entlang einer Schnittebene 8 angefertigt werden soll. Dabei kommt beispielsweise ein Verfahren zum Einsatz, das dem Fachmann unter der Bezeichnung multiplanare Rekonstruktion (= MPR) bekannt ist.
  • Im Rahmen dieses Verfahrens müssen die Volumendaten, die das Organ 7 darstellen, interpoliert werden, um die Volumendaten auf dem Gitter der Schnittebene 8 erzeugen zu können.
  • In 2 ist der Einfachheit halber ein zweidimensionales Volumen 9 dargestellt, das aus zwanzig Voxeln 10 zusammengesetzt ist. Durch das Volumen 9 ist eine Schnittlinie 11 gelegt, die innerhalb des Volumens 9 zwölf Abtastpunkte 12 aufweist. An den Abtastpunkten 12 sollen die Volumendaten durch eine Interpolation von den Abtastpunkten 12 zugeordneten Volumendaten bestimmt werden. Dazu ist es erforderlich, diejenigen Stützpunkte 13 zu bestimmen, die den Abtastpunkten 12 am nächsten legen.
  • Die Stützpunkte 13 sind in 2 durch schwarze Kreise gekennzeichnet. In 2 sind insgesamt 30 Stützpunkte eingezeichnet. Die für die Interpolation relevanten Stützpunkte 30 sich diejenigen, die den Ecken der in 2 schraffierten Voxeln 10 zugeordnet sind.
  • Ferner sei angemerkt, dass die Schnittlinie 11 in 2 der Schnittebene 8 in 1 entspricht.
  • Grundsätzlich könnte bei der Interpolation der Volumendaten so vorgegangen werden, dass zunächst zu einem Abtastpunkt 12 das zugehörige Voxel 10 bestimmt wird und dann aus den dem Voxel 10 zugeordneten Volumendaten auf den Abtastpunkt 12 interpoliert wird. Eine derartige Vorgehensweise ist jedoch nicht performant, da die Möglichkeiten moderner Prozessoren nicht ausgeschöpft werden.
  • Im Folgenden sei daher die Architektur eines Prozessors 14 betrachtet.
  • Der Prozessor 14 umfasst eine Arithmetik- und Logikeinheit 15, die ein Rechenwerk 16 für Integeroperationen, ein Rechenwerk 17 für Gleitkomma-Operationen und ein Rechenwerk 18 für Vektoroperationen aufweist. Außerdem umfasst die Arithmetik- und Logikeinheit 15 Register 19, aus denen die Rechenwerke 16 bis 18 Daten auslesen und in die die Rechenwerke 16 bis 18 Daten zurückspeichern können. Zur Pufferung des Datenflusses umfasst der Prozessor 14 ferner einen Cache 20 erster Ordnung, der Daten mit einem Cache 21 zweiter Ordnung austauscht. Der Cache 21 steht in Verbindung mit einem Bussystem 22, das auch an einen Arbeitsspeicher 23 angeschlossen ist. Im Cache erster Ordnung 20 enthaltene Befehle können von einer Befehlseinheit 24 geholt werden. Die Befehlseinheit 24 umfasst unter anderem einen Befehlsdecoder 25, der die Befehle in Mikrocode umsetzt und den Mikrocode einer Pipeline 26, 27 oder 28 zuordnet. Mit dem in den Pipelines 26 bis 28 enthaltenen Mikrocode wird die Arithmetik- und Logikeinheit 15, insbesondere die Rechenwerke 16 bis 18 gesteuert. Es sei angemerkt, dass die Pipelines 26 bis 28 auch der Arithmetik- und Logikeinheit 15 zugerechnet werden können.
  • Für die Bearbeitung von Bilddaten ist insbesondere das Rechenwerk 18 für Vektoroperationen von Bedeutung. Denn mit diesem Rechenwerk können mehrere zu einem Bildpunkt im Register 19 abgespeicherte Daten durch einen einzelnen Befehl aus dem Register 19 ausgelesen und verarbeitet werden. Es besteht daher grundsätzlich die Möglichkeit, die Abtastpunkte 12 aus 2 mit Hilfe von Rechenoperationen auszuführen. Dies setzt allerdings voraus, dass die zu verarbeitenden Daten linear im Speicher, insbesondere im Cache 21 zweiter Ordnung oder im Arbeitsspeicher 23 liegen. Dies ist naturgemäß nicht der Fall, wenn die Abtastpunkte 12 entlang einer beliebigen Kurve durch das Volumen 9 liegen.
  • In 4 ist daher ein Interpolationsverfahren 29 dargestellt, dass entsprechend einer Multipass-Strategie strukturiert ist. Das Interpolationsverfahren 29 beginnt mit einer Überprüfung 30 und ist im Übrigen in einen ersten Durchgang 31, einen zweiten Durchgang 32 und einen dritten Durchgang 33 unterteilt. Im ersten Durchgang 31 werden die relevanten Stützpunkte 13 bestimmt. Im zweiten Durchgang 32 werden die zugeordneten Stützwerte ausgelesen und im dritten Durchgang 33 erfolgt die eigentliche Interpolation.
  • Bei der Überprüfung 30 zu Beginn des Interpolationsverfahrens 29 wird festgestellt, ob die Abtastpunkte 12 innerhalb des Volumens 9 liegen. Wenn die Abtastpunkte außerhalb des Volumens 9 oder am Rand des Volumens 9 liegen, ist eine Sonderfallbehandlung 34 notwendig. Falls sich die Abtastpunkte 12 außerhalb des Volumens 9 befinden, kann der Wert für die Abtastpunkte auf einen Standardwert, zum Beispiel 0 gesetzt werden. Wenn sich der Abtastpunkt 12 am Rand des Volumens 9 befindet, wird ein spezielles Interpolationsverfahren benutzt, das mit wenigen Stützpunkten 13 auskommt. Das spezielle Interpolationsverfahren kann gemäß bisherigen Lösungsansätzen durchgeführt werden. Daneben kann der zweite Durchgang 32 für Randsituation angepasst werden. Beispielsweise können Stützpunktewerte von im Inneren des Volumens 9 gelegenen Stützpunkten 13 extrapoliert werden, so dass die am Rand des Volumens 9 gelegenen Abtastpunkte 12 wie Abtastpunkte 12 behandelt werden können, die im Inneren des Volumens 9 liegen. Die Behandlung der im Randbereich liegenden Abtastpunkte 12 ist für die Schnelligkeit und Effizienz des Interpolationsverfahrens 29 nicht wesentlich, da in der Praxis nahezu alle Abtastpunkte 12 innerhalb oder außerhalb des Volumens 9 liegen.
  • Im ersten Durchgang 31 wird zunächst eine Voxelbestimmung 35 durchgeführt, durch die diejenigen Voxel 10 bestimmt werden, in denen die Abtastpunkte 12 liegen. Im Rahmen der Voxelbestimmung 35 können beispielsweise die Ordnungszahlen von denjenigen Voxeln 10 bestimmt werden, in denen die Abtastpunkte 12 liegen. Bei den Ordnungszahlen kann es sich um ein- oder mehrdimensionale Indices, Schlüsselworte mit alphanumerischen Zeichen, physikalische Adressen oder Ähnliches handeln. Ferner ist es auch möglich, die Speicheradresse eines einzelnen benachbarten Stützpunktes 13 zu bestimmen, wenn dadurch die Speicheradressen der übrigen relevanten Stützpunkte 13 festliegen. Bei einer trilinearen Interpolation im dreidimensionalen Raum genügt es beispielsweise, die Speicheradresse eines der für die Durchführung der Interpolation notwendigen acht Stützpunkte 13 zu ermitteln. Die Adressen der übrigen Stützpunkte 13 lassen sich dann aus der Adresse des ermittelten Stützpunktes 13 bestimmen.
  • Die Voxelbestimmung 35 kann mit Hilfe von Vektoroperation effizient durchgeführt werden, indem mehrere Ordnungsdaten gleichzeitig bestimmt werden. Durch Abspeichern 36 können die erhaltenen Ordnungsdaten in einem linearen Datenfeld (= array) abgelegt werden. Die Vektoroperationen werden vorzugsweise mit SIMD durchgeführt.
  • Vektoroperationen lassen sich zur Ermittlung von Ordnungsdaten insbesondere dann verwenden, wenn sich die Abtastpunkte 12 inkrementell berechnen lassen.
  • Das Ordnungsdatenfeld A1 ist so ausgerichtet, dass mit den schnellstmöglichen Vektorbefehlen in das Ordnungsdatenfeld A1 geschrieben werden kann.
  • Es sei angemerkt, dass die Ordnungsdaten auch mehrere Informationen pro Abtastpunkt 12 enthalten können. Wenn die Voxel des Volumens nicht linear im Cache zweiter Ordnung 21 oder im Arbeitsspeicher 23 sind, sondern schichtweise, wird pro Abtastpunkt 12 sowohl der Index der Schicht als auch der Index innerhalb der Schicht in dem Ordnungsdatenfeld A1 gespeichert. Grundsätzlich muss lediglich genügend Information vorhanden sein, dass das einem Abtastpunkt 12 zugeordnete Voxel 10 eindeutig festgelegt ist.
  • Im ersten Durchgang 31 wird eine vorbestimmte Menge an Abtastpunkten 12 abgearbeitet. Deshalb steht am Ende des ersten Durchgangs 31 eine Abfrage 37, mit der festgestellt wird, ob noch weitere Abtastpunkte 12 zu bearbeiten sind. Wenn dies der Fall ist, werden auch die restlichen Abtastpunkte 12 bearbeitet, bevor mit dem zweiten Durchgang 32 begonnen wird.
  • Im zweiten Durchgang 32 erfolgt anhand der im ersten Durchgang 31 ermittelten Ordnungsdaten eine Stützwertbestimmung 39, durch die die für die Interpolation notwendigen Stützwerte bestimmt werden. Die für die Stützwertbestimmung 39 notwendigen Ordnungsdaten werden dabei aus dem Ordnungsdatenfeld A1 ausgelesen. Gegebenenfalls wird noch ein Sortiervorgang 40 durchgeführt, durch den die ermittelten Stützwerte so sortiert werden, dass der nachfolgende dritte Durchgang 33 mit Hilfe von Vektoroperation durchgeführt werden kann.
  • Zum Abschluss werden die ermittelten und sortierten Stützwerte durch Abspeichern 41 in ein Stützwertdatenfeld A2 übertragen. Im nachfolgenden dritten Durchgang 33 können nun mehrere Interpolationsvorgänge parallel mit Hilfe von Vektoroperation durchgeführt werden.
  • Um das Auslesen des Stützwertdatenfelds A2 so schnell wie möglich durchführen zu können, ist das Stützwertdatenfeld A2 so ausgerichtet (= aligned), dass mit den schnellstmöglichsten Vektorbefehlen von dem Stützwertdatenfeld A2 gelesen werden kann.
  • Es sei angemerkt, dass der zweite Durchgang 32 überwiegend mit skalaren Befehlen, die auf skalare Register zugreifen, durchgeführt werden muss. Der zweite Durchgang 32 wird aber für sämtliche Abtastpunkte 12 der vorbestimmten Menge an Abtastpunkten 12 durchgeführt, bevor mit dem dritten Durchgang 33 begonnen wird. Dementsprechend steht am Ende des zweiten Durchgangs 32 eine Abfrage 42, mit der überprüft wird, ob sämtliche Abtastpunkte 12 der vorbestimmten Menge an Abtastpunkten 12 abgearbeitet worden sind.
  • Der dritte Durchgang 33 beginnt mit einer Parameterbestimmung 43, mit der die für die Interpolation benötigten Parameter, zum Beispiel bei einem dreidimensionalen Volumen die Parameter λ_x, λ_y und λ_z, bestimmt werden. Die Parameter ergeben sich aus den Koordinaten der Abtastpunkte 12 relativ zu den Stützpunkten 13. Die Koordinaten der Abtastpunkte 12 werden so in Registern für Vektoroperation gespeichert, dass sich die Interpolationsparameter durch Vektoroperation aus den Koordinaten der Stützpunkte 13 ermitteln lassen. Als Ergebnis der Parameterbestimmung 43 liegen die Interpolationsparameter in Registern für Vektoroperation vor.
  • Anschließend erfolgt die eigentliche bilineare oder trilineare Interpolation 44, durch die die Werte der Stützpunkte 13 auf den Abtastpunkt 12 interpoliert werden. Das Ergebnis wird gegebenenfalls gerundet und durch Abspeichern 45 in ein Ausgabedatenfeld A3 geschrieben. Am Ende des dritten Durchgangs 33 steht eine Abfrage 46, mit der überprüft wird, ob sämtliche Abtastpunkte 12 bearbeitet worden sind.
  • Das mit mehreren Durchgängen 31 bis 33 arbeitende Interpolationsverfahren 29, bei dem das Ordnungsdatenfeld A1 und das Stützwertdatenfeld A2 als Zwischenspeicher dienen, bietet eine Reihe von Vorteilen.
  • Mit Ausnahmen der Überprüfung 30 zu Anfang des Interpolationsverfahren sowie mit Ausnahme der Stützwertbestimmung 33 und dem Sortiervorgang 40 können für alle Verfahrensschritte Vektoroperation verwendet werden.
  • Es ist nicht notwendig, zur Durchführung des Interpolationsverfahren 29 Vektorbefehle zu benutzen, die es erlauben, Register für Vektoroperationen mit Daten zu füllen, die verteilt im Cache zweiter Ordnung 21 oder im Arbeitspeicher 23 liegen. Denn mit Ausnahme der Überprüfung 30, der Stützwertbestimmung 39 und des Sortiervorgangs 40 liegen die notwendigen Daten in linearen Speicherbereichen, auf die mit Vektorbefehlen zeitsparend zugegriffen werden kann.
  • Hinzu kommt, dass durch das Zwischenspeichern im Ordnungsdatenfeld A1 und im Stützwertdatenfeld A2 das Eintreten einer Fast Forward Violation vermieden wird. Eine derartige Fast Forward Violation tritt beispielsweise ein, wenn zunächst Daten in einen Speicherbereich geschrieben werden, der so groß wie ein Register für Vektoroperation ist, und unmittelbar danach dieser Speicherbereich in das entsprechende Vektorregister geladen wird. Diese Vorgehensweise verletzt jedoch die Fast-Forward-Strategie moderner Prozessoren 14, den die Fast-Forward-Strategie erlaubt es nicht, dass kleine Register 19 in einem Bereich schreiben dürfen, der unmittelbar danach von einem großen Register 19 wieder geladen wird. Wenn dies doch passiert, führt dies zu einer Hemmung der Pipeline 28 (= pipeline stall), da garantiert werden muss, dass alle Befehle die vor dem Lesen in das größere Register stehen, auch wirklich durchgeführt und beendet worden sind. Durch das Eintreten einer Fast Forward Violation würde die Ausführung des Interpolationsverfahrens 29 erheblich verlangsamt.
  • Bei dem Interpolationsverfahren 29 wird sowohl die Gefahr einer Fast Forward Violation als auch das zeitaufwendige Füllen der Vektorregister mit Vektorbefehlen zum Lesen von verstreuten Daten vermieden. Denn beim Interpolationsverfahren 29 wird nicht unmittelbar in einen Speicherbereich im Cache 21 zweiter Ordnung oder im Arbeitspeicher 23 geschrieben, aus dem sofort wieder gelesen wird, sondern der Speicherbereich kann ausreichend groß gemacht werden, damit zwischen dem Lese- und dem Schreibvorgang ausreichend Zeit zur Vermeidung einer Fast Forward Violation vergeht. Wenn im Rahmen des zweiten Durchgangs 32 versucht wird, aus dem Stützwertdatenfeld A2 zu lesen, ist seit dem Schreibvorgang, mit dem das Stützwertdatenfeld A2 mit Daten gefüllt wurde, ausreichend Zeit vergangen, so dass keine Fast Forward Violation eintritt. Dies wird insbesondere dadurch sichergestellt, dass das Stützwertdatenfeld A2 im Rahmen des dritten Durchgangs 33 in der gleichen Reihenfolge ausgelesen wird, in der das Stützwertdatenfeld A2 im zweiten Durchgang 32 beschrieben wurde. Dadurch vergeht genügend Zeit zwischen dem Füllen des Anfangs des Stützwertdatenfelds A2 und dem Auslesen der Stützwerte im dritten Durchgang 33.
  • Um die Fast Forward Violation mit Sicherheit zu vermeiden, muss allerdings darauf geachtet werden, dass die Größe des Stützwertdatenfeldes A2 ausreichend groß ist, so dass genügend Zeit zwischen Lesen und Schreiben vergeht.
  • Eine Fast Forward Violation kann auch verursacht werden, wenn mit großen Registern 19 in einem bestimmten Speicherbereich geschrieben wird und danach kleine Register 19 genutzt werden, um unmittelbar danach aus dem zuvor beschriebenen Speicherbereich Daten zu lesen. Beim Interpolationsverfahren 29 kann auch im ersten Durchgang 31 mit Vektoroperation gearbeitet werden, da durch das Ordnungsdatenfeld A1 der Schreibvorgang im ersten Durchgang 31 und der Lesevorgang im zweiten Durchgang 32 entkoppelt sind. Zwischen beiden Vorgängen vergeht ebenfalls genug Zeit, so dass keine Fast Forward Violation eintritt.
  • Ein weiterer Vorteil des Interpolationsverfahren 29 ist, das bei der Implementierung kein explizites Caching eingerichtet werden muss. Denn abgesehen von der Stützwertbestimmung 39 wird auf Rechnern, die einen Cache 20 erster Ordnung und einen Cache 21 zweiter Ordnung besitzen, ausschließlich mit Daten gearbeitet, die bereits in dem Cache 20 oder 21 liegen. Außerdem ist die Abarbeitung des Ordnungsdatenfelds A1 und des Stützwertdatenfelds A2 für moderne Prozessoren 14 gut geeignet, da bei der linearen Abarbeitung das Cachehardwareprefetching optimal funktionieren kann.
  • So ist es beim zweiten Durchgang 32 nicht erforderlich, explizit Caching zu implementieren, da zum einen der Programmcode aus dem ersten Durchgang 31 und dem dritten Durchgang 33 vorher und nachher ausgeführt wird und daher die Daten während des zweiten Durchgangs 32 nicht aus dem Cache 20 oder 21 verdrängt werden. Im Übrigen werden zwar verteilte Daten bearbeitet, da die Positionen der Abtastpunkte 12 aber nahe zusammen liegen, werden die gleich Stützpunktwerte oft unmittelbar hintereinander für aufeinander folgende Abtastpunkte 12 gelesen werden müssen. Darüber hinaus können auch Stützpunktwerte gelesen werden, die bereits im Cache 20 oder 21 sind, da diese Stützpunktwerte zwar nicht unmittelbar vorher verwendet wurden, aber mit auf einer Cache-Leitung (= cache line) waren, die zuvor gelesen wurde. In diesen Fällen können viele Stützpunktwerte bereits aus dem Cache 20 oder 21 entnommen werden und müssen nicht aus dem Arbeitsspeicher 23 geladen werden. Auf Grund dieser Effekte findet ein implizites Caching statt, so dass kein explizites Caching der Daten implementiert werden muss.
  • Da der Programmcode der Durchgänge 31 bis 33 von einfacher Struktur ist und die Daten im Cache 20 oder 21 nicht schnell verdrängt werden, kann das Interpolationsverfahren 29 auch für Rechner mit mehreren virtuellen Prozessoren 14 mit gemeinsamen Cache (Hyperthreading) parallelisiert werden.
  • Außerdem ist jeder Verfahrensschritt des Interpolationsverfahrens 29 von einfacher Struktur und der Programmcode zur Realisierung des Interpolationsverfahrens ist dementsprechend einfach. Dies macht es sowohl dem Programmierer als auch dem Compiler leichter, den Programmcode zu optimieren.
  • Infolgedessen kann für das Interpolationsverfahren 29 Hochoptimierter Programmcode verwendet werden, der leicht auch zu anderen Zwecken verwendet werden kann. Wenn beispielsweise die Art und Weise, in der das Volumen 9 abgespeichert ist, geändert wird, ist in der Regel nur der erste Durchgang 31 anzupassen, im schlimmsten Fall auch der Durchgang 32. Umgekehrt ist bei einem Wechsel von einer Fixpunktinterpolation zu einer Gleitkomma-Interpolation nur der dritte Durchgang 33 zu ändern.
  • Bei der Verwendung von Vektoroperationen erhält man den maximalen Effizienzgewinn, wenn die gleichen Rechenoperationen durchgeführt werden, die auch bei einer reinen skalaren Berechnung durchgeführt werden, mit dem Unterschied, dass gleich mehrere Abtastpunkte 12 auf einmal behandelt werden. Dies verhindert, dass innerhalb der Vektorregister Kopieroperation oder Shiftoperation notwendig werden. Insofern ist im zweiten Durchgang 32 ein Sortiervorgang 40 notwendig, durch den die Stützpunktwerte gegebenenfalls permutiert werden, um sicherzustellen, dass die eigentliche Interpolation 44 mit dem gleichen Rechenoperationen durchgeführt werden kann, wie bei einer reinen skalaren Berechnung.
  • Es sei angemerkt, dass beim Interpolationsverfahren 29 auch das Abspeichern 45 in das Ausgabedatenfeld A3 optimal erfolgt, denn die errechneten Abtastpunktwerte werden am Ende der Interpolation 44 in der richtigen Reihenfolge in das Ausgabedatenfeld geschrieben.
  • Ferner sei darauf hingewiesen, dass auch die Parameterbestimmung 43 mit Hilfe von Vektoroperation durchgeführt werden kann. Die dabei bestimmten Interpolationsparameter können in dem dritten Durchgang 33 dann unmittelbar durch den Inhalt von Vektorregistern in den Interpolationsalgorithmus einfliesen.
  • Schließlich soll noch betont werden, dass der Übergang innerhalb des ersten Durchgangs 31 und des dritten Durchgangs 33 von einer mit Vektoroperationen parallel bearbeiteten Gruppe von Abtastpunkten 12 zur nächsten Gruppe von Abtastpunkten 12 auch mit Hilfe von Vektoroperation erfolgen kann. Die errechneten Koordinaten der Abtastpunkte 12 können in dem ersten Durchgang 31 und dem dritten Durchgang 33 dann unmittelbar über den Inhalt von Vektorregistern in das Interpolationsverfahren 29 einfliesen.
  • Im Folgenden wird das Interpolationsverfahren 29 am Beispiel einer bilinearen Interpolation im zweidimensionalen Volumen und einer trilinearen Interpolation im dreidimensionalen Raum näher erläutert. In beiden Fällen wird das Interpolationsverfahren unter Zuhilfenahme von SSE- und SSE2-Registern durchgeführt.
  • Da SSE-Register vier Gleitkommawerte mit jeweils 32 Bit speichern, werden vier Abtastpunkte 12 gleichzeitig abgearbeitet.
  • SSE- und SSE2-Register können am effizientesten vom einen Speicherbereich laden, wenn die Adressen des Speicherbereichs auf 16 Byte ausgerichtet (= aligned) sind, da diese Register 128 Bit breit sind. Die Datenfelder A1 und A2 sind deshalb immer auf 16 Byte ausgerichtet.
  • In den folgenden Ausführungsbeispielen sei nun jeweils der einfachen Fall betrachtet, dass ein Strahl φ durch ein Volumen dringt und auf diesem Strahl Abtastpunkte 12 in regelmäßigem Abstand liegen. An den Abtastpunkten 12, für die φ = α + nδ gilt, mit n = 1 ... 4N und δ = (δx, δy) im zweidimensionalen Fall und δ = (δx, δy, δz) im dreidimensionalen Fall, soll das Bild oder Volumen interpoliert werden. Die Stützpunktwerte sind jeweils als 16 Bit = 2 Byte Integerwert vorhanden.
  • Jeder Abtastpunkt 12 ist durch Fixpunkt-Arithmetik als Integer definiert, zum Beispiel als 32-Bit-Integer wobei 16 Bit für die Vorkommastellen und 16 Bit für die Nachkommastellen benutzt werden.
  • Die Größe der Voxel des Volumens soll im Folgenden die Größe (1, 1) im zweidimensionalen Fall und (1, 1, 1) im dreidimensionalen Fall besitzen. Jedes Voxel des Volumens hat diese Größe. Wenn das Originalvolumen nicht diese Größe hat, wird eine affine Abbildung durchgeführt, so dass das Problem auf diesen einfachen Fall zurückgeführt werden kann. Diese affine Abbildung muss in der gleichen Weise auf die Abtastpunkte 12 angewendet werden.
  • Ausführungsbeispiel einer bilinearen Interpolation entlang eines Strahls durch ein zweidimensionales Bild:
  • Bei einer bilinearen Interpolation beeinflussen vier Stützpunkte 13 des Bildes das Interpolationsergebnis. Wenn vier Abtastpunkte 12 parallel verarbeitet werden, müssen also 4·4 = 16 Stützpunktwerte mit jeweils 16 Bit benutzt werden, um die vier Ergebniswerte zu bestimmen. In 2 ist die von den vier benachbarten Stützpunkten 13 definierte Fläche jeweils schraffiert eingezeichnet.
  • Erster Durchgang:
  • Mit Hilfe von SSE2 werden für jeden Abtastpunkt 12 Informationen bestimmt, mit denen sich alle vier benachbarten Stützpunkte 13, die es jeweils zu interpolieren gilt, ermitteln lassen. Die Informationen werden in dem Ordnungsdatenfeld A1 abgelegt. Der erste Durchgang 31 muss an die Bildstruktur angepasst sein, damit im zweiten Durchgang 32 diese Informationen benutzt werden können, um jeweils die Stützpunktwerte der vier benachbarten Stützpunkte 13 eines Abtastpunktes 12 zu bestimmen.
  • Im obigen Beispiel könnte das Datenfeld A1 dadurch bestimmt sein, dass jeweils der Index des linken unteren Stützpunktes 13 in das Datenfeld A1 geschrieben wird. Dieser Index ist gleich dem Index des jeweiligen Voxels, das im zweidimensionalen Fall auch als Pixel bezeichnet wird. In diesem Fall würde sich für die ersten vier Abtastpunkte 12 folgendes Datenfeld ergeben: A1 = 2, 2, 8, 9. Für die ersten acht Abtastpunkte 12 erhält man hier: A1 = 2, 2, 8, 9, 9, 15, 15, 16 Das Datenfeld A1 ist vollständig gefüllt, wenn für alle 4N Abtastpunkte des Strahls die Indices bestimmt und in das Ordnungsdatenfeld A1 eingetragen sind.
  • Zweiter Durchgang:
  • Bei der gleichzeitigen Bearbeitung von vier Abtastpunkte 12 umfasst das Stützwertdatenfeld A2 hier 16 Stützpunktwerte: D0, D1, D2, D3, D4, D5, D6, D7, D8, D9, D10, D11, D12, D13, D14, D15.
  • Für 4N Abtastpunkte 12 besteht das Stützwertdatenfeld A2 aus N Blöcken mit je vier Stützpunktwerten.
  • Seien S1, S2, S3 und S4 die ersten vier Abtastpunkte 12 der obigen Abbildung. Die vier benachbarten Stützpunkte 13, die zur Interpolation benötigt werden seien:
    Für den ersten Abtastpunkt S1:
    P1[0,0], P1[1,0], P1[0,1], P1[1,1]
    Im Beispiel haben die Voxel die Indices (2, 3, 8, 9)
    Für den weiten Abtastpunkt S2:
    P2[0,0], P2[1,0], P2[0,1], P2[1,1]
    Im Beispiel haben die Voxel die Indices (2, 3, 8, 9)
    Für den dritten Abtastpunkt S3:
    P3[0,0], P3[1,0], P3[0,1], P3[1,1]
    Im Beispiel haben die Voxel die Indices (8, 9, 14, 15)
    Für den vierten Abtastpunkt S4:
    P4[0,0], P4[1,0], P4[0,1], P4[1,1]
    Im Beispiel haben die Voxel die Indices (9, 10, 15, 16).
  • Die Werte von diesen sechzehn Stützpunkte 13 werden mit Hilfe der Einträge im Ordnungsdatenfeld A1 ermittelt. Das Ordnungsdatenfeld A1 enthält hier im Beispiel für jeden Abtastpunkt Sk die Indices von Pk[0,0] (k = 1, 2, 3, 4). Die Indices der anderen drei benachbarten Stützpunkte Pk[1,0], Pk[0,1] und Pk[1,1] sind damit jeweils eindeutig definiert und somit können alle Stützpunktwerte Pk der benachbarten Stützpunkte 13 ermittelt werden und in das Ordnungsdatenfeld A2 eingetragen werden.
  • Das Datenfeld A2 wird dann folgendermaßen gefüllt:
    D0 = P1[0,0]; D1 = P2 [0,0]; D2 = P3[0,0]; D3 = P4[0,0];
    D4 = P1[1,0]; D5 = P2 [1,0]; D6 = P3[1,0]; D7 = P4[1,0];
    D8 = P1[0,1]; D9 = P2[0,1]; D10 = P3[0,1]; D11 = P4[0,1];
    D12 = P1[1,1]; D13 = P2[1,1]; D14 = P3[1,1]; D15 = P4[1,1];
  • Die Adresse von D0 (erster Eintrag im Datenfeld A2) ist auf 16 Byte ausgerichtet (= aligned). Damit sind alle Achterpaare (D8n, D8n + 1, D8n + 2, D8n + 3, D8n + 4, D8n + 5, D8n + 6, D8n + 7) ebenfalls auf 16 Byte ausgerichtet und können mit SSE2 Registern performant gelesen werden.
  • Das Ordnungsdatenfeld A2 wird nun im zweiten Durchgang 32 gefüllt, indem für alle N Blöcke diese Daten ermittelt werden. Das Ordnungsdatenfeld A2 besteht dann aus 16·N Elementen.
  • Dritter Durchgang:
  • Man kann nun je acht Stützpunktwerte gleichzeitig effizient in SSE2-Register 19 laden. Diese acht Stützpunktwerte können dann auf zwei SSE2-Register verteilt werden, wobei danach jeweils ein Viererpaar in dem einem SSE2-Register und ein weiteres Viererpaar in dem zweiten SSE2-Register als Integerwerte liegen. Nun kann man in beiden Registern die Integerwerte zu Gleitkommawerten konvertieren. Auf diese Weise lässt sich jedes Viererpaar in ein SSE Register 19 im Gleitkommaformat laden. Für jeden Viererblock von Abtastpunkten 12 erhält man also vier SSE-Register 19: (D0, D1, D2, D3), (D4, D5, D6, D7), (D8, D9, D10, D11), (D12, D13, D14, D15).
  • In jedem SSE-Register 19 ist also der erste Wert immer vom Abtastpunkt S1, der zweite vom Punkt S2, der dritte vom Punkt S3 und der vierte vom Punkt S4. Die Berechnung der bilinearen Interpolation kann nun genau so durchgeführt werden wie im skalaren Fall, mit dem einzigen Unterschied, dass jede Rechenoperation immer mit vier Stützpunktwerten gleichzeitig durchgeführt wird.
  • Am Ende der Berechnung erhält man ein mit den Abtastpunktwerten gefülltes SSE-Register (R1, R2, R3, R4). Hierbei ist R1 das Ergebnis für den Abtastpunkt S1, R2 von S2, R3 von S3 und R4 von S4. Die Abtastpunktwerte können nun in das gewünschte Format konvertiert werden und in das Ausgabedatenfeld A3 abgespeichert werden. Idealerweise wählt man den Startpunkt S1 so, dass die Adresse im Ausgabedatenfeld A3 an dieser Stelle möglichst günstig ausgerichtet (= aligned) ist, so dass man effizient ausgerichtet in das Ausgabedatenfeld A3 schreiben kann. Anderenfalls müsste nicht ausgerichtet geschrieben werden, was langsamer wäre und deshalb vermieden werden sollte.
  • Für die bilineare Interpolation an jedem Abtastpunkt 13 werden jeweils zwei skalare Parameter λ_x und λ_y benötigt. Diese ergeben sich aus der x und y Position des Abtastpunktes 13, indem man nur die Nachkommastellen verwendet. Da diese Interpolationsparameter für die SIMD-Berechnung eines Viererblocks jeweils in Form von SSE Registern benötigt werden, (λ_x1, λ_x2, λ_x3, λ_x4) und (λ_y1, λ_y2, λ_y3, λ_y4), werden diese Werte folgendermaßen berechnet:
    Es seien die ersten vier diskreten Abtastpunkte 12 in den SSE2 Registern aVector128iX, aVector128iY gespeichert, wobei jedes Register jeweils den x- oder y-Wert der vier diskreten Abtastpunkte 12 in Fixpunktarithmetik beinhaltet.
  • Von einem Viererblock von diskreten Abtastpunkten zum nächsten Viererblock kommt man durch eine Addition:
    aVector128iX += add_ddx_full
    aVector128iy += add_ddy_full
    mit den SSE2 Register add_ddx_full und add_ddy_full, wobei add_ddx_full = (4·δx, 4·δx, 4·δx, 4·δx) und add_ddy_full = (4·δy, 4·δy, 4·δy, 4·δy) sind.
  • Die Interpolationsparameter berechnet man aus aVector128iX und aVector128iY, indem man nur die Nachkommastellen betrachtet und diese dann von SSE2 (Integer) nach SSE (Gleitkomma) konvertiert. Auf diese Weise erhält man die Parameter in der gewünschten SSE-Form.
  • Die beschriebenen Berechnungen lassen sich ausschließlich mit SIMD-Operationen durchfuhren.
  • Ausführungsbeispiel einer trilineare Interpolation entlang eines Strahls durch ein dreidimensionales Volumen:
  • Bei einer trilinearen Interpolation beeinflussen acht Stützpunkte 13 des Volumens das Interpolationsergebnis. Für vier Abtastpunkte 13 müssen also 4·8 = 32 Stützpunktwerte mit jeweils 16 Bit benutzt werden, um die Abtastpunktwerte zu bestimmen.
  • Erster Durchgang:
  • Mit Hilfe von SSE2 werden für jeden Abtastpunkt 12 Informationen bestimmt, mit denen sich alle acht benachbarten Stützpunkte 13, mit denen die Interpolation durchgeführt wird, ermitteln lassen. Die Informationen werden in dem Ordnungsdatenfeld A1 abgelegt. Der erste Durchgang 31 muss an die Volumenstruktur angepasst sein, damit im zweiten Durchgang 32 diese Informationen benutzt werden können, um die Stützpunktwerte der acht benachbarten Stützpunkte 13 zu bestimmen.
  • Zweiter Durchgang:
  • Für vier Abtastpunkte 12 umfasst das Ordnungsdatenfeld A2 also 32 Stützpunktwerte: D0, D1, D2, D3, ... D31. Für 4N Abtastpunkte 12 umfasst das Ordnungsdatenfeld A2 entsprechend N Blöcke mit jeweils 32 Stützpunktwerten.
  • Seien S1, S2, S3 und S3 die vier Abtastpunkte 12.
  • Die acht benachbarten Stützpunkte 13, die zur Interpolation benötigt werden, seien:
    Für den ersten Abtastpunkt S1:
    P1[0,0,0], P1[1,0,0], P1[0,1,0], P1[1,1,0],
    P1[0,0,1], P1[1,0,1], P1[0,1,1], P1[1,1,1]
    Für den zweiten Abtastpunkt S2:
    P2[0,0,0], P2[1,0,0], P2[0,1,0], P2[1,1,0],
    P2 [0,0,1], P2[1,0,1], P2[0,1,1], P2[1,1,1]
    Für den dritten Abtastpunkt S3:
    P3[0,0,0], P3[1,0,0], P3[0,1,0], P3[1,1,0],
    P3[0,0,1], P3[1,0,1], P3[0,1,1], P3[1,1,1]
    und für den vierten Abtastpunkt S4:
    P4[0,0,0], P4[1,0,0], P4[0,1,0], P4[1,1,0],
    P4[0,0,1], P4[1,0,1], P4[0,1,1], P4[1,1,1]
  • Die 32 Stützpunktwerte werden mit Hilfe der Einträge im Ordnungsdatenfeld A1 ermittelt. Das Ordnungsdatenfeld A1 könnte zum Beispiel für jeden Abtastpunkte Sk die Adresse von Pk[0,0,0] (k = 1, 2, 3, 4) enthalten. Je nachdem wie das Volumen aufgebaut ist, sind aber gegebenenfalls auch andere Möglichkeiten denkbar. Wenn zum Beispiel das Volumen schichtweise indexiert ist, könnte es für jeden Abtastpunkt 12 die Schichtnummer und den Index innerhalb der Schicht enthalten.
  • Das Ordnungsdatenfeld A2 würde dann folgendermaßen gefüllt werden:
    D0 = P1[0,0,0]; D1 = P2[0,0,0]; D2 = P3[0,0,0]; D3 = P4[0,0,0];
    D4 = P1[1,0,0]; D5 = P2 [1,0,0]; D6 = P3[1,0,0]; D7 = P4[1,0,0];
    D8 = P1[0,1,0]; D9 = P2[0,1,0]; D10 = P3[0,1,0]; D11 = P4[0,1,0];
    D12 = P1[1,1,0]; D13 = P2[1,1,0]; D13 = P3[1,1,0]; D15 = P4[1,1,0];
    D16 = P1[0,0,1]; D17 = P2[0,0,1]; D18 = P3[0,0,1]; D19 = P4[0,0,1];
    D20 = P1[1,0,1]; D21 = P2[1,0,1]; D22 = P3[1,0,1]; D23 = P4[1,0,1];
    D24 = P1[0,1,1]; D25 = P2[0,1,1]; D26 = P3[0,1,1]; D27 = P4[0,1,1];
    D28 = P1[1,1,1]; D29 = P2[1,1,1]; D30 = P3[1,1,1]; D31 = P3[1,1,1];
  • Alle Achterpaare (D8n, D8n + 1, D8n + 2, D8n + 3, D8n + 4, D8n + 5, D8n + 6, D8n + 7) sind auf 16 Byte ausgerichtet (= aligned).
  • Das Datenfeld A2 wird nun im zweiten Durchgang 32 gefüllt, indem für alle N Blöcke diese Daten ermittelt werden. Das Datenfeld A2 besteht dann aus 32·N Elementen.
  • Dritter Durchgang:
  • Der dritte Durchgang 33 verläuft entsprechend dem zweidimensionalen Fall. Für jeden Viererblock von Abtastpunkten 12 erhält man hier acht SSE-Register 19:
    (D0, D1, D2, D3), (D4, D5, D6, D7), (D8, D9, D10, D11), (D12, D13, D14, D15), (D16, D17, D18, D19), (D20, D21, D22, D23), (D24, D25, D26, D27), (D28, D29, D30, D31)
  • In jedem SSE-Register 19 ist also der erste Wert immer vom Abtastpunkt S1, der zweite vom Abtastpunkt S2, der dritte vom Abtastpunkt S3 und der vierte vom Abtastpunkt S4. Die Berechnung der trilinearen Interpolation kann nun genau so durchgeführt werden wie im skalaren Fall, mit dem einzigen Unterschied, dass jede Rechenoperation immer mit vier Werten gleichzeitig durchgeführt wird.
  • Am Ende der Berechnung erhält man ein SSE Register (R1, R2, R3, R4), wobei R1 das Ergebnis für den Punkt S1 ist, R2 von S2, R3 von S3 und R4 von S4. Die Abtastpunktwerte können nun in das gewünschte Format konvertiert werden und in dem Ausgabedatenfeld A3 abgespeichert werden.
  • Für die trilineare Interpolation an jedem Abtastpunkt 12 werden jeweils drei skalare Parameter λ_x, λ_y und λ_z benötigt. Diese ergeben sich aus der x-, y- und z-Position des Abtastpunktes 12, indem man nur die Nachkommastellen verwendet. Wie im zweidimensionalen Fall werden die Interpolationsparameter in der Form von SSE Registern (λ_x1, λ_x2, λ_x3, λ_x4), (λ_y1, λ_y2, λ_y3, λ_y4) und (λ_z1, λ_z2, λ_z3, λ_z4) benötigt.
  • Die Berechnung der Interpolationsparameter erfolgt wie bei der Berechnung im zweidimensionalen Fall.
  • Die vier Abtastpunkte 12 werden in drei SSE2-Registern aVector128iX, aVector128iY und aVector128iZ gespeichert.
  • Von einem Viererblock zum nächsten kommt man durch.
    aVector128iX += add_ddx_full
    aVector128iy += add_ddy_full
    aVector128iZ += add_ddz_full
    mit einem im Vergleich zum zweidimensionalen Fall neuen SSE2 Register add_ddz_full = (4·δz, 4·δz, 4·δz, 4·δz).
  • Es sei angemerkt, dass auch das Ausgabedatenfeld A3 nach Möglichkeit auf 16 Byte ausgerichtet (= aligned) sein sollte. Wenn die Startadresse des Ausgabedatenfelds nicht frei gewählt werden darf und die Startadresse nicht auf 16 Byte ausgerichtet ist, sollte ein Bereich des Ausgabedatenfelds gefunden werden, der auf 16 Byte ausgerichtet ist und vollständig im Inneren des Ausgabedatenfelds A3 liegt. Die Vektoroperationen im Rahmen der Multipass-Strategie sollten dann auf diesen Bereich angewendet werden. Die ersten und die letzten Werte des Ausgabedatenfelds A3, die nicht in diesem Bereich liegen, können dann mit einem skalaren Interpolationsalgorithmus ermittelt werden.
  • Wenn das Interpolationsverfahren 29 auf eine umfangreiche Menge an Abtastpunkten 12 angewendet werden soll, ist es nicht notwendig, die Datenfelder A1 und A2 so groß zu wählen, dass alle Abtastpunkte 12 in jedem der Durchgänge 31 bis 33 verarbeitet werden. Hier empfiehlt es sich, die Menge der Abtastpunkte 12 in kleine Teilmengen zu unterteilen und jede Teilmenge mit dem obigen Interpolationsverfahren 29 zu interpolieren. Dadurch wird die Größe der Datenfelder A1 und A2 klein gehalten.
  • Ein Stützwertdatenfeld A2, für das N = 1 gilt, was in den hier beschriebenen Ausführungsbeispielen vier Abtastpunkten 12 entspricht, ist in der Regel zu klein, um effizient verwendet werden zu können. Bei dieser Größe des Stützwertdatenfelds A2 läuft man nämlich Gefahr, eine Fast Forward Violation auszulösen. Ob tatsächlich eine Fast Forward Violation ausgelöst wird, hängt davon ab, wie das Interpolationsverfahren 29 implementiert ist und wie der Compiler den Code in Assemblercode übersetzt.
  • Vorteilhafterweise sollte daher N > 1 gelten. Dies ist im Allgemeinen erfüllt, wenn das Interpolationsverfahren auf einen ganzen Strahl, einen Block eines Bildes oder ein gesamtes Volumen angewandt wird. Dadurch ist man unabhängiger von der Implementierung und umgeht sicher eine Fast Forward Violation.
  • Bei einem Verfahren mit Strahlverfolgung will man im Allgemeinen keinen ganzen Strahl interpolieren sondern nur einen Teilbereich, da man Teile des Volumens überspringen will oder den Strahl vorzeitig beenden will. Hier empfiehl es sich mindestens N = 2 zu wählen, also in den Beispielen acht Abtastpunkte bei jedem Aufruf des Interpolationsverfahren 29 zu verwenden. Wenn dennoch N = 1 verwendet werden soll, so muss bei der Implementierung darauf geachtet werden, dass die Lese- und Schreiboperationen so gelegt werden, dass keine Fast Forward Violation Situation entsteht, indem zum Beispiel zwischen dem Lesen und Schreiben andere Operationen durchgeführt werden, die hinreichen viel Zeit benötigen.

Claims (14)

  1. Verfahren zur Interpolation von Volumendaten, bei dem mit Hilfe eines Prozessors (14) die einer Menge von Abtastpunkten (12) zugeordneten Stützpunkte (13) ermittelt werden und bei dem von Stützpunktwerten der ermittelten Stützpunkte (13) auf die den Abtastpunkten (12) zuzuordnenden Abtastpunktwerte interpoliert wird, wobei die Stützpunktwerte der ermittelten Stützpunkte (13) in einem linearen Stützwertspeicherbereich einer Speichereinheit (21, 23) zwischengespeichert werden und wobei auf die Abtastpunktwerte mit Hilfe von Vektoroperationen interpoliert wird, dadurch gekennzeichnet, dass der lineare Stützwertspeicherbereich mit mehr Stützwerten gefüllt wird, als durch einen einzelnen Ladebefehl in ein Register (19) für die Vektoroperationen ladbar sind, so dass eine Fast-Forward-Violation in dem Prozessor (14) vermieden wird.
  2. Verfahren nach Anspruch 1, dadurch gekennzeichnet, dass der Stützwertspeicherbereich mit Hilfe von Vektoroperationen ausgelesen wird.
  3. Verfahren nach Anspruch 1 oder 2, dadurch gekennzeichnet, dass der Stützwertspeicherbereich für den Datenzugriff über Vektoroperationen optimiert ist.
  4. Verfahren nach einem der Ansprüche 1 bis 3, dadurch gekennzeichnet, dass zunächst Ordnungsdaten der Stützpunkte (13) ermittelt werden.
  5. Verfahren nach Anspruch 4, dadurch gekennzeichnet, dass die Ordnungsdaten der Stützpunkte (13) mit Hilfe von Vektoroperationen ermittelt werden.
  6. Verfahren nach Anspruch 4 oder 5, dadurch gekennzeichnet, dass die ermittelten Ordnungsdaten in einem linearen Ordnungsdatenspeicherbereich zwischengespeichert werden.
  7. Verfahren nach einem der Ansprüche 4 bis 6, dadurch gekennzeichnet, dass die Ordnungsdaten mit Hilfe von Vektoroperationen in dem Ordnungsdatenspeicherbereich gespeichert werden.
  8. Verfahren nach einem der Ansprüche 6 bis 6, dadurch gekennzeichnet, dass die Stützpunktwerte anhand der in Ordnungsdatenspeicherbereich gespeicherten Ordnungsdaten mit Hilfe von skalaren Operationen ermittelt werden.
  9. Verfahren nach einem der Ansprüche 4 bis 7, dadurch gekennzeichnet, dass der Ordnungsdatenspeicherbereich für den Datenzugriff mit Hilfe von Vektoroperationen optimiert ist.
  10. Verfahren nach einem der Ansprüche 4 bis 9, dadurch gekennzeichnet, dass im Ordnungsdatenspeicherbereich mehr Ordnungsdaten gespeichert werden, als durch einen einzelnen Ladebefehl in ein Register (19) für Vektoroperation ladbar sind.
  11. Verfahren nach einem der Ansprüche 4 bis 10, dadurch gekennzeichnet, dass als Ordnungsdaten Indexdaten ermittelt werden.
  12. Verfahren nach einem der Ansprüche 1 bis 11, dadurch gekennzeichnet, dass eine Interpolation für eine multiplanare Rekonstruktion von medizinischen Volumendaten durchgeführt wird.
  13. Ein Prozessor (14) zur Auswertung von Daten, wobei der Prozessor (14) eine SMID Architektur hat und mit einer Speichereinheit (21, 23) kommuniziert, n, dadurch gekennzeichnet, dass der Prozessor (14) zusammen mit der Speichereinheit (21, 23) zur Ausführung eines Verfahrens nach einem der Ansprüche 1 bis 12 eingerichtet ist.
  14. Computerprogrammprodukt zur Auswertung von Daten, dadurch gekennzeichnet, dass das Computerprogrammprodukt Programmcode zur Ausführung eines Verfahrens nach einem der Ansprüche 1 bis 12 enthält.
DE102005055665A 2005-11-22 2005-11-22 Verfahren zur Interpolation von Volumendaten Active DE102005055665B4 (de)

Priority Applications (2)

Application Number Priority Date Filing Date Title
DE102005055665A DE102005055665B4 (de) 2005-11-22 2005-11-22 Verfahren zur Interpolation von Volumendaten
US11/602,269 US20070120852A1 (en) 2005-11-22 2006-11-21 Method for interpolating volume data

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
DE102005055665A DE102005055665B4 (de) 2005-11-22 2005-11-22 Verfahren zur Interpolation von Volumendaten

Publications (2)

Publication Number Publication Date
DE102005055665A1 DE102005055665A1 (de) 2007-05-31
DE102005055665B4 true DE102005055665B4 (de) 2013-11-07

Family

ID=38037595

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102005055665A Active DE102005055665B4 (de) 2005-11-22 2005-11-22 Verfahren zur Interpolation von Volumendaten

Country Status (2)

Country Link
US (1) US20070120852A1 (de)
DE (1) DE102005055665B4 (de)

Families Citing this family (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111950639B (zh) * 2020-08-14 2024-03-19 四川维思模医疗科技有限公司 一种同步实时显示超声与断层解剖图像的成像方法

Family Cites Families (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE3619869A1 (de) * 1986-06-13 1987-12-17 Gerd Oestreich Kiefermodell
US5303706A (en) * 1992-05-21 1994-04-19 North American Philips Corporation Directional interpolation for magnetic resonance angiography
JPH08138078A (ja) * 1994-11-09 1996-05-31 Toshiba Medical Eng Co Ltd 画像処理装置
JPH08308827A (ja) * 1995-05-24 1996-11-26 Ge Yokogawa Medical Syst Ltd 補間データ生成方法およびx線吸収係数急変面位置推定方法およびx線ct装置
WO1999056156A1 (en) * 1998-04-24 1999-11-04 Case Western Reserve University Geometric distortion correction in magnetic resonance imaging
US6674430B1 (en) * 1998-07-16 2004-01-06 The Research Foundation Of State University Of New York Apparatus and method for real-time volume processing and universal 3D rendering
US7003175B2 (en) * 2001-03-28 2006-02-21 Siemens Corporate Research, Inc. Object-order multi-planar reformatting
US7080979B2 (en) * 2001-04-13 2006-07-25 Orametrix, Inc. Method and workstation for generating virtual tooth models from three-dimensional tooth data
US20040155975A1 (en) * 2002-09-17 2004-08-12 Hart Douglas P. 3-D imaging system
US7288068B2 (en) * 2003-12-15 2007-10-30 Siemens Medical Solutions Usa, Inc. Automatic optimization for ultrasound medical imaging
US7355598B2 (en) * 2004-06-25 2008-04-08 Siemens Medical Solutions Usa, Inc. System and method for fast generation of high-quality maximum/minimum intensity projections
US7912257B2 (en) * 2006-01-20 2011-03-22 3M Innovative Properties Company Real time display of acquired 3D dental data

Non-Patent Citations (5)

* Cited by examiner, † Cited by third party
Title
DOGGETT, Michael; MEIßNER, Michael. A memory addressing and access design for real time volume rendering. In: Circuits and Systems, 1999. ISCAS'99. Proceedings of the 1999 IEEE International Symposium on. IEEE, 1999. S. 344-347. doi: 10.1109/ISCAS.1999.780012 *
LI, Jianchun; SHEKHAR, Raj; PAPACHRISTOU, Christos. A" brick" caching scheme for 3D medical imaging. Biomedical Imaging: Macro to Nano, 2004, S. 563-566. doi: 10.1109/ISBI.2004.1398600 *
NEWMAN, Timothy S.; TANG, Ning. Approaches that exploit vector-parallelism for three rendering and volume visualization techniques. Computers & Graphics, 2000, Vol. 24(5): 755-774. doi: 10.1016/S0097-8493(00)00077-7 *
SANTARELLI, Maria Filomena; POSITANO, Vincenzo; LANDINI, Luigi. Real-time multimodal medical image processing: a dynamic volume-rendering application. Information Technology in Biomedicine, IEEE Transactions on, 1997, Vol. 1(3):171-178. ISSN: 1089-7771, doi: 10.1109/4233.654860 *
WESTERMANN, Rüdiger. Parallel volume rendering. In: Parallel Processing Symposium, 1995. Proceedings., 9th International. IEEE, 1995. S. 693-699. DOI: 10.1109/IPPS.1995.395873 *

Also Published As

Publication number Publication date
DE102005055665A1 (de) 2007-05-31
US20070120852A1 (en) 2007-05-31

Similar Documents

Publication Publication Date Title
DE60003273T2 (de) Verfahren und Vorrichtung zur Erzeugung einer Eingabeadresse
DE68911398T2 (de) Methode und digitaler computer zum vorausholen von vektordaten aus dem speicher in einem für skalaverarbeitung bestimmten speichersystem.
DE68928594T2 (de) Verfahren und Gerät zur Speicherung, zum Zugriff und zur Verarbeitung von auf Voxel basierenden Daten
DE3619420C2 (de)
DE3872203T2 (de) Verfahren zur dreidimensionalen anzeige von digitalen achtaestigen kodierten objekten.
DE102008031998A1 (de) System, Verfahren und Computerprogrammprodukt zum Ausführen einer Scanfunktion
DE3689926T2 (de) Einrichtung zur sequenziellen Bildtransformation.
DE2654065C2 (de)
DE102018100730A1 (de) Ausführung von Berechnungsgraphen
DE112009000741T5 (de) Vektorbefehle zum Ermöglichen von effizienter Synchronisation und parallelen Reduktionsoperationen
DE10196879T5 (de) Nicht-einteilige mehrfache Feldschleifenverarbeitung in einer SIMD-Anordnung
DE19806985B4 (de) Organisationsverfahren für volumetrische Daten, das effiziente Cache-Aufbereitungsbeschleunigungen und einen effizienten Graphik-Hardwareentwurf ermöglicht
DE102014004841A1 (de) Grafik auf Kachelbasis
DE3688581T2 (de) Sortierverfahren in einem hierarchisch geordneten Speichersystem.
DE69631718T2 (de) Verfahren und Gerät zur leistungsfähigen Graphikdarstellung dreidimensionaler Szenen
DE102005029225A1 (de) System und Verfahren zur schnellen Erzeugung von Maximum/Minimum-Intensitätsprojektionen hoher Qualität
DE102010048485A1 (de) Textureinheit zur Universalberechnung
DE69125874T2 (de) Generator für mehrdimensionale Adressen und Anordnung zum Steuern desselben
DE102019112353A1 (de) Lade/speicher-befehl
DE102013020967B4 (de) Technik zur Ausführung von Speicherzugriffsoperationen über eine Textur-Hardware
DE19807013A1 (de) Volumetrisches Vorabschneidungsverfahren, das eine minimale Anzahl von Abtastpunkten durch ein Volumen gewährleistet
DE102007020879A1 (de) Verfahren und Vorrichtung für die äußerst schnelle Symmetrie- und SIMD- gestützte Projektion/Rückprojektion für die 3D-PET-Bildrekonstruktion
DE102008052690B4 (de) Vorrichtung und Verfahren zur Rekonstruktion und Visualisierung von Projektionsdaten
DE69008766T2 (de) Verfahren und Vorrichtung zur linearen Abschattung für ein Rastergrafikdisplay.
DE3688806T2 (de) Instruktionsprozessor.

Legal Events

Date Code Title Description
OP8 Request for examination as to paragraph 44 patent law
R018 Grant decision by examination section/examining division
R020 Patent grant now final

Effective date: 20140208

R081 Change of applicant/patentee

Owner name: SIEMENS HEALTHCARE GMBH, DE

Free format text: FORMER OWNER: SIEMENS AKTIENGESELLSCHAFT, 80333 MUENCHEN, DE