DE102015114162A1 - Effiziente Interpolation - Google Patents

Effiziente Interpolation Download PDF

Info

Publication number
DE102015114162A1
DE102015114162A1 DE102015114162.0A DE102015114162A DE102015114162A1 DE 102015114162 A1 DE102015114162 A1 DE 102015114162A1 DE 102015114162 A DE102015114162 A DE 102015114162A DE 102015114162 A1 DE102015114162 A1 DE 102015114162A1
Authority
DE
Germany
Prior art keywords
interpolation
data points
interpolated
predetermined
unit
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.)
Pending
Application number
DE102015114162.0A
Other languages
English (en)
Inventor
Simon Fenney
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.)
Imagination Technologies Ltd
Original Assignee
Imagination Technologies Ltd
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 Imagination Technologies Ltd filed Critical Imagination Technologies Ltd
Publication of DE102015114162A1 publication Critical patent/DE102015114162A1/de
Pending legal-status Critical Current

Links

Images

Classifications

    • 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
    • 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

Landscapes

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

Abstract

Die hier beschriebene Interpolationslogik stellt eine gute Approximation zu einer bikubischen Interpolation bereit, die im Allgemeinen glatter als eine bilineare Interpolation ist, ohne Durchführen aller Berechnungen, die normalerweise für eine bikubischen Interpolation benötigt werden. Dies ermöglicht, eine Approximation einer glatten bikubischen Interpolation an Vorrichtungen (z. B. mobilen Vorrichtungen) durchzuführen, die begrenzte Verarbeitungsressourcen aufweisen. An jeder eines Satzes von vorbestimmten Interpolationspositionen innerhalb eines Arrays von Datenpunkten stellt ein Satz von vorbestimmten Gewichten eine bikubische Interpolation dar, die auf die Datenpunkte angewandt werden kann. Für eine Mehrzahl der vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, werden die entsprechenden Sätze von vorbestimmten Gewichten und die Datenpunkten verwendet, um eine Mehrzahl von umgebenden interpolierten Werten zu bestimmen, die Ergebnisse des Durchführens der bikubischen Interpolation an den umgebenden vorbestimmten Interpolationspositionen darstellen. Eine lineare Interpolation wird dann an den umgebenden interpolierten Werten durchgeführt, um einen interpolierten Wert an der Abtastposition zu bestimmen.

Description

  • Hintergrund
  • Es gibt viele Situationen, in denen es nützlich sein kann, eine Interpolation an einem Array von Datenpunkten durchzuführen, um dadurch einen interpolierten Wert an einer Abtastposition innerhalb des Arrays zu bestimmen. Im Allgemeinen kann ein Array von Datenpunkten ein n-dimensionales Array sein, wobei n ≥ 1. Zum Beispiel kann in Grafikverarbeitungssystemen ein zweidimensionales (2D) Array von Texeln gespeichert sein, um eine Textur zu beschreiben, und wenn die Textur an einer Pixelposition eines Bildes anzuwenden ist, kann es sein, dass die Pixelposition nicht genau der Position eines Texels in der Textur entspricht, so dass ein interpolierter Wert der Textur an der Pixelposition (d. h. an einer Abtastposition) gewünscht wird. Als weiteres Beispiel kann ein 2D-Array von Pixeln ein Bild darstellen, und falls das Bild zu skalieren ist, dann kann es sein, dass die neuen Pixelpositionen nicht genau den Positionen von ursprünglichen Pixeln in dem Bild entsprechen, so dass interpolierte Werte an den neuen Pixelpositionen (d. h. an den Abtastpositionen) gewünscht werden.
  • 1 zeigt ein Beispiel eines Teils eines 2D-Arrays 100 von Datenpunkten 102. 1 zeigt einen 4 × 4 Satz der Datenpunkte 102 des Arrays 100 und zwei Parameter (U und V) beschreiben beispielhaft eine Abtastposition 106 innerhalb einer Region 104, für die eine Interpolation durchgeführt werden kann.
  • Eine Interpolation kann auf eine Anzahl unterschiedlicher Arten durchgeführt werden. Die stückweise lineare Interpolation ist ein Beispiel eines 1D-Interpolationsverfahrens, das einfach zu implementieren ist. Ein Beispiel der linearen Interpolation wird in 2a gezeigt, in der ein interpolierter Wert an einer Abtastposition zwischen zwei Datenpunkten A und B bestimmt werden kann. Eine Gerade 202 zwischen den Datenpunkten A und B zeigt die interpolierten Werte an Abtastpositionen zwischen den Datenpunkten A und B. Die Abtastposition wird durch den Parameter, u, gegeben, wobei 0 ≤ u ≤ 1, so dass der interpolierte Wert Iu an der Abtastposition durch eine gewichtete Summe gegeben wird: Iu = (1 – u)A + uB.
  • Eine bilineare Interpolation ist ein Beispiel eines 2D-Interpolationsverfahren, welches das Konzept der linearen Interpolation auf zwei Dimensionen erweitert. Ein Beispiel der bilinearen Interpolation wird in 2b gezeigt, in der ein interpolierter Wert an einer Abtastposition 208 innerhalb eines Quadrats von vier umgebenden Datenpunkten 204 1, 204 2, 204 3 und 204 4 bestimmt werden kann. Die Abtastposition 208 wird durch zwei Parameter (U und V) angegeben. Bei Konfrontation mit einer mehrdimensionalen Interpolation besteht eine Vorgehensweise darin, die Dimensionalität des Problems beispielsweise durch Durchführen einer getrennten 1D-Interpolation für jede der Zeilen zu verringern und dann eine 1D-Interpolation über diese Ergebnisse durchzuführen. Zum Beispiel kann eine lineare Interpolation zwischen den Datenpunkten 204 1 und 204 2 unter Verwendung des Parameters U durchgeführt werden, um den interpolierten Zwischenwert 206 1 zu bestimmen. Auf ähnliche Weise kann eine lineare Interpolation zwischen den Datenpunkten 204 3 und 204 4 unter Verwendung des Parameters U durchgeführt werden, um den interpolierten Zwischenwert 206 2 zu bestimmen. Dann kann eine lineare Interpolation zwischen den interpolierten Zwischenwerten 206 1 und 206 2 unter Verwendung des Parameters V durchgeführt werden, um den interpolierten Wert 208 an der durch (U, V) gegebenen Abtastposition zu bestimmen Die in diesem bilinearen Interpolationsverfahren beschriebenen drei linearen Interpolationen können auf die gleiche Weise wie die lineare Interpolation durchgeführt werden, die oben mit Bezug auf 2a beschrieben wurde. Ein Beispiel des Verringerns der Dimensionalität eines mehrdimensionalen Filterproblems wird in der SIGGRAPH Veröffentlichung von 1988 von Mitchell und Netravali "Reconstruction Filter in Computer Graphics" beschrieben, die erläutert, dass eine Bildrekonstruktion in zwei Dimensionen stattfindet und die Faltung eines 2D-Gitters von Abtastungen mit einem Filter k(x, y) beinhaltet. Trennbare Filter werden berücksichtigt, wobei die Abtastungen mit dem Produkt k(x)k(y) gefaltet werden. Die Veröffentlichung von Mitchell und Netravali beschreibt, dass trennbare Filter rechenmäßig effizienter als nichttrennbare Filter sind, weil der Filtervorgang in getrennten Durchgängen vertikal und horizontal durchgeführt werden kann.
  • Eine bilineare Interpolation kann auf eine einfache Art und Weise in Hardware beispielsweise unter Verwendung einer MAD(Multiplikations- und Additions)-Logik implementiert werden. Des Weiteren ist die bilineare Interpolation ein schneller Prozess, der keine große Menge an Leistung verbraucht. Daher kann die bilineare Interpolation häufig eine passende Wahl für eine Interpolation sein, die in Computersystemen implementiert wird, die insbesondere eine begrenzte Verarbeitungsleistung aufweisen, z. B. in mobilen Vorrichtungen, wie beispielsweise Smartphones, Tablets und Laptops.
  • Es kann jedoch sein, dass lineare und bilineare Interpolationen keine glatten interpolierten Werte bereitstellen. Insbesondere ist, obwohl lineare und bilineare Interpolationsverfahren interpolierte Werte bereitstellen, die stetig sind, die erste Ableitung (und Ableitungen höherer Ordnung) der interpolierten Werte typischerweise über die Datenpunktgrenzen nicht stetig. Polynominterpolationsverfahren höherer Ordnung, z. B. quadratisch-, kubisch-, biquadratisch-, usw. basierte und ihre mehrdimensionalen Varianten, stellen glattere interpolierte Werte als die entsprechenden linearen und bilinearen Interpolationsverfahren bereit. Von besonderem Interesse ist die kubische Interpolation, weil diese das einfachste Polynom ist, welches die Steuerpunkte interpolieren (d. h. durchlaufen) kann und wobei die erste Ableitung der interpolierten Werte über die Datenpunktgrenzen stetig sein kann. Kubische Interpolationsverfahren (einschließlich mehrdimensionale kubische Interpolationsverfahren, wie beispielsweise bikubische Interpolationsverfahren) paaren interpolierte Werte und die erste Ableitung der interpolierten Werte über Datenpunktgrenzen. Kubische Interpolationsverfahren sind jedoch komplexer zu implementieren als lineare Interpolationsverfahren (einschließlich der entsprechenden mehrdimensionalen linearen Interpolationsverfahren, wie beispielsweise bilineare Interpolationsverfahren). Einige Gründe dafür sind, dass die kubische Interpolation zweimal so viele Datenpunkten in jeder Dimension des Arrays verglichen mit der linearen Interpolation verwendet (and somit die bikubische Interpolation 4× so viele Datenpunkten wie die bilineare Interpolation erfordert) und die kubische Interpolation Rechenpolynome dritten Grades für eine Abtastposition innerhalb des Arrays umfasst. Daher kann beispielsweise die bikubische Interpolation der bilinearen Interpolation vorgezogen werden, wenn Rechengeschwindigkeit kein Thema ist. Ein Fachmann wird sich bewusst sein, dass es viele Arten von Steuerpunkt-basierten kubischen Kurven, einschließlich Bezier, Hermite und BSpline, gibt, und obwohl jede in jede andere abgebildet werden kann, indem lineare Kombinationen der Steuer/Abtast-Punkte genommen werden (siehe z. B. "Computer Graphics Prinzips und Practice", Zweite Auflage, Seiten 510 und 511 von Foley, van Dam u. a.) und, in einem weiteren Sinne, äquivalent sind, ist eine von besonderem Interesse das Catmull-Rom-Spline. Dieses weist die nützliche Eigenschaft auf, dass, falls die Abtastposition genau auf einem Datenpunkt liegt (z. B. falls U = 0 oder U = 1), der interpolierte Wert dann gleich dem Wert des Datenpunkts ist. Ferner sind dann, wie nachstehend beschrieben, wenn benachbarte Kurven drei Abtastpunkte gemeinsam nutzen, die Kurven auch C1 stetig, d. h. die ersten Ableitungen der Kurven sind stetig.
  • Ein Beispiel einer 1D kubischen Interpolation wird in 3a gezeigt, in der vier Datenpunkte (A bis D) verwendet werden, um einen interpolierten Wert (Iu) an einer Abtastposition zwischen den beiden zentralen Datenpunkten B und C zu bestimmen. Eine Linie 302 zeigt die interpolierten Werte, und es ist ersichtlich, dass die Linie 302 durch die Datenpunkte B&C läuft und dass der Gradient der Linie 302 (d. h. die erste Ableitung der Linie 302) mit den benachbarten stückweisen Segmenten, 302 AB und 302 CD, an den Kurvenbegrenzungen stetig ist. Die Abtastposition wird durch den Parameter, u, für die Region 0 ≤ u ≤ 1 gegeben. Wie oben beschrieben, kann der interpolierte Wert Iu gemäß einem Polynom dritten Grades gefunden werden, das den Parameter u und die vier Datenpunkten (A bis D) als Eingaben nimmt.
  • Eine bikubische Interpolation ist ein Beispiel eines 2D-Interpolationsverfahrens, welches das Konzept der kubischen Interpolation auf zwei Dimensionen erweitert.
  • Ein Beispiel der bikubischen Interpolation wird in 3b gezeigt, in welcher ein interpolierter Wert an einer Abtastposition 308 innerhalb eines 2 × 2 Quadrats von Datenpunkten 304 22, 304 23, 304 32 und 304 33 unter Verwendung der Werte der Datenpunkte 304 11 bis 304 44 bestimmt werden kann. Die Abtastposition 308 wird durch zwei Parameter (U und V) gegeben. In diesem Beispiel kann eine kubische Interpolation für jede der vier Zeilen von Datenpunkten (z. B. Datenpunkte 304 x1, bis 304 x4 für Zeile x) unter Verwendung des Parameters U getrennt durchgeführt werden, um einen jeweiligen interpolierten Zwischenwert 306 x zu bestimmen. Auf diese Weise wurde die Dimensionalität der Interpolationsrechnung verringert. Dann kann eine kubische Interpolation über die vier interpolierten Zwischenwerte 306 1 bis 306 4 unter Verwendung des Parameters V durchgeführt werden, um den interpolierten Wert 308 an der durch (U, V) gegebenen Abtastposition zu bestimmen Jede der fünf kubischen Interpolationen, die in diesem bikubischen Interpolationsverfahren beschrieben wurden, können auf die gleiche Weise wie die oben mit Bezug auf 3a beschriebene kubische Interpolation durchgeführt werden.
  • Kurzfassung
  • Diese Kurzfassung wird bereitgestellt, um eine Auswahl von Konzepten in einer vereinfachten Form vorzustellen, die nachstehend in der detaillierten Beschreibung weiter beschrieben werden. Diese Kurzfassung ist weder dazu gedacht, Schlüsselmerkmale oder wesentliche Merkmale des beanspruchten Gegenstands zu kennzeichnen, noch ist sie dazu gedacht dazu verwendet zu werden, um den Schutzbereich des beanspruchten Gegenstands zu beschränken.
  • Es wird ein Verfahren zum Bestimmen eines interpolierten Werts an einer Abtastposition innerhalb eines Arrays von Datenpunkten bereitgestellt, wobei an jeder eines Satzes von vorbestimmten Interpolationspositionen innerhalb des Arrays ein Satz von vorbestimmten Gewichten eine nichtlineare Interpolation darstellen, die auf eine Mehrzahl der Datenpunkte angewandt werden kann, wobei das Verfahren umfasst: für eine Mehrzahl der vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, Verwenden der entsprechenden Sätze von vorbestimmten Gewichten und der Mehrzahl der Datenpunkten, um eine Mehrzahl von umgebenden interpolierten Werten zu bestimmen, welche Ergebnisse des Durchführens der nichtlinearen Interpolation an den umgebenden vorbestimmten Interpolationspositionen darstellen; und Durchführen einer linearen Interpolation an der Mehrzahl von umgebenden interpolierten Werten, um einen interpolierten Wert an der Abtastposition zu bestimmen. Zum Beispiel kann die nichtlineare Interpolation eine kubische Interpolation, wie beispielsweise ein Catmull-Rom-Spline, sein.
  • Das Array kann ein n-dimensionales Array sein, und die umgebenden vorbestimmten Interpolationspositionen können die 2n der vorbestimmten Interpolationspositionen sein, welche am nächsten zur Abtastposition sind. Als Beispiel ist n = 2 und die lineare Interpolation ist eine bilineare Interpolation. In diesem Beispiel umfasst die Mehrzahl von Datenpunkten einen 4 × 4 Satz von Datenpunkten, und die Abtastposition wird durch zwei Parameter beschrieben, und das Verwenden der entsprechenden Sätze von vorbestimmten Gewichten und der Mehrzahl der Datenpunkte, um die Mehrzahl von umgebenden interpolierten Werte zu bestimmen, umfasst: für jede der Linien des 4 × 4 Satzes von Datenpunkten in einer ersten Dimension (z. B. Zeilen oder Spalten), Bestimmen eines ersten und eines zweiten interpolierten Zwischenwerts jeweils auf einer Seite einer ersten Komponente der Abtastposition in der ersten Dimension, die durch einen ersten der beiden Parameter angegeben wird; Verwenden der ersten interpolierten Zwischenwerte von den vier Linien in der ersten Dimension, um einen ersten und einen zweiten umgebenden interpolierten Wert jeweils auf einer Seite einer zweiten Komponente der Abtastposition in einer zweiten Dimension zu bestimmen, die durch einen zweiten der beiden Parameter angegeben wird; und Verwenden der zweiten interpolierten Zwischenwerte von den vier Linien in der ersten Dimension, um einen dritten und einen vierten umgebenden interpolierten Wert jeweils auf einer Seite der zweiten Komponente der Abtastposition in der zweiten Dimension zu bestimmen, die durch den zweiten der beiden Parameter angegeben wird. Zum Beispiel sind entweder: (i) die Linien in der ersten Dimension Zeilen des 4 × 4 Satzes von Datenpunkten und die Linien in der zweiten Dimension sind Spalten des 4 × 4 Satzes von Datenpunkten, oder (ii) die Linien in der ersten Dimension sind Spalten des 4 × 4 Satzes von Datenpunkten und die Linien in der zweiten Dimension sind Zeilen des 4 × 4 Satzes von Datenpunkten.
  • Es wird eine Interpolationslogik bereitgestellt, die ausgelegt ist, einen interpolierten Wert an einer Abtastposition innerhalb eines Arrays von Datenpunkten zu bestimmen, wobei an jeder eines Satzes von vorbestimmten Interpolationspositionen innerhalb des Arrays ein Satz von vorbestimmten Gewichten eine nichtlineare Interpolation darstellt, die auf eine Mehrzahl der Datenpunkte angewandt werden kann, wobei die Interpolationslogik umfasst: eine nichtlineare Interpolationseinheit, die ausgelegt ist, für eine Mehrzahl der vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, die entsprechenden Sätze von vorbestimmten Gewichten und die Mehrzahl der Datenpunkte zu verwenden, um eine Mehrzahl von umgebenden interpolierten Werten zu bestimmen, welche die Ergebnisse des Durchführens der nichtlinearen Interpolation an den umgebenden vorbestimmten Interpolationspositionen darstellen; und eine lineare Interpolationseinheit, die ausgelegt ist, eine lineare Interpolation an der Mehrzahl von umgebenden interpolierten Werten durchzuführen, um einen interpolierten Wert an der Abtastposition zu bestimmen.
  • Es kann ein computerlesbarer Code bereitgestellt sein, der ausgelegt ist, die Schritte von jedem der hier beschriebenen Verfahren durchzuführen, wenn der Code auf einem Computer läuft. Des Weiteren kann ein computerlesbarer Code zum Erzeugen von Interpolationslogik gemäß jeder der hier beschriebenen Beispiele bereitgestellt werden. Der computerlesbare Code kann auf einem computerlesbaren Speichermedium codiert sein.
  • Die obigen Merkmale können falls geeignet kombiniert werden, wie es für einen Fachmann offensichtlich sein würde, und können mit jedem der Aspekte der hier beschriebenen Beispiele kombiniert werden.
  • Kurze Beschreibung der Zeichnungen
  • Beispiele werden nun detailliert mit Bezug auf die begleitenden Zeichnungen beschrieben, in denen:
  • 1 einen 4 × 4 Satz von Datenpunkten eines Arrays und eine Abtastposition innerhalb des Arrays zeigt;
  • 2a ein Beispiel einer linearen Interpolation darstellt;
  • 2b ein Beispiel einer bilinearen Interpolation darstellt;
  • 3a ein Beispiel einer kubischen Interpolation darstellt;
  • 3b ein Beispiel einer bikubischen Interpolation darstellt;
  • 4a einen Satz von vorbestimmten Interpolationspositionen für ein kubisches Interpolationsverfahren gemäß hier beschriebenen Beispielen zeigt;
  • 4b einen Satz von vorbestimmten Interpolationspositionen für ein bikubisches Interpolationsverfahren gemäß hier beschriebenen Beispielen zeigt;
  • 5 eine schematische Darstellung der Interpolationslogik ist;
  • 6 ein Ablaufdiagramm für ein Verfahren zum Bestimmen eines interpolierten Werts an einer Abtastposition innerhalb eines Arrays von Datenpunkten ist;
  • 7 eine schematische Darstellung einer bikubischen Interpolationseinheit ist;
  • 8 eine schematische Darstellung einer Zeilenberechnungseinheit ist;
  • 9 eine schematische Darstellung einer Spaltenberechnungseinheit ist; und
  • 10 eine schematische Darstellung eines Computersystems ist, in dem Interpolationslogik implementiert ist.
  • Die begleitenden Zeichnungen veranschaulichen verschiedene Beispiele. Für den Fachmann ist erkennbar, dass die veranschaulichten Elementbegrenzungen (z. B., Kästchen, Gruppen von Kästchen oder anderen Formen) in den Zeichnungen ein Beispiel der Begrenzungen darstellen. Es kann sein, dass in einigen Beispielen ein Element als mehrere Elemente ausgestaltet sein kann oder dass mehrere Elemente als ein Element ausgestaltet sein können. Gemeinsame Bezugszeichen werden in allen Figuren verwendet, wo passend, um ähnliche Merkmale anzugeben.
  • Detaillierte Beschreibung
  • Es werden nun Ausführungsformen lediglich beispielhaft beschrieben.
  • Eine Interpolationslogik wird hier in Beispielen beschrieben, die interpolierte Werte bereitstellt, welche den interpolierten Werten sehr ähnlich sind, die von einer vollen kubischen (oder bikubischen) Interpolation bereitgestellt werden, die jedoch weniger komplex zu implementieren ist, z. B. weniger Verarbeitungsressourcen verwendet und/oder schneller auszuführen ist. Dies ermöglicht, eine Interpolation durchzuführen, die zu kubischen (oder bikubischen) Interpolationen ähnliche Ergebnisse gerade auf Computersystemen bereitstellt, welche begrenzte Verarbeitungsressourcen aufweisen, wie beispielsweise auf mobilen Vorrichtungen, z. B. Smartphones, Tablets oder Laptops, die typischerweise nicht imstande sein würden, eine volle kubische (bikubischen) Interpolation durchzuführen. Die Techniken können für andere Interpolationsfunktionen als kubische Interpolationsfunktionen, z. B. für Nicht-Polynominterpolationen, wie beispielsweise eine Mitchell-Netravali-Interpolation oder eine beliebige glatte Interpolation, verwendet werden.
  • Insbesondere stellt für jede eines Satzes von vorbestimmten Interpolationspositionen innerhalb eines Arrays von Datenpunkten ein Satz von vorbestimmten Gewichten eine kubische Interpolation dar, welche auf eine Mehrzahl der Datenpunkte innerhalb des Arrays angewandt werden kann. Das heißt, ein Satz von Gewichten ist vorbestimmt, welche verwendet werden können, um beispielweise eine gewichtete Summe an einigen der Datenpunkte durchzuführen, um interpolierte Werte an besonderen Interpolationspositionen in dem Array zu bestimmen. Wenn ein interpolierter Wert an einer Abtastposition gewünscht wird, dann können interpolierte Werte an einer Mehrzahl der vorbestimmten Interpolationspositionen bestimmt werden, welche die Abtastposition umgeben, und diese umgebenden interpolierten Werte können dann an eine lineare Interpolationseinheit übergeben werden. Die lineare Interpolation der umgebenden interpolierten Werte stellt einen interpolierten Wert an der Abtastposition bereit, welcher näherungsweise gleich dem interpolierten Wert ist, der durch eine volle kubische Interpolation bereitgestellt werden würde. Das Prinzip des Bestimmens der umgebenden interpolierten Werte an vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, und dann des Durchführens einer linearen Interpolation an den umgebenden interpolierten Werten, kann auf unterschiedlichen Weisen in unterschiedlichen Beispielen implementiert werden, von denen einige nachstehend beschrieben sind. Falls eine Abtastposition, bei der ein interpolierter Wert gewünscht wird, auf eine der vorbestimmten Interpolationspositionen fällt, dann können in einigen Beispielen die vorbestimmten Gewichte für die Interpolationsposition verwendet werden, um den interpolierten Wert zu bestimmen; in anderen Beispielen werden jedoch noch vier interpolierte Werte an die lineare Interpolationseinheit zum Bestimmen des interpolierten Werts an der Abtastposition übergeben, weil die Kosten der Übergabe der vier interpolierten Werte an die lineare Interpolationseinheit niedriger sein können als die Kosten der Behandlung dieser Situation als einen Sonderfall.
  • Ein Beispiel eines Approximierens einer 1D kubischen Interpolation wird in 4a gezeigt, in der vier Datenpunkte (A bis D) verwendet werden, um einen interpolierten Wert an einer Abtastposition, die durch den Parameter u gegeben wird, zwischen den beiden zentralen Datenpunkten B und C zu bestimmen. Eine Linie 402 zeigt das Ergebnis einer vollen kubischen Interpolation der vier Datenpunkte. In diesem Beispiel ist die kubische Interpolation ein Catmull-Rom-Spline, wobei jedoch in anderen Beispielen andere kubische Interpolationsverfahren verwendet werden könnten, wie beispielsweise eine Bezier-Kurve oder ein gleichmäßiges B-Spline. Es ist erkennbar, dass (für das Catmull-Rom-Spline) die Linie 402 durch die Datenpunkte C&B läuft und dass der Gradient der Linie 402 (d. h. die erste Ableitung der Linie 402) mit den benachbarten stückweisen Segmenten, 402 AB und 402 CD, an den Kurvenbegrenzungen stetig ist. Ein Satz von Interpolationspositionen (403 0 bis 403 8) wird in 4a gezeigt. Die Interpolationspositionen 403 unterteilen die Region zwischen den Datenpunkten B und C in acht Abschnitte. In anderen Beispielen kann es eine unterschiedliche Anzahl von Interpolationspositionen geben, die eine Region zwischen angrenzenden Datenpunkten des Arrays in N Abschnitte unterteilen, wobei N ≥ 2. An jeder der Interpolationspositionen 403 ist ein Satz von vorbestimmten Gewichten gespeichert, die auf die Datenpunkte A, B, C und D zum Durchführen einer gewichteten Summe angewandt werden können, um dadurch einen interpolierten Wert zu bestimmen, der das Ergebnis des Durchführens der kubischen Interpolation an der Interpolationsposition darstellt. Für das Catmull-Rom-Spline ist trivialerweise erkennbar, dass für die Interpolationsposition 403 0 die Gewichte für die Datenpunkte A, C und D Null sein werden und das Gewicht für den Datenpunkt B Eins sein wird, so dass, falls die Abtastposition genau auf den Datenpunkt B fällt, dann der Wert des Datenpunkts B zurückgegeben wird (es sei jedoch angemerkt, dass dies für eine andere Interpolationsfunktionen (kubisch oder anderweitig) nicht der Fall sein kann). Auf ähnliche Weise ist trivialerweise erkennbar, dass für die Interpolationsposition 403 8 die Gewichte für die Datenpunkte A, B und D Null sein werden und das Gewicht für den Datenpunkt C Eins sein wird, so dass, falls die Abtastposition genau auf den Datenpunkt C fällt, dann der Wert des Datenpunkts C zurückgegeben wird. Die Gewichte für die anderen vorbestimmten Interpolationspositionen (403 1 bis 403 7) sind weniger trivial und werden von der besonderen Interpolation (z. B. eine Catmull-Rom-Interpolation oder eine andere Interpolation, wie beispielsweise ein gleichmäßiges B-Spline) abhängig sein, die dargestellt wird. Beispiele der Gewichte für die anderen vorbestimmten Interpolationspositionen (403 1 bis 403 7) werden in nachstehend beschriebenen Beispielen gegeben, die sich auf ein Catmull-Rom-Spline beziehen, jedoch können für andere Interpolationsschemata (z. B. gleichmäßige B-Splines) unterschiedliche Gewichte verwendet werden, wie dies für einen Fachmann ersichtlich sein würde.
  • Eine Abtastposition, die durch den Parameter u gegeben wird, wird in 4a gezeigt, die nicht die gleiche wie beliebige der vorbestimmten Interpolationspositionen 403 ist. In diesem Fall werden interpolierte Werte an zwei der vorbestimmten Interpolationspositionen 403 3 und 403 4 bestimmt, welche die Abtastposition umgeben. Die umgebenden Interpolationspositionen 403 3 und 403 4 sind die beiden nächsten der vorbestimmten Interpolationspositionen 403 zur Abtastposition. Die umgebenden interpolierten Werte an den Interpolationspositionen 403 3 und 403 4 werden an eine lineare Interpolationseinheit übergeben, welche dann eine lineare Interpolation mit den umgebenden interpolierten Werten durchführt (z. B. unter Verwendung der in 2a veranschaulichten Prinzipien der linearen Interpolation), um einen interpolierten Wert an der Abtastposition, u, zu bestimmen.
  • Die vorbestimmten Gewichte werden verwendet, um interpolierte Werte an den vorbestimmten Interpolationspositionen 403 durch Durchführen gewichteter Summen der Datenpunkte A, B, C und D zu bestimmen. Dies umfasst keine Polynomberechnungen dritten Grades und ermöglicht, dass die interpolierten Werte an den vorbestimmten Interpolationspositionen auf eine sehr einfache Art und Weise bestimmt werden können, da sie z. B. lediglich MAD(Multiplikations- und Additions)-Operationen bedingen, die sehr einfach sind und schnell in Hardware zu implementieren sind. Ein Erhöhen der Anzahl von vorbestimmten Interpolationspositionen wird die Genauigkeit des endgültigen interpolierten Werts erhöhen, wird aber eine größere Anzahl von zu speichernden Gewichten und eine größere Anzahl von Bits, welche die Abtastposition definieren, erfordern, um dadurch zu kennzeichnen, welche der vorbestimmten Interpolationspositionen am nächsten zur Abtastposition sind. Ein Verwenden von neun vorbestimmten Interpolationspositionen 403 (d. h. sofern die Region zwischen den Datenpunkten B und C in acht Abschnitte untergeteilt ist), wie in 4a gezeigt, scheint einen guten Kompromiss bereitzustellen zwischen der Genauigkeit der interpolierten Werte und des Satzes von Daten, die für die vorbestimmten Gewichte gespeichert werden, und der Anzahl von Bits des Parameters u, der verwendet wird, um die Abtastposition zu bestimmen. In anderen Beispielen kann jedoch eine unterschiedliche Anzahl von vorbestimmten Interpolationspositionen verwendet werden. Der Fehler der stückweisen linearen Interpolation nimmt schnell ab, weil die Anzahl von Unterteilungen in der stückweisen linearen Interpolation zunimmt.
  • 4a zeigt ein 1D-Beispiel, in dem eine Interpolation an einem eindimensionalen Array von Datenpunkten durchgeführt wird und in dem es zwei umgebende Interpolationspositionen (403 3 und 403 4) gibt. Allgemeiner gesagt können die Prinzipien auf Beispiele erweitert werden, in denen eine Interpolation an einem n-dimensionalen Array von Datenpunkten (wobei n ≥ 1) durchgeführt wird, und in diesem Fall sind die umgebenden vorbestimmten Interpolationspositionen die 2n der vorbestimmten Interpolationspositionen, welche am nächsten zur Abtastposition sind.
  • Beispielsweise zeigt 4b zeigt ein Beispiel, in dem eine Interpolation an einem 2D-Array von Datenpunkten durchgeführt wird. In diesem Beispiel ist ein interpolierter Wert an einer Abtastposition 408 innerhalb eines 4 × 4 Quadrats von Datenpunkten 404 11 bis 404 44 zu bestimmen. In anderen Beispielen kann eine unterschiedliche Anordnung von Datenpunkten (d. h. nicht 4 × 4) verwendet werden, um einen interpolierten Wert an einer Abtastposition zu bestimmen. Die Abtastposition 408 wird durch zwei Parameter (U und V) angegeben, welche die Position der Abtastposition 408 in der zentralen Region zwischen den Datenpunkten 404 22, 404 23, 404 32 und 404 33 festlegen. In diesem Beispiel werden interpolierte Werte an viervorbestimmten Interpolationspositionen 414 11, 414 12, 414 21, und 414 22 bestimmt, welche die Abtastposition 408 umgeben. Um dies zu tun, werden interpolierte Werte an zwei der vorbestimmten Interpolationspositionen jeweils auf einer Seite der Zeilenkomponente der Abtastposition (durch den Parameter U gegeben und in 4b für die erste Zeile durch den Bezug 406 1 gezeigt) getrennt für jede der vier Zeilen von Datenpunkten (z. B. Datenpunkte 404 x1 bis 404 x4 für Zeile x) auf eine ähnliche zu der oben mit Bezug auf 4a beschriebenen Art und Weise bestimmt. Auf diese Weise wird für jede Zeile ein erster interpolierter Zwischenwert 410 bestimmt und ein zweiter interpolierter Zwischenwert 412 bestimmt. In dem in 4b gezeigten Beispiel ist der erste interpolierte Zwischenwert 410 links von der U Komponente der Abtastposition 406 und der zweite interpolierte Zwischenwert 412 rechts von der U Komponente der Abtastposition 406. Der erste und der zweite interpolierte Zwischenwerte für eine Zeile sind die zur U Komponente der Abtastposition 406 nächstliegenden beiden der vorbestimmten interpolierten Werte für diese Zeile.
  • Dann werden die ersten interpolierten Zwischenwerte von den vier Zeilen (410 1, 410 2, 410 3 und 410 4) verwendet und ein ähnliches Verfahren zu dem, das oben mit Bezug auf 4a beschrieben ist, wird implementiert, um zwei umgebende interpolierte Werte an vorbestimmten Interpolationspositionen 414 11 und 414 21 beiderseits der Spaltenkomponente der Abtastposition (durch den Parameter V gegeben und in 4b durch den Bezug 416 1 gezeigt) zu bestimmen. Auf ähnliche Weise werden die zweiten interpolierten Zwischenwerte von den vier Zeilen (412 1, 410 2, 410 3 und 412 4) verwendet und ein ähnliches Verfahren zu dem, das oben mit Bezug auf 4a beschrieben ist, wird implementiert, um zwei umgebende interpolierte Werte an vorbestimmten Interpolationspositionen 414 12 und 414 22 beiderseits der Spaltenkomponente der Abtastposition (durch den Parameter V gegeben und in 4b durch den Bezug 416 2 gezeigt) zu bestimmen. Daher wird ein 1D-Verfahren ähnlich dem, das oben beschrieben mit Bezug auf 4a beschrieben wurde, um Paare von interpolierten Werten an benachbarten vorbestimmten Positionen zu erzeugen, sechs Mal durchgeführt, um die vier umgebenden interpolierten Werte an den umgebenden Interpolationspositionen 414 11, 414 12, 41421 und 41422 zu bestimmen.
  • Die umgebenden interpolierten Werte an den umgebenden Interpolationspositionen 414 11, 414 12, 414 21 und 414 22 werden an eine bilineare Interpolationseinheit übergeben, die dann eine bilineare Interpolation mit den umgebenden interpolierten Werten durchführt (z. B. mit den in 2b veranschaulichten Prinzipien der bilinearen Interpolation), um einen interpolierten Wert an der Abtastposition 408 zu bestimmen. Auf diese Weise wird eine bikubische Interpolation durch sechs gewichtete Summen (die bei gegebenen vorbestimmten Gewichten in MAD-Logik in Hardware einfach zu implementieren sind) und eine bilineare Interpolation (die ebenfalls in MAD-Logik in Hardware einfach zu implementieren ist) approximiert. Es sei angemerkt, dass es wahrscheinlich ist, dass eine bilineare Interpolationseinheit in einer Grafikverarbeitungseinheit (GPU) für andere Zwecke aufgenommen wird, so dass eine bilineare Interpolationseinheit normalerweise nicht allein für den Zweck des Implementierens einer bikubischen Interpolation gemäß der hier beschriebenen Beispiele hinzugefügt werden muss. Daher sind die Hardwarekosten des Implementierens einer bikubischen Interpolation gemäß den hier beschriebenen Beispielen niedrig. Des Weiteren sei angemerkt, dass die bilineare Interpolation bei beliebigeren Positionen als bei der Bestimmung der umgebenden interpolierten Werte durchgeführt wird, die an den vorbestimmten umgebenden Interpolationspositionen 414 11, 414 12, 414 21 und 414 22 unter Verwendung der vorbestimmten Gewichte bestimmt werden.
  • 5 zeigt ein Beispiel einer Interpolationslogik 502, die ausgelegt ist, um einen interpolierten Wert an einer Abtastposition innerhalb eines 2D-Arrays von Datenpunkten gemäß den hier beschriebenen Beispielen zu bestimmen. Die Interpolationslogik 502 umfasst eine bikubische Interpolationseinheit 504 und eine bilineare Interpolationseinheit 506. In bevorzugten Beispielen werden die bikubischen und bilinearen Interpolationseinheiten 504 und 506 in Spezialzweck-Hardware implementiert, wie nachstehend ausführlicher beschrieben, wobei jedoch in anderen Beispielen die Einheiten 504 und 506 in Allzweck-Hardware implementiert sein könnten, die durch Software ausgelegt ist, die z. B. auf einer Verarbeitungseinheit (z. B. einer zentralen Verarbeitungseinheit (CPU) oder einer Grafikverarbeitungseinheit (GPU)) ausgeführt wird. Die bikubische Interpolationseinheit 504 ist angeordnet, um das Array von Datenpunkten und die Parameter (U und V) zu empfangen, welche die Abtastposition innerhalb des Arrays festlegen, bei der ein interpolierter Wert zu bestimmen ist. Die bikubische Interpolationseinheit 504 ist ausgelegt, um vorbestimmte Gewichte und die Datenpunkte zu verwenden, um eine Mehrzahl von interpolierten Werten an besonderen vorbestimmten Interpolationspositionen zu bestimmen, welche die Abtastposition umgeben, und um diese umgebenden interpolierten Werten der bilinearen Interpolationseinheit 506 bereitzustellen. Die bikubische Interpolationseinheit 504 sendet auch bilineare Parameter U und V an die bilineare Interpolationseinheit 506, um die Position der Abtastposition innerhalb der umgebenden interpolierten Werte zu beschreiben. Die bilineare Interpolationseinheit 506 ist ausgelegt, um eine bilineare Interpolation an den umgebenden interpolierten Werten unter Verwendung der bilinearen Parameter U und V durchzuführen, um einen interpolierten Wert an der Abtastposition zu bestimmen. Häufig wird ein Rechensystem eine bilineare Interpolationseinheit für andere Zwecke als zum Approximieren einer kubischen Interpolation gemäß den hier beschriebenen Verfahren umfassen. Die hier beschriebenen Verfahren bedienen sich der bilinearen Interpolationseinheit zum Approximieren einer kubischen Interpolation, so dass die extra Hardware, die benötigt wird, um die Fähigkeit eines Rechensystems, eine bilineare Interpolation durchzuführen, derart zu erweitern, so dass eine bikubische Interpolation ebenfalls approximiert werden kann, sehr klein ist verglichen mit einem Implementieren einer separaten vollen bikubischen Interpolationseinheit.
  • Weitere Einzelheiten eines Verfahrens zum Bestimmen eines interpolierten Werts an einer Abtastposition (z. B. an der Position 408) in einem 2D-Array (z. B. wie in 4b gezeigt) werden mit Bezug auf das in 6 gezeigte Ablaufdiagramm beschrieben.
  • In Schritt S602 werden Datenpunkte 404 des Arrays und die Parameter U und V an der Interpolationslogik 502 empfangen. Mit Bezug auf 4b beschreiben die Parameter U und V die Position der Abtastposition 408 innerhalb der Region zwischen den vier Datenpunkten 404 22, 404 23, 404 32 und 404 33. Die Interpolationslogik 502 arbeitet, um einen interpolierten Wert für die Abtastposition 408 wie nachstehend beschrieben zu bestimmen.
  • 7 zeigt eine detailliertere Ansicht der bikubischen Interpolationseinheit 504. Die bikubische Interpolationseinheit 504 umfasst eine Zeilenberechnungseinheit 702 (die als eine ”Berechnungseinheit A” bezeichnet werden kann), zwei Spaltenberechnungseinheiten 704 1 und 704 2 (die als ”Berechnungseinheit B” bezeichnet werden können), eine U Neuzuordnungseinheit 706, eine V Neuzuordnungseinheit 708, und eine Zeilennummereinheit 710. Die U Neuzuordnungseinheit 706 ist angeordnet, um den Parameter U zu empfangen und um eine neuzugeordnete Version des Parameters U der Zeilenberechnungseinheit 702 bereitzustellen, wie nachstehend ausführlicher beschrieben. Die Zeilenberechnungseinheit 702 ist ebenfalls ausgelegt, um eine Zeile von vier Datenpunkten (A, B, C und D) zu empfangen. Die Zeilenberechnungseinheit 702 ist angeordnet, um zwei interpolierte Zwischenwerte 410 und 412 den jeweiligen Spaltenberechnungseinheiten 704 1 und 704 2 bereitzustellen. Die V Neuzuordnungseinheit 708 ist ausgelegt, um den Parameter V zu empfangen und eine neuzugeordnete Version des Parameters V an beide der Spaltenberechnungseinheiten 704 bereitzustellen, wie nachstehend ausführlicher beschrieben. Die Zeilennummereinheit 710 ist ausgelegt, um eine Angabe der aktuellen Zeilennummer an beide der Spaltenberechnungseinheiten 704 bereitzustellen, wie nachstehend ausführlicher beschrieben. Die Spaltenberechnungseinheiten geben die umgebenden interpolierten Werte 414 11, 414 12, 414 21 und 414 22 von der bikubischen Berechnungseinheit 504 aus, die der bilinearen Berechnungseinheit 506 bereitgestellt werden können.
  • In Schritt S604 bestimmt für jede Zeile von Datenpunkten (A bis D), z. B. für die Datenpunkte 404 11, 404 12, 404 13 und 404 14 der in 4b gezeigten ersten Zeile, die Zeilenberechnungseinheit 702 einen ersten interpolierten Zwischenwert 410 und einen zweiten interpolierten Zwischenwert 412, welche die Zeilenkomponente der Abtastposition umgeben, die durch den von der U Neuzuordnungseinheit 706 bereitgestellten neuzugeordneten Parameter U bereitgestellt wird.
  • 8 zeigt eine detailliertere Ansicht der Zeilenberechnungseinheit 702. Die Zeilenberechnungseinheit 702 umfasst eine Aufspalteinheit 802, einen ersten Multiplexer 804, eine P Mischeinheit 806, eine Q Mischeinheit 808 und einen zweiten Multiplexer 810.
  • Die U Neuzuordnungseinheit 706 stellt eine Mehrzahl von Bits der Aufspalteinheit 802 basierend auf den Bits des Parameters U bereit. Zum Beispiel kann der Parameter U, der die Zeilenkomponente der Abtastposition beschreibt, k Bits, {u0, u1...uk-1}, umfassen, wobei als Beispiel k gleich elf sein kann. Die für den Parameter U verwendete Anzahl von Bits bestimmt die Auflösung, mit der die Abtastposition definiert werden kann. Die U Neuzuordnungseinheit 706 empfängt die k Bits des Parameters U und teilt den Parameter U in die ersten m Bits auf, die für die Verwendung in der Zeilenberechnungseinheit 702 sind, und die verbleibenden (k–m) Bits werden von der U Neuzuordnungseinheit 706 bereitgestellt, um einen bilinearen Parameter U anzugeben. Die bilineare Interpolationseinheit 506 verwendet den bilinearen Parameter U, um die bilineare Interpolation an den vier umgebenden interpolierten Werten durchzuführen, die von der bikubischen Interpolationseinheit 504 ausgegeben werden. Als Beispiel kann m gleich drei sein und diese drei Bits des Parameters U kennzeichnen, welches Achtel der ganzen Region zwischen zwei Datenpunkten B und C der Abtastposition innerhalb ist. Im in 4a gezeigten Beispiel ist die Zeilenkomponente der Abtastposition zwischen den Positionen 403 3 und 403 4, so dass die ersten drei Bits, welche die Abtastposition festlegen, gleich 011 sein werden. Die U Neuzuordnungseinheit 706 bestimmt vier Steuersignale: ”Rev”, ”PSelect”, ”QSelect” und ”PQSwap”, welche den Betrieb der Zeilenberechnungseinheit 702 steuern, und diese vier Steuersignale werden an die Aufspalteinheit 802 übergeben. Die Aufspalteinheit 802 übergibt das Signal ”Rev” an den Multiplexer 804, das Signal ”PSelect” an die P Mischeinheit 806, das Signal ”QSelect” an die Q Mischeinheit 808 und das Signal ”PQSwap” an den Multiplexer 810. Wie nachstehend ausführlicher beschrieben, sind die meisten interpolierenden Funktionen symmetrisch, so dass, falls die Steuerpunkte ABCD vertauscht werden, um gleich DCBA zu sein, die resultierende Kurve um u = 0,5 reflektiert wird. Des Weiteren sei angemerkt, dass für eine beliebige gegebene Abtastposition u die umgebenden vorbestimmten Abtastpositionen in einer Dimension eine gerade und eine ungerade angrenzende Abtastposition sein werden, folglich können die geraden und ungeraden Abtastpositionen in zwei verschiedene Sätze, z. B. in die P und Q Mischeinheiten 806 und 808, getrennt werden und getrennt behandelt werden.
  • In einem Beispiel, in dem m = 3 ist, weisen die Signale Rev, QSelect und PQSwap jeweils ein Bit und das Signal PSelect zwei Bits auf. In diesem Beispiel stellt die U Neuzuordnungseinheit 706 das Signal ”Rev” ein, um gleich dem ersten Bit des U-Parameters, u0, zu sein. Die U Neuzuordnungseinheit 706 stellt das Signal ”PQSwap” ein, um gleich dem dritten Bit des U-Parameters, u2, zu sein. Die U Neuzuordnungseinheit 706 stellt PSelect auf 00, und stellt QSelect auf 0 zu sein, falls die ersten m Bits des Parameters U gleich 000 oder 111 sind (d. h. falls die Zeilenkomponente der Abtastposition in den ersten oder letzten der acht Abschnitte der Region zwischen den Datenpunkten B und C ist); die U Neuzuordnungseinheit 706 stellt PSelect auf 10, und stellt QSelect auf 0, falls die ersten m Bits des Parameters U gleich 001 oder 110 sind (d. h. falls die Zeilenkomponente der Abtastposition in dem zweiten oder siebenten von acht Abschnitten der Region zwischen den Datenpunkten B und C ist); die U Neuzuordnungseinheit 706 stellt PSelect auf 10, und stellt QSelect auf 1, falls die ersten m Bits des Parameters U gleich 010 oder 101 sind (d. h. falls die Zeilenkomponente der Abtastposition im dritten oder sechsten von acht Abschnitten der Region zwischen den Datenpunkten B und C ist); und die U Neuzuordnungseinheit 706 stellt PSelect auf 11, und stellt QSelect auf 1, falls die ersten m Bits des Parameters U gleich 011 oder 100 sind (d. h. falls die Zeilenkomponente der Abtastposition in den vierten oder fünften von acht Abschnitten der Region zwischen den Datenpunkten B und C ist).
  • Das Signal Rev (das gleich dem ersten Bit des Parameters U ist) kennzeichnet, ob die Zeilenkomponente der Abtastposition innerhalb der ersten Hälfte (wenn u0 = 0) oder innerhalb der zweiten Hälfte (wenn u0 = 1) der Region zwischen den beiden Datenpunkten B und C ist. Die Interpolation, die z. B. durch die Linie 402 in 4a dargestellt ist, ist eine symmetrische Funktion. Falls die Abtastposition in der zweiten Hälfte der Region zwischen B und C ist (d. h. falls die Abtastposition näher zum Datenpunkt C als zum Datenpunkt B ist), dann können die Eingänge A, B, C und D von dem Multiplexer 804 umgekehrt werden. Falls die Eingänge zu vertauschen sind, dann werden die Eingänge A und D vertauscht und die Eingänge B und C vertauscht. Die möglicherweise umgekehrten Datenpunkte werden von dem Multiplexer als A', B', C' und D' ausgegeben, wie in 8 gezeigt. Dies verringert die Anzahl unterschiedlicher Positionen, bei denen es nötig sein kann, dass ein interpolierter Wert bestimmt werden muss, wodurch die Hardware der P Mischeinheit 806 und der Q Mischeinheit 808 vereinfacht wird.
  • Sowohl die P Mischeinheit 806 als auch die Q Mischeinheit 808 empfangen alle vier der von dem Multiplexer 804 ausgegebenen Datenpunkte (A', B', C' und D') und führen gewichtete Summen der Datenpunkte durch, um dadurch interpolierte Zwischenwerte (z. B. in 4b gezeigte 410 1 und 412 1) beiderseits der Zeilenkomponente der Abtastposition (z. B. 406 1) zu bestimmen. Die P Mischeinheit 806 ist ausgelegt, um einen interpolierten Wert an einer geraden der Interpolationspositionen 403 zu bestimmen. Zum Beispiel ist die P Mischeinheit 806 ausgelegt, um einen interpolierten Wert an einer der Interpolationspositionen 403 0, 403 2 oder 403 4 in Abhängigkeit von dem Signal PSelect zu bestimmen, das von der Aufspalteinheit 802 empfangen wird. In dem oben beschriebenen Beispiel sind die ersten drei Bits des Parameters U gleich 011, so dass PSelect=11 und die P Mischeinheit 806 einen interpolierten Wert an der Interpolationsposition 412 1 bestimmt, die an der Hälfte des Weges zwischen den Datenpunkten B und C ist (entsprechend der in 4a gezeigten Position 403 4). Falls PSelect=10 (was vorkommt, wenn die ersten m Bits des Parameters U gleich 001 oder 010 sind), dann würde die nächste der geraden Interpolationspositionen die Position 403 2 sein, die 1/4 des Weges vom Datenpunkt B zum Datenpunkt C ist. Falls PSelect=00 (was vorkommt, wenn die ersten m Bits des Parameters U gleich 000 sind), dann würde die nächste der geraden Interpolationspositionen die Position 403 0 sein, die den Wert des Datenpunkts B annimmt.
  • Auf ähnliche Weise ist die Q Mischeinheit 808 ausgelegt, einen interpolierten Wert an einer ungeraden der Interpolationspositionen 403 zu bestimmen. Zum Beispiel ist die Q Mischeinheit 808 ausgelegt, einen interpolierten Wert an einem der Interpolationspositionen 403 1, 403 3 in Abhängigkeit von dem Signal QSelect zu bestimmen, das von der Aufspalteinheit 802 empfangen wird. Im oben beschriebenen Beispiel sind die ersten drei Bits des Parameters U gleich 011, so dass QSelect=1 und die Q Mischeinheit 808 einen interpolierten Wert an der Interpolationsposition 410 1 bestimmt, die 3/8 des Weges vom Datenpunkt B zum Datenpunkt C ist (entsprechend der in 4a gezeigten Position 403 3). Falls QSelect=0 (was vorkommt, wenn die ersten m Bits des Parameters U gleich 000 oder 001 sind), dann würde die nächste der ungeraden Interpolationspositionen die Position 403, sein, die 1/8 des Weges vom Datenpunkt B zum Datenpunkt C ist.
  • Um eine volle kubische Interpolation zwischen den Punkten B und C zu implementieren, würde erfordern, dass viele kubische Operationen durchzuführen sind. In den hier beschriebenen Beispielen wird jedoch der interpolierte Wert nur an den vorbestimmten Interpolationspositionen bestimmt. Beispielsweise kann ein interpolierter Wert an jeder der Interpolationspositionen 403 bestimmt werden durch Durchführen einer gewichteten Summe gemäß: wA(u)A + wB(u)B' + wC(u)C' + wD(u)D' (1) wobei A', B', C' und D' die vier Datenpunkte der Zeile und wA, wB, wC und wD ihre entsprechenden Gewichte sind, welche die Funktionen des Parameters, u, sind, wobei die Werte der Gewichte für Werte des Parameters, u, entsprechend den vorbestimmten Interpolationspositionen vorbestimmt sind.
  • Die nachstehende Tabelle 1 zeigt den Wert der Gewichte, die angewandt werden können, um eine Catmull-Rom-Interpolation an den in 4a gezeigten neun Interpolationspositionen 403 0 bis 403 8 genau darzustellen.
    U wA wB wC wD
    0 0 1 0 0
    1/8 –49/1024 987/1024 93/1024 –7/1024
    2/8 –9/128 111/128 29/128 –3/128
    3/8 –7/1024 745/1024 399/1024 –45/1024
    4/8 –1/16 9/16 9/16 –1/16
    5/8 –45/1024 399/1024 745/1024 –7/1024
    6/8 –3/128 29/128 111/128 –9/128
    7/8 –7/1024 93/1024 987/1024 –49/1024
    8/8 0 0 1 0
    Tabelle 1 – Gewichte zum Darstellen einer Catmull-Rom-Interpolation
  • Obwohl die in Tabelle 1 gegebenen Gewichte in der P Mischeinheit 806 und der Q Mischeinheit 808 verwendet werden könnten, werden in bevorzugten Beispielen die Gewichte so eingestellt, dass sie keine perfekte Darstellung der Catmull-Rom-Interpolation sind, um die Hardware der P Mischeinheit 806 und der Q Mischeinheit 808 zu vereinfachen. Operationen, welche die Multiplikation mit einer vorbestimmten Konstante durchführen, sind im Allgemeinen kostengünstiger als beliebige Multiplikationsoperationen, und mit sorgfältiger Analyse der Konstanten kann ein Multiplizierer die Konstanten kombinieren und eine kostengünstigere Einheit (hinsichtlich der Menge an Hardware, die benötigt wird, um den Multiplizierer zu implementieren und hinsichtlich der Geschwindigkeit des Durchführens der Multiplikationsoperationen) als einen Allzweck-Multiplizierer bereitstellen. Zum Beispiel werden die Gewichte von denjenigen, die in Tabelle 1 gegeben werden, geringfügig angepasst, so dass die durch Gleichung 1 gegebene gewichtete Summe einfacher in Hardware, z. B. unter Verwendung einer MAD(Multiplikations- und Additions)-Logik, zu implementieren ist. Zum Beispiel zeigt Tabelle 2 vereinfachte Gewichte, die anstelle derjenigen verwendet werden könnten, die in Tabelle 1 gegeben werden. Der Unterschied zwischen den in Tabelle 1 und Tabelle 2 gezeigten Gewichten ist klein und es ist unwahrscheinlich, dass dieser zu irgendeiner Wahrnehmungsverzerrung an den endgültigen interpolierten Werten führen wird, wobei jedoch die Hardware erheblich vereinfacht wird, die verwendet wird, um die gewichtete Summe durchzuführen, wodurch ermöglicht wird, dass die Interpolation schneller und mit weniger verbrauchter Leistung durchgeführt werden kann.
    U wA wB wC wD
    0 0 1 0 0
    1/8 –12/256 247/256 23/256 –2/256
    2/8 –2/32 28/32 7/32 –1/32
    3/8 –18/256 186/256 100/256 –12/256
    4/8 –2/32 18/32 18/32 –2/32
    5/8 –12/256 100/256 186/256 –18/256
    6/8 –1/32 7/32 28/32 –2/32
    7/8 –2/256 23/256 247/256 –12/256
    8/8 0 0 1 0
    Tabelle 2 – Vereinfachte Gewichte zum Darstellen einer Catmull-Rom-Interpolation
  • Es ist erkennbar, dass die gerade nummerierten Auswertepositionen nun alle den gleichen Nenner verwenden (32, was als eine binäre Verschiebung von fünf binären Stellen implementiert sein kann), wie es die ungerade Positionen tun (256, was als ein binäre Verschiebung von acht binären Stellen implementiert sein kann), was sich vorteilhaft auf eine Hardwarekostenverringerung auswirkt. Des Weiteren ist erkennbar, dass für jede der vorbestimmten Interpolationspositionen die Summe der vorbestimmten Gewichte wA, wB, wC und wD gleich Eins ist, so dass das Ergebnis der gewichteten Summe ordnungsgemäß normiert ist. Es ist ebenfalls erkennbar, dass die vorbestimmten Gewichte symmetrisch sind, so dass wA(u) ≡ wD(1 – u) und wB(u) ≡ wC(1 – u). Diese Symmetrie ermöglicht, dass der Multiplexer 804 wie oben beschrieben verwendet werden kann, um die Reihenfolge der Datenpunkte zu vertauschen, falls passend, um dadurch die Menge der Hardware zu verringern, die in der P Mischeinheit 806 und der Q Mischeinheit 808 umfasst ist.
  • Die Ausgaben der P Mischeinheit 806 und der Q Mischeinheit 808 für die aktuelle Zeile sind die interpolierten Zwischenwerte 410 und 412 beiderseits der Zeilenkomponente der Abtastposition, z. B. die interpolierten Zwischenwerte für die in 4b gezeigten Interpolationspositionen 410 1 und 412 1 für die ersten Zeile beiderseits der Position 406 1. Der Multiplexer 810 kehrt die Zeilenfolge der Zwischenwerte 410 und 412 gemäß dem Signal PQSwap optional um (was gleich dem dritten Bit des Parameters U, u2, ist). Auf diese Weise ist der interpolierte Zwischenwert 410 links von der Zeilenkomponente der Abtastposition 406 und der interpolierte Zwischenwert 412 rechts von der Zeilenkomponente der Abtastposition 406.
  • In einem Beispiel, in dem die anfänglichen Werte des Datenarrays vorzeichenfreie k-Bit Werte sind, wird erkennbar, dass die negativen Gewichte ein Vorzeichenbit erfordern werden, um in irgendeiner Zwischenrechnung umfasst zu sein. Des Weiteren kann, weil einzelne Gewichte größer als 1,0 sein können, ein zusätzliches Bit oder Bits erforderlich sein, um dem Dynamikbereich gerecht zu werden. Als eine Optimierung am oben beschriebenen Verfahren können die P und Q Mischeinheiten 806 und 808 einen Versatz (engl. Offset) zur gewichteten Summe addieren, um sicherzustellen, dass der erste und zweite interpolierte Zwischenwert 410 und 412 nicht negativ sind, jedoch immer noch in die vergrößerte Anzahl von Bits passen, die enthalten sind, um den vergrößerten Dynamikbereich zu berücksichtigen. Dieser Versatz kann in den Spaltenberechnungseinheiten 704 1 und 704 2 entfernt werden, bevor die umgebenden interpolierten Werte 414 von der bikubischen Interpolationseinheit 504 ausgegeben werden. Die Addition des Versatzes bedeutet, dass die interpolierten Zwischenwerte 410 und 412 in einem vorzeichenfreien Format (und nicht in einem vorzeichenbehafteten Format) dargestellt werden können, was die Anzahl von Bits, die verwendet werden, um jeden der interpolierten Zwischenwerte 410 und 412 darzustellen, um ein Bit verringert. Ein Verringern der Anzahl von Bits, die zum Darstellen der interpolierten Zwischenwerte 410 und 412 verwendet werden, bedeutet, dass die Menge von Daten, die zwischen der Zeilenberechnungseinheit 702 und den Spaltenberechnungseinheiten 704 1 und 704 2 übergeben werden, verringert wird. Da die anfänglichen Datenwerte vielkanalig sein können, z. B. Bilddaten mit mehreren Farbkanälen, kann die Beseitigung eines Vorzeichenbits über die mehreren Kanäle und MAD-Einheiten zu einer bedeutenden Kostenersparnis werden.
  • Ein eine 8-Bit Eingabe annehmendes Beispiel der Berechnungen, die von der P Mischeinheit 806 durchgeführt werden, kann mit dem folgenden Pseudocode zusammengefasst werden:
    Figure DE102015114162A1_0002
  • Die Multiplikation von B mit 28 oder 18 kann als B*16 + entweder [B*8 + B*4] oder [B*2] implementiert werden. Die Multiplikation auf diese Weise kann kostengünstig in Hardware implementiert werden, weil die Multiplikation mit Potenzen von 2 als binäre Verschiebungen implementiert werden kann, die trivial in Hardware zu implementieren sind, so dass diese Rechnung höchstens drei Additionen und einige triviale konstante Verschiebungen verwendet. Ähnliche Faktorisierungen können für diese Rechnung und für die anderen Rechnungen verwendet werden, z. B. kann die Multiplikation von C mit 7 oder 18 als C*8 + entweder [–C] oder [C*8 + C*2] implementiert werden.
  • Es sei angemerkt, dass in einigen Beispielen, anstatt die Zwischenwerte (z. B. BTemp, CTemp und DTemp) zu berechnen und sie dann in einem getrennten Schritt zusammen zu addieren, um ein Ergebnis zu finden, wie durch den obigen Code impliziert, könnten die Zwischenwerte nicht explizit berechnet werden und stattdessen kann das Ergebnis direkt durch Addieren der entsprechenden Werte gefunden werden. Zum Beispiel könnte für u = 2/8, mit Bezug auf die oben gegebene Tabelle 2 das Ergebnis gefunden werden als: result = (B*16 + B*8 + B*2 + C*8 – C – 2*A – D + Offset + RoundingValue) >> 5, so dass die Werte von BTemp, CTemp und DTemp nicht explizit bestimmt werden.
  • Ein Beispiel der Berechnungen, die von der Q Mischeinheit 808 durchgeführt werden, können mit dem folgenden Pseudocode zusammengefasst werden:
    Figure DE102015114162A1_0003
  • Wie oben beschrieben, kann eine Faktorisierung für die Berechnungen von A, B, C und D verwendet werden, z. B. kann die Multiplikation von A mit 12 oder 18 als A*16 + entweder [–4*A] oder [A*2] implementiert werden. Auf ähnliche Weise könnten, wie oben beschrieben, in einigen Beispielen die Werte von ATemp, BTemp, CTemp und DTemp nicht explizit bestimmt werden und stattdessen kann der Wert des Ergebnisses durch direktes Addieren der entsprechenden Werte bestimmt werden.
  • Der erste interpolierte Zwischenwert 410 wird der ersten Spaltenberechnungseinheit 704 1 bereitgestellt und der zweite interpolierte Zwischenwert 412 wird der zweiten Spaltenberechnungseinheit 704 2 bereitgestellt. Eine Zeile von Daten wird von der Zeilenberechnungseinheit 702 an jedem einer Mehrzahl von Taktzyklen verarbeitet, so dass die Spaltenberechnungseinheiten 704 jeweils einen interpolierten Zwischenwert (410 oder 412) an jedem der Taktzyklen empfangen.
  • In Schritt S6061 multipliziert die erste Spaltenberechnungseinheit 704 1 die ersten interpolierten Zwischenwerte 410, die von der Zeilenberechnungseinheit 702 bei jedem Taktzyklus empfangen wurden, mit Gewichten gemäß der aktuellen Zeilennummer und akkumuliert die Ergebnisse. Auf ähnliche Weise und parallel multipliziert in Schritt S6062 die zweite Spaltenberechnungseinheit 704 2 die zweiten interpolierten Zwischenwerte 412, die von der Zeilenberechnungseinheit 702 bei jedem Taktzyklus empfangen wurden, mit Gewichten gemäß der aktuellen Zeilennummer und akkumuliert die Ergebnisse. Nach vier Taktzyklen haben die Spaltenberechnungseinheiten 704 jeweils vier interpolierte Zwischenwerte empfangen und jeweils zwei interpolierte Werte (414) beiderseits einer Spaltenkomponente (416) der Abtastposition (408) bestimmt, die durch den Parameter V angegeben wird.
  • 9 zeigt eine detailliertere Ansicht einer der Spaltenberechnungseinheiten 704. Beide Spaltenberechnungseinheiten 704 arbeiten auf eine entsprechende Art und Weise, wie mit Bezug auf 9 beschrieben. Wie in 9 gezeigt, umfasst die Spaltenberechnungseinheit 704 eine Aufspalteinheit 902, eine P Gewichte-LUT(look up table) 904, eine Q Gewichte-LUT 906, eine P Misch-MAD(Multiplikations- und Additions)-Einheit 908, eine Q Misch-MAD-Einheit 910, einen P Akkumulator 912, einen 0 Akkumulator 914, zwei Trunkier- und Klemmeinheiten (engl. truncate and clamp units) 916 und 918 und einen Multiplexer 920.
  • Die V Neuzuordnungseinheit 708 stellt der Aufspalteinheit 902 eine Mehrzahl von Bits basierend auf den Bits des Parameters V bereit. Zum Beispiel kann der Parameter V, der die Spaltenkomponente der Abtastposition beschreibt, k Bits, {v0, v1...vk-1}, umfassen, wobei als Beispiel k gleich elf sein kann. Die Anzahl von Bits, die für den Parameter V verwendet werden, bestimmt die Auflösung, mit der die Abtastposition definiert werden kann. Die V Neuzuordnungseinheit 708 empfängt die k Bits des Parameters V und teilt den Parameter V in die ersten m Bits auf, die zur Verwendung in der Spaltenberechnungseinheit 704 sind, und die verbleibenden (k – m) Bits werden von der V Neuzuordnungseinheit 708 bereitgestellt, um einen bilinearen Parameter V anzugeben. Die bilineare Interpolationseinheit 506 verwendet den bilinearen Parameter V, um die bilineare Interpolation an den vier umgebenden interpolierten Werten durchzuführen, die von der bikubischen Interpolationseinheit 504 ausgegeben werden. Als Beispiel kann m gleich drei sein, und diese drei Bits des Parameters V kennzeichnen, welches Achtel der ganzen Region zwischen zwei Datenpunkten auf den mittleren zwei der vier Zeilen von Datenpunkten die Abtastposition innerhalb ist. Auf eine ähnliche Art und Weise zur oben beschriebenen U Neuzuordnungseinheit 706 bestimmt die V Neuzuordnungseinheit 708 vier Steuersignale: ”Rev”, ”PSelect”, ”QSelect” und ”PQSwap”, die den Betrieb der Spaltenberechnungseinheit 702 steuern, und diese vier Steuersignale werden an die Aufspalteinheit 902 übergeben. Daher weisen in einem Beispiel, in dem m = 3 ist, die Sinale Rev, QSelect und PQSwap jeweils ein Bit auf und das Signal PSelect weist zwei Bits auf. Die Aufspalteinheit 902 übergibt das Signal PSelect und das Signal Rev Signal an die P Misch-MAD-Einheit 908, übergibt das Signal QSelect und das Signal Rev an die Q Misch-MAD-Einheit 910 und übergibt das Signal PQSwap an den Multiplexer 920.
  • Bei jedem Taktzyklus wird ein interpolierter Zwischenwert (410 oder 412) an der Spaltenberechnungseinheit 704 empfangen und sowohl an die P Misch-MAD-Einheit 908 als auch an die Q Misch-MAD-Einheit 910 übergeben. Die Zeilennummereinheit 708 stellt eine Angabe der aktuellen Zeile bereit, die dem interpolierten Zwischenwert entspricht, der im aktuellen Taktzyklus empfangen wird. Die Angabe der aktuellen Zeile wird an die P Gewichte-LUT 904, die Q Gewichte-LUT 906, die P Misch-MAD-Einheit 908 und die Q Misch-MAD-Einheit 910 übergeben.
  • Die P Gewichte-LUT 904 bestimmt ein Gewicht, das auf den interpolierten Zwischenwert durch die P Misch-MAD-Einheit 908 bei einem aktuellen Zyklus in Abhängigkeit von den Signalen PSelect und Rev und in Abhängigkeit von der aktuellen Zeilenzahl anzuwenden ist. Die Gewichte werden auf die gleiche Art und Weise wie für die Zeilen von Datenpunkten bestimmt, z. B. gemäß einer Catmull-Rom-Interpolation unter Verwendung der oben in Tabelle gezeigten Gewichte, wobei der interpolierte Zwischenwert (410 1 oder 412 1) auf der ersten Zeile dem Datenpunkt A entspricht; der interpolierte Zwischenwert (410 2 oder 412 2) auf der zweiten Zeile dem Datenpunkt B entspricht; der interpolierte Zwischenwert (410 3 oder 412 3) auf der dritten Zeile dem Datenpunkt C entspricht; und der interpolierte Zwischenwert (410 4 oder 412 4) auf der vierten Zeile dem Datenpunkt D entspricht.
  • Ein Beispiel dessen, wie ein Gewicht von der P Gewichte-LUT 904 bestimmt wird, wird mit dem folgenden Pseudocode gezeigt:
    Figure DE102015114162A1_0004
    Figure DE102015114162A1_0005
  • Auf ähnliche Weise bestimmt die Q Gewichte-LUT 906 ein Gewicht, das an den interpolierten Zwischenwert von der Q Misch-MAD-einheit 910 bei einem aktuellen Zyklus in Abhängigkeit von den Signalen QSelect und Rev und in Abhängigkeit von der aktuellen Zeilenzahl anzuwenden ist. Ein Beispiel dessen, wie ein Gewicht von der Q Gewichte-LUT 906 bestimmt wird, wird mit dem folgenden Pseudocode gezeigt:
    Figure DE102015114162A1_0006
    Figure DE102015114162A1_0007
  • Die P Misch-MAD-Einheit 908 empfängt den interpolierten Zwischenwert (410 oder 412) für die aktuelle Zeile, das Gewicht von der P Gewichte-LUT 904, den aktuell in dem P Akkumulator 912 gespeicherten Wert und die Angabe der aktuellen Zeilennummer von der Zeilennummereinheit 708. Die P Misch-MAD-Einheit 908 multipliziert den interpolierten Zwischenwert (410 oder 412) für die aktuelle Zeile mit dem Gewicht von der P Gewichte-LUT 904 und addiert diesen gewichteten Wert zu dem aktuellen Wert in dem P Akkumulator 912. Das Ergebnis wird zurück zu dem P Akkumulator 912 ausgeschrieben. Falls die aktuelle Zeile die erste Zeile einer Gruppe von Zeilen ist, über die eine Interpolation durchgeführt wird, dann speichert der P Akkumulator 912 keine relevanten Ergebnisse von vorherigen Zeilen, so dass der aktuelle Wert des P Akkumulators 912 nicht zu dem Ergebnis des Multiplizierens des interpolierten Zwischenwerts (410 oder 412) für die aktuelle Zeile mit dem Gewicht von der P Gewichte-LUT 904 addiert wird, bevor das Ergebnis an den P Akkumulator 912 ausgeschrieben ist. In bevorzugten Beispielen wird eine gewisse Rundung durchgeführt, um die gewünschten Ergebnisse mit der minimalen Anzahl Zwischen-Bruchbits zu geben. Das heisst, jede Multiplikations-Operation wird auf eine Genauigkeit von 2 Bruchbits gerundet, wobei jedoch, anstatt 0,5 zu addieren (relativ zu dem niederwertigsten gespeicherten Bit), 0,25 addiert wird, und außerdem bei der endgültigen Multiplikations-Additions-Operation 0,5 relativ zu den in der Trunkier- und Klemmeinheit 916 durchgeführten Trunkierungen addiert wird. Ein Beispiel des Betriebs der P Misch-MAD-Einheit 908 wird mit dem folgenden Pseudocode gezeigt:
    Figure DE102015114162A1_0008
    Figure DE102015114162A1_0009
  • Aufgrund der begrenzten Bereiche von Eingangswerten ist der Wert ”TempResult” eingeschränkt, um in dem Bereich [–2272, 10448] zu sein, und passt so in einen S15 Wert, so dass das akkumulierte Ergebnis (AccResult) in einen S12 Wert hineinpasst.
  • Auf ähnliche Weise weist die Q Misch-MAD-Einheit 910 die gleiche Grundstruktur jedoch mit geringfügig breiteren Zwischenwerten auf. Daher empfängt die Q Misch-MAD-Einheit 910 den interpolierten Zwischenwert (410 oder 412) für die aktuelle Zeile, das Gewicht von der Q Gewichte-LUT 906, den aktuell in dem Q Akkumulator 914 gespeicherten Wert und die Angabe der aktuellen Zeilennummer von der Zeilenzahleinheit 708. Die Q Misch-MAD-Einheit 910 multipliziert den interpolierten Zwischenwert (410 oder 412) für die aktuelle Zeile mit dem Gewicht von der Q Gewichte-LUT 906 und addiert diesen gewichteten Wert zum Wert, der aktuell in dem Q Akkumulator 914 ist. Das Ergebnis wird in den Q Akkumulator 914 zurückgeschrieben. Falls die aktuelle Zeile die erste Zeile einer Gruppe von Zeilen ist, über die eine Interpolation durchgeführt wird, dann speichert der Q Akkumulator 914 nicht relevante Ergebnisse von vorherigen Zeilen, so dass der aktuelle Wert des Q Akkumulators 914 nicht zum Ergebnis des Multiplizierens des interpolierten Zwischenwerts (410 oder 412) für die aktuellen Zeile mit dem Gewicht von der Q Gewichte-LUT 906 addiert wird, bevor das Ergebnis zu dem Q Akkumulator 914 ausgeschrieben wird. Wie oben beschrieben, wird in bevorzugten Beispielen ein gewisses Runden durchgeführt, um die gewünschten Ergebnisse mit der minimalen Anzahl von Zwischen-Bruchbits zu geben. Ein Beispiel des Betriebs der Q Misch-MAD-Einheit 910 wird mit dem folgenden Pseudocode gezeigt:
    Figure DE102015114162A1_0010
    Figure DE102015114162A1_0011
  • Aufgrund der begrenzten Bereiche von Eingangswerten ist der Wert ”TempResult” eingeschränkt, um in dem Bereich [–17540, 82948] zu sein, und passt so in einen S18 Wert hinein, so dass das akkumulierte Ergebnis (AccResult) in einen S12 Wert hineinpasst.
  • Die P und Q Akkumulatoreinheiten (912 und 914) im oben beschriebenen Beispiel sind 12-Bit Register, welche die S12 Ergebnisse speichern, die von den P und Q Misch-MAD-Einheiten 908 bzw. 910 ausgegeben wurden.
  • In Schritt S608 stellen, wenn vier Zeilen von Werten in den P und Q Akkumulatoren (912 und 914) akkumuliert wurden, die Werte in den P und Q Akkumulatoren dann die beiden umgebenden interpolierten Werte beiderseits der Spaltenkomponente der Abtastposition 416 dar, die durch den Parameter V angegeben wird, und diese akkumulierten Werte werden von den Spaltenberechnungseinheiten 704 ausgegeben. Die beiden umgebenden interpolierten Werte werden an den nächsten beiden der vorbestimmten Interpolationspositionen bestimmt. In einem Beispiel trunkieren und klemmen jedoch, bevor die akkumulierten Werte von der Spaltenberechnungseinheit 704 ausgegeben werden, die Trunkier- und Klemmeinheiten 916 und 918 die Zwölf-Bit vorzeichenbehafteten akkumulierten Werte von den jeweiligen Akkumulatoren 912 und 914, um dadurch die akkumulierten Werte in Acht-Bit vorzeichenfreie Werte zu konvertieren. Dies wird getan, um die interpolierten Werte auf den ursprünglichen Bereich zu beschränken, und in einigen Beispielen kann dies nicht notwendig sein. Zum Beispiel kann der Betrieb jeder der Trunkier- und Klemmeinheiten 916 und 918 durch den folgenden Pseudocode zusammengefasst werden:
    Figure DE102015114162A1_0012
  • Die Ausgaben der Trunkier- und Klemmeinheiten 916 und 918 von einer der Spaltenberechnungseinheiten 704 sind die umgebenden interpolierten Werte 414 für eine Spalte beiderseits der Spaltenkomponente der Abtastposition. Zum Beispiel stellen in der ersten Spaltenberechnungseinheit 704 1 die Ausgaben der Trunkier- und Klemmeinheiten 916 und 918 die umgebenden interpolierten Werte 414 11 und 414 21 (wie in 4b gezeigt) beiderseits der Position 416 1 dar. Auf ähnliche Weise stellen beispielhaft in der zweiten Spaltenberechnungseinheit 7042 die Ausgaben der Trunkier- und Klemmeinheiten 916 und 918 die umgebenden interpolierten Werte 414 12 und 414 22 (wie in 4b gezeigt) beiderseits der Position 416 2 dar. In jeder der Spaltenberechnungseinheiten 704 kehrt der Multiplexer 920 die Zeilenfolge der umgebenden interpolierten Werte 414 gemäß dem Signal DPQSwap optional um (was gleich dem dritten Bit des Parameters V, v2, ist). Auf diese Weise ist der erste umgebende interpolierte Wert 414 1 über der Spaltenkomponente der Abtastposition 416 und der zweite umgebende interpolierte Wert 414 2 unter der Spaltenkomponente der Abtastposition 416. Zum Beispiel kann der Betrieb des Multiplexers 920 durch den folgenden Pseudocode gegeben werden:
    Figure DE102015114162A1_0013
  • Die vier umgebenden interpolierten Werte 414 11, 414 12, 414 21 und 414 22 werden von der bikubischen Interpolationseinheit 504 ausgegeben und an die bilineare Interpolationseinheit 506 übergeben. Des Weiteren werden der bilineare Parameter U und der bilineare Parameter V von der bikubischen Interpolationseinheit 504 an die bilineare Interpolationseinheit 506 übergeben. In Schritt S610 führt die bilineare Interpolationseinheit 504 eine bilineare Interpolation an den umgebenden interpolierten Werte 414 11, 414 12, 414 21 und 414 22 unter Verwendung der bilinearen Parameter U und V durch, welche die Abtastposition 408 zwischen den umgebenden interpolierten Werten angeben. Auf diese Weise wird ein interpolierter Wert bestimmt. Der interpolierte Wert wird von der Interpolationslogik 502 ausgegeben und stellt das Ergebnis der Interpolation dar.
  • Es ist erkennbar, dass das Ergebnis der bilinearen Interpolation an den umgebenden interpolierten Werten 414 11, 414 12, 414 21 und 414 22 einen interpolierten Wert bereitstellen wird, der näher zu einer vollen bikubischen Interpolation ist als wenn eine bilineare Interpolation an den Datenpunkten 404 22, 404 23, 404 32 und 404 33 durchgeführt worden wäre. In diesem Sinne stellt die Interpolationslogik 502 glattere interpolierte Werte bereit, als wenn nur eine bilineare Interpolationseinheit verwendet werden würde. Die Interpolationslogik 502 ist jedoch viel einfacher in Hardware als eine volle bikubische Interpolationseinheit zu implementieren, weil die Interpolationslogik 502 gewichtete Summen und nicht relativ komplexe Polynomberechnungen dritten Grades durchführt.
  • In den oben beschriebenen Beispielen sind die umgebenden interpolierten Werte 414 die nächsten der vorbestimmten Interpolationspositionen zur Abtastposition 408. In anderen Beispielen würde es möglich sein (obwohl es unwahrscheinlicher Weise bevorzugt ist), umgebende interpolierte Werte zu wählen, welche nicht die nächsten der vorbestimmten Interpolationspositionen zu der Abtastposition sind. In diesen anderen Beispielen ist der endgültige interpolierte Wert wahrscheinlicherweise weiter von dem Ergebnis des Durchführens einer vollen bikubischen Interpolation.
  • Die oben beschriebenen Beispiele umfassen eine bikubische Interpolationseinheit 504 und eine bilineare Interpolationseinheit 506. In anderen Beispielen könnte die Interpolationseinheit 504 jede Art von Interpolationseinheit außer einer linearen Interpolationseinheit, d. h. eine ”nichtlineare” Interpolationseinheit sein. Das heisst, im Allgemeinen ist die Interpolationseinheit 504 eine nichtlineare Interpolationseinheit, die ausgelegt ist, um eine Art von nichtlinearer Interpolation durchzuführen. Der Begriff ”nichtlineare Interpolation” wird hier verwendet, um auf eine andere Interpolation als eine lineare Interpolation zu verweisen, d. h. jede Interpolation, welche nichtlinear ist, und kann zum Beispiel eine Polynominterpolation, eine Interpolation kubischer oder höherer Ordnung, eine Mitchell-Netravali-Interpolation oder andere Nicht-Polynominterpolation, oder jede andere geeignete Interpolation sein. Die Interpolationslogik 502 arbeitet, um die nichtlineare Interpolation zu approximieren, ohne zu verlangen, dass die vollen nichtlinearen Interpolationsberechnungen durchgeführt werden.
  • In den in 4a und 4b gezeigten Beispielen gibt es acht vorbestimmte Interpolationspositionen zwischen zwei angrenzenden Datenpunkten in einer Dimension. In anderen Beispielen kann es eine unterschiedliche Anzahl (z. B. 2, 4, 10 oder 16) von vorbestimmten Interpolationspositionen zwischen zwei angrenzenden Datenpunkten in einer Dimension geben. Die vorbestimmten Interpolationspositionen sind vorzugsweise zwischen angrenzenden Datenpunkten regelmäßig beabstandet, wie in den oben beschriebenen Beispielen, wobei es jedoch in einigen Beispielen für die vorbestimmten Interpolationspositionen möglich sein würde, unregelmäßig zwischen angrenzenden Datenpunkten beabstandet zu sein.
  • Wie in 5 gezeigt und oben beschrieben umfasst die Interpolationslogik 502 eine nichtlineare Interpolationseinheit (z. B. die bikubische Interpolationseinheit 504) und eine lineare Interpolationseinheit (z. B. die bilineare Interpolationseinheit 506). Die nichtlineare Interpolationseinheit und die lineare Interpolationseinheit könnten im gleichen Interpolationsmodul implementiert sein oder sie könnten in getrennten Modulen innerhalb eines Computersystem implementiert sein, wobei eine Kommunikation zwischen der nichtlinearen Interpolationseinheit und der linearen Interpolationseinheit über Schnittstellen sein kann, was ermöglicht, dass zwischen den unterschiedlichen Modulen innerhalb des Computersystems Daten übergeben werden können.
  • In den oben beschriebenen Beispielen wird eine der vier Zeilen des 4 × 4 Satzes von Datenpunkten an jedem einer Mehrzahl von Taktzyklen verarbeitet. In anderen Beispielen kann jedoch einiges der Verarbeitung parallel durchgeführt werden. Zum Beispiel können mehr als eine der vier Zeilen des 4 × 4 Satzes von Datenpunkten parallel verarbeitet werden. Ein Erhöhen der Parallelisierung der Verarbeitung kann die Leistung (z. B. die Geschwindigkeit) des Systems erhöhen.
  • Die oben mit Bezug auf 5 bis 9 beschriebenen Verfahren beziehen sich auf die Interpolation innerhalb eines 2D-Arrays von Datenpunkten. Entsprechende Prinzipien können auf die Interpolation innerhalb eines n-dimensionalen Arrays angewandt werden, wobei n ≥ 1. Zum Beispiel kann für eine Interpolation innerhalb eines 3D-Arrays von Datenpunkten die Interpolationslogik umfassen: (i) eine trikubische Interpolationseinheit, die ausgelegt ist, acht umgebende interpolierte Werte an den acht nächsten vorbestimmten Interpolationspositionen zu einer Abtastposition zu bestimmen; und (ii) eine trilineare Interpolationseinheit, die ausgelegt ist, eine trilineare Interpolation an den acht umgebenden interpolierten Werten durchzuführen, um den interpolierten Wert zu bestimmen.
  • In den oben beschriebenen Beispielen wird ein Array von Daten zuerst in Zeilen und dann in Spalten verarbeitet. Es würde für einen Fachmann ersichtlich sein, dass die gleichen Techniken angewendet werden könnten, um ein Array von Daten zuerst in Spalten und dann in Zeilen zu verarbeiten. Das heißt, die Verarbeitung von Zeilen und Spalten könnte in den oben beschriebenen Beispielen vertauscht werden.
  • Das hier beschriebene Interpolationsverfahren kann für jede geeignete Interpolation verwendet werden. Zum Beispiel können die Datenpunkte im Array Texel einer Textur sein, wobei ein interpolierter Wert einen Texturwert an einer Abtastposition darstellt. Alternativ können die Datenpunkte im Array Pixel eines Bildes sein, wobei ein interpolierter Wert einen Bildwert an einer Abtastposition darstellt, was für Bildverarbeitungsunktionen, wie beispielsweise Bildskalierung oder Linsenaberrationskorrektur, nützlich sein könnte. Im weiteren Sinne können die Datenpunkte für jede Art von grafischen Daten sein. Im noch weiteren Sinne können in anderen Beispielen die Datenpunkte Höhe, Temperatur, Dichte oder elektrisches Feld oder jede andere entsprechende Quantität darstellen.
  • Die Werte und Datenpunkte werden in den obigen Beispielen im Festkommaformat beschrieben. Im Allgemeinen kann jedes geeignete Format verwendet werden und beispielsweise können die Werte und/oder Datenpunkten in einigen Beispielen als Fließkommazahlen dargestellt werden.
  • Die oben beschriebene Interpolationslogik 502 kann in einem Computersystem implementiert sein. Zum Beispiel zeigt 10 ein Computersystem, das eine GPU 1002, eine CPU 1004, einen Speicher 1006 und andere Vorrichtungen 1008, wie beispielsweise eine Anzeige 1010, einen Lautsprecher 1012, ein Mikrofon 1014 und eine Tastatur 1016 umfasst. Die Komponenten des Computersystems können miteinander über einen Kommunikationsbus 1018 kommunizieren. Die Interpolationslogik 502 kann (z. B. in Hardware) als Teil der GPU 1002 implementiert sein, wie in 10 gezeigt. Alternativ kann die Interpolationslogik auf der CPU 1004 implementiert sein. Falls die Interpolationslogik 502 in Software implementiert ist, dann kann sie als Computerprogrammcode im Speicher 1006 gespeichert und auf einer Verarbeitungseinheit im Computersystem (z. B. auf der GPU 1002 oder der CPU 1004) ausgeführt werden.
  • Im Allgemeinen kann jede der oben beschriebenen Funktionen, Verfahren, Techniken oder Komponenten (z. B. die Interpolationslogik 502 und ihre Komponenten) in Modulen unter Verwendung von Software, Firmware, Hardware (z. B., Festlogikschaltungen) oder jede Kombination dieser Implementierungen implementiert sein. Die Begriffe ”Modul”, ”Funktionalität”, ”Komponente”, ”Block”, ”Einheit” und ”Logik” werden hier verwendet, um im Allgemeinen Software, Firmware, Hardware oder jede Kombination derselben darzustellen.
  • Im Fall einer Softwareimplementierung stellt das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik einen Programmcode dar, der spezifizierte Aufgaben durchführt, wenn er auf einem Prozessor (z. B. einer oder mehrerer CPUs oder GPUs) ausgeführt wird. In einem Beispiel können die beschriebenen Verfahren von einem mit Software ausgelegten Computer durchgeführt werden, die in maschinenlesbarer Form auf einem computerlesbaren Medium gespeichert ist. Eine derartige Konfiguration eines computerlesbaren Mediums ist ein signaltragendes Medium und ist somit ausgelegt, um die Anweisungen (z. B. als eine Trägerwelle) an die Rechenvorrichtung, wie beispielsweise über ein Netz, zu senden. Das computerlesbare Medium kann auch als ein nichttransitorisches computerlesbares Speichermedium ausgelegt sein und ist somit kein signaltragendes Medium. Beispiele eines computerlesbaren Speichermediums umfassen: einen Schreib-Lese-Speicher (RAM), einen Nur-Lese-Speicher (ROM), eine optische Platte, einen Flash-Speicher, einen Festplattenspeicher und andere Speichervorrichtungen, die magnetische, optische und andere Techniken verwenden können, um Anweisungen oder andere Daten zu speichern, und auf die von einer Maschine zugegriffen werden können.
  • Die Software kann in der Form eines Computerprogramms sein, das einen Computerprogrammcode zum Konfigurieren eines Computers umfasst, um die konstituierenden Bereiche der beschriebenen Verfahren durchzuführen, oder in der Form eines Computerprogramms sein, das Computerprogrammcodemittel umfasst, die ausgelegt sind, um alle Schritte beliebiger der hier beschriebenen Verfahren durchzuführen, wenn das Programm auf einem Computer läuft, und wobei das Computerprogramm auf einem computerlesbaren Medium verkörpert sein kann. Der Programmcode kann in einem oder mehreren computerlesbaren Medien gespeichert sein. Die Merkmale der hier beschriebenen Techniken sind plattformunabhängig, was bedeutet, dass die Techniken auf einer Vielfalt von Rechenplattformen, die eine Vielfalt von Prozessoren aufweisen, implementiert werden können.
  • Fachleute werden ebenfalls feststellen, dass die gesamte oder ein Teilbereich der Funktionalität, der Techniken oder der Verfahren von einer zweckbestimmten Schaltung, einer anwendungsspezifischen integrierten Schaltung, einem programmierbaren Logik-Array, einem feldprogrammierbaren Gate-Array oder dergleichen ausgeführt werden kann. Zum Beispiel kann das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik (z. B. die Interpolationslogik 502 und ihre Komponenten) Hardware in der Form von Schaltungen umfassen. Derartige Schaltungen können Transistoren und/oder andere Hardwareelemente umfassen, die in einem Herstellungsprozess verfügbar sind. Derartige Transistoren und/oder andere Elemente können verwendet werden, um Schaltungen oder Strukturen zu bilden, die Speicher implementieren und/oder enthalten, wie beispielsweise Register, Flipflops oder Halteglieder (Latches), logische Operatoren, wie beispielsweise boolesche Operationen, mathematische Operatoren, wie beispielsweise Addierer, Multiplizierer oder Schiebevorrichtungen, und Zwischenverbinder. Derartige Elemente können als kundenspezifische Schaltungen oder Standardzellen-Bibliotheken, Makros oder auf anderen Abstraktionsebenen bereitgestellt werden. Derartige Elemente können in einer speziellen Anordnung miteinander verbunden sein. Das Modul, die Funktionalität, die Komponente, die Einheit oder die Logik (z. B. die Interpolationslogik 502 und ihre Komponenten) können Schaltungen mit fester Funktion, und Schaltungen, die programmiert werden können, um eine Funktion oder Funktionen durchzuführen, umfassen; eine derartige Programmierung kann von einer Firmware oder einem Software-Update oder einem Steuermechanismus bereitgestellt werden. In einem Beispiel weist die Hardwarelogik Schaltungen auf, die eine Festfunktionsoperation, eine Zustandsmaschine oder einen Prozess implementieren.
  • Es ist ebenfalls beabsichtigt, Software einzuschließen, welche die Konfiguration von Hardware ”beschreibt” oder definiert, die ein Modul, Funktionalität, Komponente, Einheit oder Logik, wie oben beschrieben, implementiert, wie beispielsweise eine HDL(Hardwarebeschreibungssprache)-Software, wie sie zum Entwerfen von integrierten Schaltungen oder zum Konfigurieren von programmierbaren Chips verwendet wird, um gewünschte Funktionen auszuführen. Das heißt, es kann ein computerlesbares Speichermedium bereitgestellt werden, das darauf einen computerlesbaren Programmcode codiert hat zum Erzeugen von Interpolationslogik, die ausgelegt ist, jedes der hier beschriebenen Verfahren durchzuführen, oder zum Erzeugen von Interpolationslogik, die jede hier beschriebene Einrichtung umfasst. Das heißt, ein Computersystem kann ausgelegt sein, eine Darstellung einer digitalen Schaltung aus Definitionen von Schaltungselementen und Daten, die Regeln zum Kombinieren dieser Schaltungselemente festlegen, zu erzeugen, wobei ein nichttransitorisches computerlesbares Speichermedium darauf gespeicherte prozessorausführbare Anweisungen aufweisen kann, die, wenn sie an einem derartigen Computersystem ausgeführt werden, das Computersystem veranlassen, eine Interpolation wie hier beschrieben zu erzeugen. Um es anders auszudrücken, es kann ein nichttransitorisches computerlesbares Speichermedium bereitgestellt werden, das darauf computerlesbare Anweisungen gespeichert hat, die, wenn sie an einem Computersystem zum Erzeugen einer Manifestation einer integrierten Schaltung verarbeitet werden, das Computersystem veranlassen, eine Manifestation von Interpolationslogik gemäß jedem der hier beschriebenen Beispiele zu erzeugen.
  • Die Begriffe 'Prozessor' und 'Computer' werden hier verwendet, um sich auf jede Vorrichtung oder Teilbereich davon mit Verarbeitungsfähigkeit zu beziehen, so dass sie Anweisungen ausführen kann, oder auf eine zweckbestimmte Schaltung zu beziehen, die fähig ist, alles oder ein Teilbereich der Funktionalität oder Verfahren oder jede Kombination davon auszuführen.
  • Obwohl der Gegenstand in einer Sprache beschrieben worden ist, die für strukturelle Merkmale und/oder methodologische Handlungen spezifisch ist, ist es selbstverständlich, dass der in den beigefügten Patentansprüchen definierte Gegenstand nicht notwendigerweise auf die oben beschriebenen speziellen Merkmale oder Handlungen beschränkt ist. Vielmehr werden die speziellen Merkmale und Handlungen als Beispielformen zur Implementierung der Ansprüche offenbart. Es ist verständlich, dass sich die oben beschriebenen Nutzen und Vorteile auf ein Beispiel oder auf mehrere Beispiele beziehen können.
  • Jeder beliebiger Bereich oder Wert, der hier gegeben ist, kann erweitert oder geändert werden, ohne die gesuchte Wirkung zu verlieren, wie dies für den Fachmann ersichtlich ist. Die Schritte der hier beschriebenen Verfahren können in jeder geeigneter Reihenfolge oder gegebenenfalls gleichzeitig, wo passend, ausgeführt werden. Aspekte beliebiger der oben beschriebenen Beispiele können mit Aspekten von beliebigen der anderen beschriebenen Beispiele kombiniert werden, um weitere Beispiele zu bilden, ohne die gesuchte Wirkung zu verlieren.
  • ZITATE ENTHALTEN IN DER BESCHREIBUNG
  • Diese Liste der vom Anmelder aufgeführten Dokumente wurde automatisiert erzeugt und ist ausschließlich zur besseren Information des Lesers aufgenommen. Die Liste ist nicht Bestandteil der deutschen Patent- bzw. Gebrauchsmusteranmeldung. Das DPMA übernimmt keinerlei Haftung für etwaige Fehler oder Auslassungen.
  • Zitierte Nicht-Patentliteratur
    • SIGGRAPH Veröffentlichung von 1988 von Mitchell und Netravali ”Reconstruction Filter in Computer Graphics” [0004]
    • ”Computer Graphics Prinzips und Practice”, Zweite Auflage, Seiten 510 und 511 von Foley, van Dam u. a. [0006]

Claims (20)

  1. Interpolationslogik, die ausgelegt ist, einen interpolierten Wert an einer Abtastposition innerhalb eines Arrays von Datenpunkten zu bestimmen, wobei an jeder eines Satzes von vorbestimmten Interpolationspositionen innerhalb des Arrays ein Satz von vorbestimmten Gewichten eine nichtlineare Interpolation darstellt, die auf eine Mehrzahl der Datenpunkte angewandt werden kann, wobei die Interpolationslogik umfasst: eine nichtlineare Interpolationseinheit, die ausgelegt ist, für eine Mehrzahl der vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, die entsprechenden Sätze von vorbestimmten Gewichten und die Mehrzahl der Datenpunkte zu verwenden, um eine Mehrzahl von umgebenden interpolierten Werten zu bestimmen, die Ergebnisse des Durchführens der nichtlinearen Interpolation an den umgebenden vorbestimmten Interpolationspositionen darstellen; und eine lineare Interpolationseinheit, die ausgelegt ist, eine lineare Interpolation an der Mehrzahl von umgebenden interpolierten Werten durchzuführen, um einen interpolierten Wert an der Abtastposition zu bestimmen.
  2. Interpolationslogik gemäß Anspruch 1, wobei die nichtlineare Interpolation eine kubische Interpolation ist.
  3. Interpolationslogik gemäß einem vorhergehenden Anspruch, wobei die nichtlineare Interpolationseinheit ausgelegt ist, gewichtete Summen der Datenpunkte unter Verwendung der entsprechenden Sätze von vorbestimmten Gewichten durchzuführen, um die Mehrzahl der umgebenden interpolierten Werte zu bestimmen.
  4. Interpolationslogik gemäß einem vorhergehenden Anspruch, wobei das Array ein n-dimensionales Array ist und die umgebenden vorbestimmten Interpolationspositionen die 2n der vorbestimmten Interpolationspositionen sind, welche am nächsten zur Abtastposition sind, wobei n ≥ 1.
  5. Interpolationslogik gemäß Anspruch 3, wobei die Mehrzahl von Datenpunkten einen 4 × 4 Satz von Datenpunkten umfasst, wobei die Abtastposition von zwei Parametern beschrieben wird, und wobei die nichtlineare Interpolationseinheit umfasst: eine Berechnungseinheit A, die ausgelegt ist, einen ersten und einen zweiten interpolierten Zwischenwert jeweils auf einer Seite einer ersten Komponente der Abtastposition in einer ersten Dimension für jede der Linien des 4 × 4 Satzes von Datenpunkten in der ersten Dimension zu bestimmen, wobei die erste Komponente der Abtastposition in der ersten Dimension durch einen ersten der beiden Parameter angegeben wird; eine erste Berechnungseinheit B, die ausgelegt ist, die ersten interpolierten Zwischenwerte von den vier Linien in der ersten Dimension zu verwenden, um einen ersten und einen zweiten umgebenden interpolierten Wert jeweils auf einer Seite einer zweiten Komponente der Abtastposition in einer zweiten Dimension zu bestimmen, die durch einen zweiten der beiden Parameter angegeben wird; und eine zweite Berechnungseinheit B, die ausgelegt ist, die zweiten interpolierten Zwischenwerte von den vier Linien in der ersten Dimension zu verwenden, um einen dritten und einen vierten umgebenden interpolierten Wert jeweils auf einer Seite der zweiten Komponente der Abtastposition in der zweiten Dimension zu bestimmen, die durch den zweiten der beiden Parameter angegeben wird.
  6. Interpolationslogik gemäß Anspruch 5, wobei entweder: die Linien in der ersten Dimension Zeilen des 4 × 4 Satzes von Datenpunkten sind und die Linien in der zweiten Dimension Spalten des 4 × 4 Satzes von Datenpunkten sind; oder die Linien in der ersten Dimension Spalten des 4 × 4 Satzes von Datenpunkten und die Linien in der zweiten Dimension Zeilen des 4 × 4 Satzes von Datenpunkten sind.
  7. Interpolationslogik gemäß Anspruch 5 oder 6, wobei die Berechnungseinheit A ausgelegt ist, den ersten und den zweiten interpolierten Zwischenwert für jede Linie in der ersten Dimension durch Durchführen einer gewichteten Summe gemäß wA(u)A + wB(u)B + wC(u)C + wD(u)D zu bestimmen, wobei A, B, C und D die vier Datenpunkte der Linie in der ersten Dimension und wA, wE, wC und wD ihre entsprechenden Gewichte sind, die Funktionen des ersten Parameters, u, sind, wobei die Werte der Gewichte vorbestimmt sind für Werte des ersten Parameters, die den vorbestimmten Interpolationspositionen entsprechen, und wobei die Berechnungseinheit A ausgelegt ist, den ersten und den zweiten interpolierten Zwischenwert jeweils an den beiden der vorbestimmten Interpolationspositionen zu bestimmen, die am nächsten zur ersten Komponente der Abtastposition in der ersten Dimension sind.
  8. Interpolationslogik gemäß Anspruch 7, wobei die Berechnungseinheit A Hardware umfasst, die ausgelegt ist, die gewichtete Summe durchzuführen, und wobei die vorbestimmten Gewichte so eingestellt sind, dass sie keine perfekte Darstellung der nichtlinearen Interpolation sind, um die Hardware zu vereinfachen, die ausgelegt ist, die gewichtete Summe durchzuführen.
  9. Interpolationslogik gemäß Anspruch 7 oder 8, wobei für jede der vorbestimmten Interpolationspositionen die Summe der vorbestimmten Gewichte wA, wB, wC und wD Eins ist und wobei die vorbestimmten Gewichte symmetrisch sind, so dass wA(u) ≡ wD(1 – u) und wB(u) ≡ wC(1 – u).
  10. Interpolationslogik gemäß einem der Ansprüche 5 bis 9, wobei die Berechnungseinheit A ausgelegt ist, einen Versatz zu addieren, wenn die ersten und zweiten interpolierten Zwischenwerte bestimmt werden, um sicherzustellen, dass die ersten und zweiten interpolierten Werte nicht negativ sind.
  11. Interpolationslogik gemäß einem der Ansprüche 5 bis 10, wobei die Berechnungseinheit A ausgelegt ist, eine der vier Linien in der ersten Dimension auf jedem einer Mehrzahl von Taktzyklen zu verarbeiten.
  12. Interpolationslogik gemäß Anspruch 11, wobei die erste Berechnungseinheit B ausgelegt ist, die ersten interpolierten Zwischenwerte mit passenden der vorbestimmten Gewichte auf jedem der Mehrzahl von Taktzyklen zu multiplizieren und die Ergebnisse über die Mehrzahl von Taktzyklen zu akkumulieren, um die ersten und zweiten umgebenden interpolierten Werte zu bestimmen; und wobei die zweite Berechnungseinheit B ausgelegt ist, die zweiten interpolierten Zwischenwerte mit passenden der vorbestimmten Gewichte auf jedem der Mehrzahl von Taktzyklen zu multiplizieren und die Ergebnisse über die Mehrzahl von Taktzyklen zu akkumulieren, um die dritten und vierten umgebenden interpolierten Werte zu bestimmen.
  13. Interpolationslogik gemäß einem der Ansprüche 5 bis 10, wobei die Berechnungseinheit A ausgelegt ist, mehr als eine der vier Linien in der ersten Dimension parallel zu verarbeiten.
  14. Interpolationslogik gemäß Anspruch 9, wobei die vorbestimmten Interpolationspositionen eine Region zwischen angrenzenden Datenpunkten des Arrays in 8 Abschnitte unterteilen, und die nichtlineare Interpolation ein Catmull-Rom-Spline ist, und wobei die Gewichte wA, wB, wC und wD gegeben sind durch: U wA wB wC wD 0 0 1 0 0 1/8 –12/256 247/256 23/256 –2/256 2/8 –2/32 28/32 7/32 –1/32 3/8 –18/256 186/256 100/256 –12/256 4/8 –2/32 18/32 18/32 –2/32 5/8 –12/256 100/256 186/256 –18/256 6/8 –1/32 7/32 28/32 –2/32 7/8 –2/256 23/256 247/256 –12/256 8/8 0 0 1 0
  15. Interpolationslogik gemäß einem vorhergehenden Anspruch, wobei die Datenpunkte im Array grafische Datenpunkte sind.
  16. Interpolationslogik gemäß Anspruch 15, wobei die Datenpunkte im Array Texels einer Textur sind.
  17. Interpolationslogik gemäß einem vorhergehenden Anspruch, wobei die nichtlineare Interpolationseinheit in Hardware implementiert ist und wobei die lineare Interpolationseinheit in Hardware implementiert ist.
  18. Verfahren zum Bestimmen eines interpolierten Werts an einer Abtastposition innerhalb eines Arrays von Datenpunkten, wobei an jeder eines Satzes von vorbestimmten Interpolationspositionen innerhalb des Arrays ein Satz von vorbestimmten Gewichten eine nichtlineare Interpolation darstellen, die auf eine Mehrzahl der Datenpunkte angewandt werden kann, wobei das Verfahren umfasst: für eine Mehrzahl der vorbestimmten Interpolationspositionen, welche die Abtastposition umgeben, Verwenden der entsprechenden Sätze von vorbestimmten Gewichten und der Mehrzahl der Datenpunkte, um eine Mehrzahl von umgebenden interpolierten Werten zu bestimmen, welche die Ergebnisse des Durchführens der nichtlinearen Interpolation an den umgebenden vorbestimmten Interpolationspositionen darstellen; und Durchführen einer linearen Interpolation an der Mehrzahl von umgebenden interpolierten Werten, um einen interpolierten Wert an der Abtastposition zu bestimmen.
  19. Computerlesbares Speichermedium, das darauf den computerlesbaren Code codiert hat, der ausgelegt ist, die Schritte des Verfahrens gemäß Anspruch 18 durchzuführen, wenn der Code auf einem Computer läuft.
  20. Computerlesbares Speichermedium, das darauf den computerlesbaren Code zum Definieren der Interpolationslogik gemäß einem der Ansprüche 1 bis 17 codiert hat, wodurch die Interpolationslogik herstellbar ist.
DE102015114162.0A 2014-08-27 2015-08-26 Effiziente Interpolation Pending DE102015114162A1 (de)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
GB1415144.3A GB2529644B (en) 2014-08-27 2014-08-27 Efficient interpolation
GB1415144.3 2014-08-27

Publications (1)

Publication Number Publication Date
DE102015114162A1 true DE102015114162A1 (de) 2016-03-03

Family

ID=51727097

Family Applications (1)

Application Number Title Priority Date Filing Date
DE102015114162.0A Pending DE102015114162A1 (de) 2014-08-27 2015-08-26 Effiziente Interpolation

Country Status (4)

Country Link
US (6) US9946688B2 (de)
CN (2) CN113205455A (de)
DE (1) DE102015114162A1 (de)
GB (1) GB2529644B (de)

Families Citing this family (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10750161B2 (en) * 2015-07-15 2020-08-18 Fyusion, Inc. Multi-view interactive digital media representation lock screen
CN106373090B (zh) * 2016-08-31 2019-11-15 广州视睿电子科技有限公司 图片处理方法及装置
GB201713051D0 (en) 2017-08-15 2017-09-27 Imagination Tech Ltd Low latency distortion unit for head mounted displays
US11004202B2 (en) * 2017-10-09 2021-05-11 The Board Of Trustees Of The Leland Stanford Junior University Systems and methods for semantic segmentation of 3D point clouds
CN109615580B (zh) * 2018-11-28 2022-12-30 北京集创北方科技股份有限公司 数字处理电路
GB2588986B (en) * 2020-05-14 2022-02-23 Imagination Tech Ltd Indexing elements in a source array
CN115917606A (zh) 2020-11-20 2023-04-04 华为技术有限公司 高阶纹理滤波
US11719525B2 (en) * 2021-10-20 2023-08-08 Renesas Electronics America Inc. Adaptive position detection for inductive linear position sensing
US11962546B1 (en) 2023-03-03 2024-04-16 Microsoft Technology Licensing, Llc Leveraging inferred context to improve suggested messages
US11947902B1 (en) 2023-03-03 2024-04-02 Microsoft Technology Licensing, Llc Efficient multi-turn generative AI model suggested message generation

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US4631750A (en) * 1980-04-11 1986-12-23 Ampex Corporation Method and system for spacially transforming images
GB2231460B (en) * 1989-05-04 1993-06-30 Sony Corp Spatial interpolation of digital video signals
DE69028075T2 (de) * 1989-06-16 1997-03-13 Eastman Kodak Co Digitaler bildinterpolator
US5018090A (en) * 1990-03-13 1991-05-21 Rca Licensing Corporation Digital interpolation circuitry
US5351087A (en) * 1990-06-01 1994-09-27 Thomson Consumer Electronics, Inc. Two stage interpolation system
US6820074B1 (en) * 1998-07-10 2004-11-16 Landmark Graphics Corporation Null-line based radial interpolation of gridded data
GB2343579A (en) * 1998-11-07 2000-05-10 Ibm Hybrid-linear-bicubic interpolation method and apparatus
US6989843B2 (en) * 2000-06-29 2006-01-24 Sun Microsystems, Inc. Graphics system with an improved filtering adder tree
US6747663B2 (en) * 2000-08-24 2004-06-08 Sun Microsystems, Inc. Interpolating sample values from known triangle vertex values
US6961480B2 (en) * 2001-09-10 2005-11-01 Ess Technology, Inc. Off-grid interpolation in image processing
US7203716B2 (en) * 2002-11-25 2007-04-10 Simmonds Precision Products, Inc. Method and apparatus for fast interpolation of multi-dimensional functions with non-rectangular data sets
US20050203982A1 (en) * 2004-02-13 2005-09-15 Joseph Kolibal Method and apparatus for approximating, deconvolving and interpolating data using berstein functions
GB0411880D0 (en) * 2004-05-27 2004-06-30 Imagination Tech Ltd Method and apparatus for efficient evaluation of "table-based" mathematical functions
US7319797B2 (en) * 2004-06-28 2008-01-15 Qualcomm Incorporated Adaptive filters and apparatus, methods, and systems for image processing
US7744538B2 (en) * 2004-11-01 2010-06-29 Siemens Medical Solutions Usa, Inc. Minimum arc velocity interpolation for three-dimensional ultrasound imaging
US20110025700A1 (en) * 2009-07-30 2011-02-03 Lee Victor W Using a Texture Unit for General Purpose Computing
GB2495301B (en) * 2011-09-30 2018-01-17 Advanced Risc Mach Ltd Method of and apparatus for encoding data
CN103034973B (zh) * 2012-12-05 2015-08-12 焦点科技股份有限公司 基于双三次插值的自适应图像缩放方法
CN103456031B (zh) * 2013-07-08 2016-03-30 江南大学 一种区域图像插值的新方法
US9355490B2 (en) * 2013-11-14 2016-05-31 Intel Corporation Minimum-maximum filtering of graphical texture data

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
"Computer Graphics Prinzips und Practice", Zweite Auflage, Seiten 510 und 511 von Foley, van Dam u. a.
SIGGRAPH Veröffentlichung von 1988 von Mitchell und Netravali "Reconstruction Filter in Computer Graphics"

Also Published As

Publication number Publication date
US10719576B2 (en) 2020-07-21
US9946688B2 (en) 2018-04-17
US20160062948A1 (en) 2016-03-03
GB201415144D0 (en) 2014-10-08
US20190129915A1 (en) 2019-05-02
US20180189241A1 (en) 2018-07-05
CN105389290B (zh) 2021-06-04
GB2529644A (en) 2016-03-02
US10185700B2 (en) 2019-01-22
CN113205455A (zh) 2021-08-03
GB2529644B (en) 2016-07-13
US20200320161A1 (en) 2020-10-08
US10102181B2 (en) 2018-10-16
US20180189240A1 (en) 2018-07-05
US20220207110A1 (en) 2022-06-30
CN105389290A (zh) 2016-03-09
US11314845B2 (en) 2022-04-26

Similar Documents

Publication Publication Date Title
DE102015114162A1 (de) Effiziente Interpolation
DE102017115519A1 (de) Superpixel-Verfahren für faltende neuronale Netze
DE202017105528U1 (de) Ausführen von Mittelwert-Poolbildung in Hardware
DE3875979T2 (de) Schaltung zur berechnung des quantisierten koeffizienten der diskreten cosinustransformation von digitalen signalabschnitten.
DE202017105729U1 (de) Kerndurchschreiten in Hardware
DE102010048485A1 (de) Textureinheit zur Universalberechnung
DE202016107446U1 (de) Rotation von Daten für Berechnungen in neuronalen Netzwerken
DE102020120371A1 (de) Integrierte schaltungen mit modularen multiplikationsschaltkreisen
DE102017113859A1 (de) Blockoperationen für einen Bildprozessort mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE19782086B4 (de) Multiplizierer zur Durchführung von 3D-Graphik-Interpolationen
DE19758079A1 (de) Verfahren und Vorrichtung zur Galoisfeld-Multiplikation
DE102017102952A1 (de) Eine Vorrichtung zum Erzeugen eines dreidimensionalen Farbbildes und ein Verfahren zum Produzieren eines dreidimensionalen Farbbildes
DE102017113867A1 (de) Kernprozesse für Blockoperationen an einem Bildprozessor mit einer zweidimensionalen Ausführungsbahnmatrix und einem zweidimensionalen Schieberegister
DE112007001319T5 (de) Multiplizieren zweier Zahlen
DE102014100108A1 (de) Festkomma-divisionschaltung unter verwendung einer gleitkomma-architektur
DE102019126719A1 (de) Energieeffiziente Speichersysteme und Verfahren
DE102006038646A1 (de) Bildverarbeitungsvorrichtung für Farb-Bilddaten und Verfahren zur Bildverarbeitung von Farb-Bilddaten
DE102015114651B4 (de) Bildskalierungstechniken
DE102017117381A1 (de) Beschleuniger für dünnbesetzte faltende neuronale Netze
Baus et al. Fully Smoothed ℓ 1-TV Models: Bounds for the Minimizers and Parameter Choice
DE102018115991A1 (de) Digitale schaltung zur korrektur eines vignettierungseffekts in werten von pixeln eines bildes einer elektronischen kamera
CN106454382A (zh) 一种量子图像制备方法
DE4306010C2 (de) Verfahren und Einrichtung zur digitalen Verarbeitung von Bilddaten
Cho Asymptotic Semicircular Law Induced by p-Adic Number Fields Q p Over Primes
DE102019107817A1 (de) Verfahren zur Simulation eines dynamischen Systems

Legal Events

Date Code Title Description
R083 Amendment of/additions to inventor(s)
R012 Request for examination validly filed
R082 Change of representative

Representative=s name: WESTPHAL, MUSSGNUG & PARTNER PATENTANWAELTE MI, DE