-
STAND DER TECHNIK
-
Technisches Gebiet
-
Diese Offenbarung bezieht sich im Allgemeinen auf die Komprimierung und Dekomprimierung von Punktwolken, die eine Vielzahl von Punkten mit jeweils zugehörigen räumlichen Informationen und, in einigen Ausführungsformen, weitere Attributinformationen umfassen.
-
Beschreibung des Stands der Technik
-
Verschiedene Typen von Sensoren, wie Lichtdetektions- und Entfernungsmess- (LIDAR, light detection and ranging) -Systeme, 3-D-Kameras, 3-D-Scanner usw. können Daten erfassen, die Positionen von Punkten im dreidimensionalen Raum anzeigen, beispielsweise Positionen in den X-, Y- und Z-Ebenen. Ferner können einige solche Systeme zusätzlich zu räumlichen Informationen für die jeweiligen Punkte auch Attributinformationen erfassen, wie Farbinformationen (z. B. RGB-Werte), Intensitätsattribute, Reflektivitätsattribute oder verschiedene andere Attribute. In einigen Fällen können andere Attribute den jeweiligen Punkten zugeordnet werden, wie ein Zeitstempel, wenn der Punkt erfasst wurde. Punkte, die von solchen Sensoren erfasst werden, können eine „Punktwolke“ bilden, die einen Satz von Punkten umfasst, von denen jeder zugeordnete räumliche Informationen aufweist. Unter bestimmten Umständen kann eine Punktwolke Tausende von Punkten, Hunderte von Tausenden von Punkten, Millionen von Punkten oder sogar mehr Punkte umfassen. In einigen Fällen können auch Punktwolken erzeugt werden, zum Beispiel in Form von Software, im Gegensatz zu dem Erfassen durch einen oder mehrere Sensoren. In jedem Fall können solche Punktwolken große Mengen von Daten umfassen und können zum Speichern und Übertragen teuer und zeitaufwendig sein.
-
ZUSAMMENFASSUNG VON AUSFÜHRUNGSFORMEN
-
In einigen Ausführungsformen beinhaltet ein System einen oder mehrere Sensoren zum Erfassen von Punkten, die gemeinsam eine Punktwolke bilden, wobei jeder der Punkte räumliche Informationen zur Identifizierung einer räumlichen Stelle des jeweiligen Punkts umfasst. Das System schließt auch einen Codierer ein, der ausgelegt ist, um eine komprimierte Punktwolke zu erzeugen, wobei die komprimierte Punktwolke räumliche Informationen für weniger Punkte umfasst als die Anzahl der Punkte der erfassten Punktwolke, wobei aber die räumlichen Informationen für Punkte, die in der komprimierten Punktwolke enthalten sind und zusätzliche Daten, die in der komprimierten Punktwolke enthalten sind, so organisiert sind, dass ein Codierer die erfasste Punktwolke oder eine Annäherung der erfassten Punktwolke basierend auf der komprimierten Punktwolke neu erzeugen kann. Um die komprimierte Punktwolke zu erzeugen, ist der Codierer ausgelegt, um die erfasste Punktwolke, die von dem einen oder den mehreren Sensoren erfasst wird, unterabzutasten, wobei die unterabgetastete Punktwolke weniger Punkte als die erfasste Punktwolke umfasst. Der Codierer ist ferner dazu ausgelegt, für jeden der jeweiligen Punkte der unterabgetasteten Punktwolke, eine Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke zu identifizieren und basierend auf einem Vergleich der Stelle mit der erfassten Punktwolke zu bestimmen, ob ein Punkt in einer dekomprimierten Punktwolke an der Stelle aufgenommen werden soll, an der Stelle nicht aufgenommen werden sollen oder relativ zu der Stelle versetzt werden soll. Der Codierer ist ferner so ausgelegt, dass er Daten für die komprimierte Punktwolke mit räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke und Daten codiert, die für jede der jeweiligen Stellen angeben, ob ein jeweiliger Punkt an der Stelle aufgenommen werden soll, an der Stelle nicht aufgenommen werden soll oder relativ zu der Stelle in der komprimierten Punktwolke versetzt werden soll. In einigen Ausführungsformen kann ein System den einen oder die mehreren Sensoren weglassen, und der Codierer kann eine ursprüngliche Punktwolke, die komprimiert werden soll, von Sensoren eines anderen Systems oder von einer anderen Quelle empfangen.
-
In einigen Ausführungsformen schließt ein Verfahren das Unterabtasten einer Punktwolke ein, wobei die unterabgetastete Punktwolke weniger Punkte als die Punktwolke umfasst. Das Verfahren schließt auch für jeden der jeweiligen Punkte der unterabgetasteten Punktwolke das Vergleichen einer Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke gegenüber der Punktwolke vor dem Unterabtasten und das Bestimmen, basierend auf dem Vergleich, ob: ein Punkt an der Stelle aufgenommen werden soll, an der Stelle nicht angeschlossen werden soll oder relativ zu der Stelle in einer komprimierten Punktwolke versetzt werden soll, ein. Das Verfahren schließt ferner das Codieren von Daten, die räumliche Informationen für die Punkte der unterabgetasteten Punktwolke umfassen, und Daten ein, die für jede der jeweiligen Stellen angeben, ob ein jeweiliger Punkt an der Stelle aufgenommen werden soll, an der Stelle nicht aufgenommen werden soll oder relativ zu der Stelle in einer dekomprimierten Punktwolke versetzt werden soll.
-
In einigen Ausführungsformen speichert ein nicht-flüchtiges computerlesbares Medium die Programmbefehle, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, bewirken, dass der eine oder die mehreren Prozessoren einen Decodierer implementieren, der zum Empfangen einer komprimierten Punktwolke ausgelegt ist, wobei die komprimierte Punktwolke räumliche Informationen für Punkte einer unterabgetasteten Punktwolke und Daten umfasst, die für jede von mehreren jeweiligen Stellen zwischen jeweiligen Punkten der unterabgetasteten Punktwolke und den jeweiligen benachbarten Punkten in der unterabgetasteten Punktwolke angeben, ob ein Punkt an der jeweiligen Stelle aufgenommen werden sollen, an der jeweiligen Stelle nicht aufgenommen werden soll oder relativ zu der jeweiligen Stelle in einer dekomprimierten Punktwolke versetzt werden soll. Die Programmbefehle, wenn sie ausgeführt werden, bewirken ferner, dass der Decodierer für jeden der jeweiligen Punkte der unterabgetasteten Punktwolke eine jeweilige Stelle zwischen dem jeweiligen Punkt und einem benachbarten Punkt in der unterabgetasteten Punktwolke identifiziert und bestimmt, basierend auf den in der empfangenen komprimierten Punktwolke enthaltenen Daten, ob ein Punkt an der jeweiligen Stelle aufgenommen, nicht aufgenommen oder versetzt werden soll. Die Programmbefehle, wenn sie ausgeführt werden, bewirken ferner, dass der Decodierer die dekomprimierte Punktwolke erzeugt, wobei die dekomprimierte Punktwolke die Punkte der unterabgetasteten Punktwolke und die jeweiligen Punkte umfasst, die bestimmt sind, an den jeweiligen Stellen aufgenommen zu werden oder relativ zu den jeweiligen Stellen versetzt zu werden.
-
Figurenliste
-
- 1A veranschaulicht ein System mit einem Sensor gemäß einigen Ausführungsformen, der Informationen für Punkte einer Punktwolke erfasst, und einem Codierer, der eine Punktwolke komprimiert, wobei die komprimierte Punktwolke an einen Decodierer gesendet wird.
- 1B veranschaulicht ein Verfahren zum Codieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen.
- 1C veranschaulicht repräsentative Ansichten einer Punktwolke bei verschiedenen Stufen eines Codierungsprozesses gemäß einigen Ausführungsformen.
- 2A veranschaulicht Komponenten eines Codierers gemäß einigen Ausführungsformen.
- 2B veranschaulicht Komponenten eines Decodierers gemäß einigen Ausführungsformen.
- 3 veranschaulicht Komponenten einer beispielhaften komprimierten Punktwolkendatei gemäß einigen Ausführungsformen.
- 4 veranschaulicht ein Verfahren zum Codieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen.
- 5 veranschaulicht ein Verfahren zum Bestimmen von Unterteilungsstellen für eine unterabgetastete Punktwolke, wenn eine komprimierte Punktwolke codiert wird, gemäß einigen Ausführungsformen.
- 6A-C veranschaulichen ein Verfahren zum Decodieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen.
- 7 veranschaulicht eine komprimierte Punktwolke gemäß einigen Ausführungsformen, die in einer 3-D-Telepräsenz-Anwendung verwendet wird.
- 8 veranschaulicht eine komprimierte Punktwolke gemäß einigen Ausführungsformen, die in einer Virtual-Reality-Anwendung verwendet wird.
- 9 veranschaulicht ein beispielhaftes Computersystem gemäß einigen Ausführungsformen, das einen Codierer oder Decodierer implementieren kann.
-
Diese Patentschrift beinhaltet Bezugnahmen auf „eine Ausführungsform“. Wenn der Ausdruck „in einer Ausführungsform“ auftaucht, ist damit nicht unbedingt immer dieselbe Ausführungsform gemeint. Insbesondere können Merkmale, Strukturen oder Eigenschaften auf jegliche geeignete Art kombiniert werden, die mit dieser Offenbarung im Einklang steht.
-
„Umfassen“ Dies ist ein offener Begriff. Wenn er in den beigefügten Ansprüchen verwendet wird, schließt dieser Begriff zusätzliche Strukturen oder Schritt nicht aus. Dies soll am Beispiel des folgenden Anspruchs verdeutlicht werden: „Vorrichtung, eine oder mehrere Prozessoreinheiten umfassend...“ Ein solcher Anspruch schließt nicht aus, dass die Vorrichtung zusätzliche Komponenten aufweist (z. B. eine Netzwerkschnittstelleneinheit, Grafikschaltungen usw.).
-
„Dafür ausgelegt“ Verschiedene Einheiten, Schaltungen oder andere Komponenten können als „dafür ausgelegt“ sein, um eine oder mehrere Aufgaben zu erfüllen, beschrieben oder beansprucht werden. In einem solchen Kontext wird „dafür ausgelegt“ verwendet, um eine Struktur näher zu bezeichnen, indem angegeben wird, dass die
-
Einheiten/Schaltungen/Komponenten eine Struktur (z. B. eine Schaltung) aufweisen, die diese Aufgabe(n) während des Betriebs ausführt. Somit kann man sagen, dass die Einheit/Schaltung/Komponente dafür ausgelegt ist, die Ausgabe auszuführen, auch wenn die bezeichnete Einheit/Schaltung/Komponente gerade nicht in Betrieb ist (z. B. nicht eingeschaltet ist). Die Einheiten/Schaltungen/Komponenten, die mit dem Ausdruck „dafür ausgelegt“ verwendet werden, beinhalten Hardware - zum Beispiel Schaltungen, Speicher, in dem Programmbefehle hinterlegt sind, die ausführbar sind, um den Betrieb zu implementieren, usw. Wenn angegeben wird, dass eine Einheit/Schaltung/Komponente „dafür ausgelegt“ ist eine oder mehrere Aufgaben auszuführen, soll ausdrücklich nicht impliziert werden, dass 35 U.S.C. § 112(f), für diese Einheit/Schaltung/Komponente gilt. Außerdem kann „dafür ausgelegt“ eine allgemeine Struktur (z. B. eine allgemeine Schaltung) beinhalten, die durch Software und/oder Firmware (z. B. eine FPGA oder eine Universal-Prozessorausführungssoftware) manipuliert wird, um auf eine Weise zu arbeiten, die in der Lage ist, die anstehende(n) Aufgabe(n) zu lösen. „Dafür ausgelegt“ kann auch das Adaptieren eines Herstellungsverfahrens (z. B. einer Halbleiterherstellungsanlage) zur Herstellung von Vorrichtungen (z. B. integrierten Schaltungen) beinhalten, die daran angepasst sind, eine oder mehrere Aufgaben zu implementieren oder auszuführen.
-
„Erste“, „zweite“ usw. Wie hierin verwendet, werden diese Begriffe als Bezeichnungen für nachgestellte Nomina verwendet und implizieren keine Reihenfolge (z. B. räumlich, zeitlich, logisch usw.). Zum Beispiel kann eine Pufferschaltung hierin als eine beschrieben werden, die Schreiboperationen für „erste“ und „zweite“ Werte durchführt. Die Begriffe „erste“ und „zweite“ implizieren nicht unbedingt, dass der erste Wert von dem zweiten Wert geschrieben werden muss.
-
"Basierend auf Wie hierin verwendet, wird dieser Begriff verwendet, um einen oder mehrere Faktoren zu beschreiben, die eine Entscheidung beeinflussen. Dieser Begriff schließt zusätzliche Faktoren nicht aus, die eine Entscheidung beeinflussen können. Das heißt, eine Entscheidung kann ausschließlich auf diesen Faktoren basieren oder sie kann zumindest zum Teil auf diesen Faktoren basieren. Man betrachte den Ausdruck „Bestimmen von A auf Basis von B“. Obwohl in diesem Fall B ein Faktor ist, der die Bestimmung von A beeinflusst, schließt dieser Ausdruck nicht aus, dass A auch auf Basis von C bestimmt wird. In anderen Fällen kann A ausschließlich auf Basis von B bestimmt werden.
-
DETAILLIERTE BESCHREIBUNG
-
Da die Erfassungs- und Anzeigetechnologien sich weiterentwickelt haben, ist die Fähigkeit zur Erfassung von Punktwolken mit Tausenden oder Millionen von Punkten in 2-D oder 3-D-Raum, wie über die LIDAR-Systeme gestiegen. Auch die Entwicklung fortschrittlicher Anzeigetechnologien, wie Virtual-Reality- oder Augmented-Reality-Systeme, hat potentielle Verwendungsmöglichkeiten für Punktwolken erhöht. Punktwolkendateien sind jedoch oft sehr groß und können zum Speichern und Übertragen kostspielig und zeitaufwendig sein. Zum Beispiel kann Übertragung von Punktwolken über private oder öffentliche Netzwerke, wie das Internet, erheblichen Zeitaufwand und/oder Netzressourcen erfordern, so dass einige Anwendungen der Punktwolkendateien, wie Echtzeit-Anwendungen eingeschränkt sein können. Speicherbedürfnisse von Punktwolkendateien können auch eine erhebliche Menge an Speicherkapazität von Vorrichtungen zum Speichern der Punktwolkendateien verbrauchen, was auch potentielle Anwendungen zur Verwendung von Punktwolkendateien einschränken kann.
-
In einigen Ausführungsformen kann ein Codierer zur Erzeugung einer komprimierten Punktwolke verwendet werden, um Kosten und Zeit in Verbindung mit der Speicherung und Übertragung von großen Punktwolkendateien zu reduzieren. In einigen Ausführungsformen kann ein System einen Codierer umfassen, der eine Punktwolkendatei komprimiert, so dass die Punktwolkendatei schneller als nicht komprimierte Punktewolken gespeichert und übertragen werden kann und so, dass die Punktwolkendatei weniger Speicherplatz als nicht komprimierte Punktwolken einnehmen kann. In einigen Ausführungsformen kann Punktwolkenkomprimierung ermöglichen, dass eine Punktwolke über ein Netzwerk in Echtzeit oder nahezu in Echtzeit übertragen wird. Zum Beispiel kann ein System einen Sensor umfassen, der Daten über Punkte in einer Umgebung erfasst, in der sich der Sensor befindet, wobei die erfassten Punkte eine Punktwolke bilden. Das System kann auch einen Codierer umfassen, der die erfasste Punktwolke komprimiert. Die komprimierte Punktwolke kann über ein Netzwerk in Echtzeit oder nahezu in Echtzeit an einen Decodierer gesendet werden, der die komprimierte Punktwolke dekomprimiert. Die dekomprimierte Punktwolke kann weiter verarbeitet werden, um beispielsweise eine Steuerungsentscheidung basierend auf der Umgebung an der Stelle des Sensors zu treffen. Die Steuerungsentscheidung kann dann zurück an eine Vorrichtung an oder in der Nähe der Stelle des Sensors übertragen werden, wobei die Vorrichtung, die die Steuerungsentscheidung empfängt, die Steuerungsentscheidung in Echtzeit oder nahezu in Echtzeit implementiert. In einigen Ausführungsformen kann der Decodierer einem Augmented-Reality-System zugeordnet sein, und die dekomprimierte Punktwolke kann durch das Augmented-Reality-System angezeigt oder anderweitig verwendet werden.
-
In einigen Ausführungsformen kann ein System einen Decodierer umfassen, der eine oder mehrere Punktwolkendateien über ein Netzwerk von einem entfernten Server oder einer anderen Speichervorrichtung empfängt, die die eine oder die mehreren Punktwolkendateien speichert. Zum Beispiel kann ein 3-D-Display, ein holografisches Display oder ein Datenhelm in Echtzeit oder nahe Echtzeit manipuliert werden, um verschiedene Abschnitte einer virtuellen Welt zu zeigen, die durch Punktwolken dargestellt wird. Um das 3-D-Display zu aktualisieren, kann ein holographisches Display, ein Datenhelm, ein System, das dem Decodierer zugeordnet ist, Punktwolkendateien von dem entfernten Server basierend auf Benutzermanipulationen der Displays anfordern und die Punktwolkendateien können von dem entfernten Server an den Decodierer übermittelt und von dem Decodierer in Echtzeit oder nahezu in Echtzeit decodiert werden. Die Displays können dann mit aktualisierten Punktwolkendaten, die auf die Benutzermanipulationen reagieren, aktualisiert werden.
-
In einigen Ausführungsformen kann ein System ein oder mehrere LIDAR-Systeme, 3-D-Kameras, 3-D-Scanner usw. umfassen, und solche Sensorvorrichtungen können räumliche Informationen wie X-, Y- und Z-Koordinaten für Punkte in einer Ansicht der Sensorvorrichtungen erfassen. In einigen Ausführungsformen können die räumlichen Informationen in Bezug zu einem lokalen Koordinatensystem oder in Bezug zu einem globalen Koordinatensystem stehen (zum Beispiel kann ein kartesisches Koordinatensystem einen festen Bezugspunkt haben, wie einen festen Punkt auf der Erde, oder einen nicht festen lokalen Bezugspunkt haben, wie eine Sensorstelle). In einigen Ausführungsformen können derartige Sensoren Attributinformationen für einen oder mehrere der Punkte erfassen, wie Farbattribute, Reflektivitätsattribute, Geschwindigkeitsattribute, Beschleunigungsattribute, Zeitattribute, und/oder verschiedene andere Attribute.
-
In einigen Ausführungsformen kann ein Codierer eine Punktwolke empfangen, die komprimiert werden soll, und kann die Punktwolke unterabtasten, eine unterabgetastete Wolke zu erzeugen. Zum Beispiel kann in einigen Ausführungsformen eine Punktwolke eine Million Punkte umfassen, und eine unterabgetastete Punktwolke, die durch Unterabtasten der Punktwolke erstellt wurde, kann nur 1.000 oder 2.000 Punkte umfassen. In einigen Ausführungsformen kann Unterabtasten in gleichen Punktintervallen oder gleichen Abständen durchgeführt werden. Zum Beispiel kann in einigen Ausführungsformen das Unterabtasten die Aufnahme von jedem 100sten, 1000sten oder Nsten Punkt in die Punktwolke in der unterabgetasteten Punktwolke umfassen oder kann die Aufnahme eines Punktes bei jedem D-Inkrement des Abstands in der X-, Y- oder Z-Richtung in der unterabgetasteten Punktwolke umfassen. In einigen Ausführungsformen kann das Unterabtasten das Filtern von Punkten in einer Punktwolke umfassen, um beispielsweise Aliasing zu reduzieren. In einigen Ausführungsformen können andere Unterabtasttechniken verwendet werden.
-
Sobald die unterabgetastete Punktwolke erzeugt wurde, kann der Codierer einen Satz von einem oder mehreren benachbarten Punkten für jeden von mehreren jeweiligen Punkten der unterabgetasteten Punktwolke identifizieren. Zum Beispiel kann der Codierer einen ersten Punkt in der unterabgetasteten Punktwolke auswählen und kann einen Satz von nächsten benachbarten Punkten in der unterabgetasteten Punktwolke zu dem ausgewählten Punkt, der ausgewertet wird, identifizieren. Für jeden der identifizierten benachbarten Punkte kann der Codierer eine Unterteilungsstelle zwischen dem ausgewählten Punkt, der ausgewertet wird, und den jeweiligen benachbarten Punkten des Satzes der nächstgelegenen benachbarten Punkte bestimmen. Der Codierer kann auch die Unterteilungsstelle zwischen dem Punkt, der ausgewertet wird, und dem jeweiligen benachbarten Punkt mit der ursprünglichen Punktwolke vor dem Unterabtasten vergleichen. Wenn die Stelle innerhalb eines Bereichs eines Punktes liegt, der in der ursprünglichen Punktwolke enthalten ist, kann der Codierer bestimmen, dass ein Punkt in eine dekomprimierte Punktwolke an der Unterteilungsstelle aufgenommen werden soll, und kann eine Angabe in Daten aufnehmen, die für eine komprimierte Punktwolke codiert werden, die die Aufnahme eines Punktes an der Unterteilungsstelle anzeigt. Wenn sich die Stelle außerhalb eines Bereichs von Punkten befindet, die in die ursprüngliche Punktwolke aufgenommen sind, kann der Codierer bestimmen, dass ein Punkt an der Unterteilungsstelle in eine dekomprimierte Punktwolke aufgenommen werden soll, und kann eine solche Angabe in Daten für eine komprimierte Punktwolke aufnehmen. Der Codierer kann auch bestimmen, dass sich ein Punkt innerhalb des Bereichs befindet, der in die dekomprimierte Punktwolke aufgenommen werden soll, aber sich in einem Abstand von einem Punkt befindet, der in der ursprünglichen Punktwolke aufgenommen ist. In einem solchen Fall kann der Codierer die Informationen in Daten für die komprimierte Punktwolke aufnehmen, die angeben, dass ein Punkt relativ zu der Unterteilungsstelle in einer dekomprimierten Punktwolke versetzt werden soll. Zum Beispiel kann der Decodierer eine Stelle eines Punktes in der ursprünglichen Punktwolke benachbart zu der Unterteilungsstelle mit der Stelle der Unterteilungsstelle vergleichen, um zu bestimmen, wie ein Punkt relativ zu der Unterteilungsstelle versetzt werden soll. Der Codierer kann ferner dieses Verfahren für jeden identifizierten benachbarten Punkt in dem Satz von benachbarten Punkten, die für den ausgewählten Punkt, der ausgewertet wird, identifiziert wurden, fortsetzen. Der Codierer kann dann ein ähnliches Verfahren für einen nächsten Punkt in der unterabgetasteten Punktwolke, die ausgewertet werden soll, wiederholen, bis wenigstens ein signifikanter Abschnitt der Punkte in der unterabgetasteten Punktwolke ausgewertet wurde.
-
Zusätzlich kann der Codierer die unterabgetastete Punktwolke und die Punkte, für die bestimmt wurde, dass sie an jeweiligen Stellen zwischen Punkten der unterabgetasteten Punktwolke (z. B. Unterteilungen) aufgenommen werden sollen, oder Punkte, die relativ zu jeweiligen Stellen an den Unterteilungen versetzt werden sollen, vergleichen und kann bestimmen, dass einer oder mehrere zusätzliche Punkte in die dekomprimierte Punktwolke aufgenommen werden sollen, um die ursprüngliche Punktwolke genau darzustellen. In einigen Ausführungsformen können räumliche Informationen für einen oder mehrere zusätzliche Punkte explizit in Daten für die komprimierte Punktwolke codiert werden.
-
In einigen Ausführungsformen kann ein Codierer mehrere Iterationen zum Bestimmen von Punkten durchführen, die sich an Unterteilungsstellen einer unterabgetasteten Punktwolke befinden oder versetzt werden sollen, und kann mehrere Iterationen zum Bestimmen von einem oder mehreren zusätzlichen Punkten durchführen, die in eine dekomprimierte Punktwolke aufgenommen werden sollen. Beispielsweise kann ein Codierer die unterabgetastete Punktwolke aktualisieren, um die Punkte an den Unterteilungsstellen aufzunehmen, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke aufgenommen werden sollen, um die Punkte aufzunehmen, von denen bestimmt wurde, dass sie relativ zu den Unterteilungsstellen versetzt werden sollen, und um die zusätzlichen Punkte aufzunehmen, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke aufgenommen werden sollen. Der Decodierer kann dann das Unterteilungsverfahren durch Auswählen von jeweiligen der Punkte, die in die aktualisierte unterabgetastete Punktwolke aufgenommen wurden, die nächstgelegene benachbarte Punkte der ausgewählten Punkte identifizieren, und bestimmen, ob Punkte an Unterteilungsstellen zwischen den ausgewählten Punkten und den nächstgelegenen benachbarten Punkten aufgenommen, nicht aufgenommen oder versetzt werden sollen, wiederholen. Decodierer kann basierend auf dem Vergleichen der aktualisierten unterabgetasteten Punktwolke, die Punkte aufnimmt, von denen bestimmt wurde, dass sie an neu unterteilten Stellen aufgenommen werden sollen, bestimmen, ob ein oder mehr zusätzliche Punkte in die dekomprimierte Punktwolke aufgenommen werden sollen. Der Codierer kann dieses Verfahren für mehrere Iterationen wiederholen. In einigen Ausführungsformen können ein Codierer und ein Decodierer Iterationen über vorher vorgegebene oder bestimmte Anzahl von durchzuführenden Unterteilungsiterationen durchführen (N). In einigen Ausführungsformen kann die Anzahl von durchzuführenden Unterteilungsiterationen (N) ein vom Benutzer konfigurierbarer Parameter oder ein Parameter sein, der an dem Codierer basierend auf zu verarbeitenden Punktwolkendaten oder einer Kombination davon bestimmt wird. Zum Beispiel kann in einigen Ausführungsformen die Anzahl von durchzuführenden Interaktionen auf einem durchschnittlichen, minimalen oder maximalen Wert zwischen dem vom Benutzer konfigurierbaren Parameter und einem Codierer-basierten abgeleiteten Parameter basieren. In einigen Ausführungsformen kann eine Anzahl von durchzuführenden Unterteilungsiterationen ein fester Wert sein. In einigen Ausführungsformen kann eine Anzahl von durchzuführenden Unterteilungsiterationen vorbestimmt sein und sowohl dem Codierer als auch dem Decodierer bekannt sein. In einigen Ausführungsformen kann ein Codierer Daten umfassen, die eine Anzahl von Unterteilungsiterationen angeben, die in Daten für eine komprimierte Punktwolke durchgeführt werden sollen.
-
Der Codierer kann räumliche Informationen für die Punkte der unterabgetasteten Punktwolke und Informationen codieren, die angeben, ob Punkte an Unterteilungsstellen aufgenommen werden sollen, an Unterteilungsstellen nicht aufgenommen werden sollen oder relativ zu Unterteilungsstellen versetzt werden sollen. Zusätzlich können räumliche Informationen für zusätzliche Punkte codiert werden, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke aufgenommen werden sollen.
-
Ein Codierer kann auch Konfigurationsinformationen wie oben beschrieben codieren, die zusammen mit unterabgetasteten Punktdaten und Daten über Aufnahme, Nicht-Aufnahme oder Versetzung von Unterteilungspunkten für eine komprimierte Punktwolke übermittelt werden sollen. Zum Beispiel kann ein Codierer Daten codieren, die eine Anzahl von durchzuführenden Unterteilungsiterationen (N), eine Anzahl von nächstgelegenen Nachbarn, die in einen Satz von nächstgelegenen Nachbarn (K) aufgenommen werden sollen, einen minimalen Abstand von einem Punkt für einen nächstgelegenen Nachbar, wenn nächstgelegene Nachbarn (D0) identifiziert werden, einen maximalen Abstand von einem Punkt für einen nächstgelegenen Nachbarn, wenn nächstgelegene Nachbarn (D1) identifiziert werden, einen Schwellenabstand für eine Stelle einer Unterteilung, wenn bestimmt wird, ob ein Punkt in eine Unterteilungsstelle (D2) aufgenommen werden soll, usw. angeben. In einigen Ausführungsformen können die Abstände D0, D1 und/oder D2 als euklidische Abstände zwischen einem zu auszuwertenden Punkt und einem nächstgelegenen benachbarten Punkt oder einer Unterteilungsstelle berechnet werden. Die Konfigurationsinformationen können es einem Codierer ermöglichen, dieselben Unterteilungsstellen neu zu erstellen, wie sie am Codierer basierend auf räumlichen Informationen der Punkte der unterabgetasteten Punktwolken ausgewertet wurden. Auf diese Weise kann der Codierer die ursprüngliche Punktwolke neu erstellen oder eine Darstellung der ursprünglichen Wolke schließen, während nur räumliche Informationen für einen Abschnitt der Punkte der ursprünglichen Punktwolke empfangen werden (z. B. die räumlichen Informationen der unterabgetasteten Punkte der Punktwolke). Da in den komprimierten Punktwolkendaten explizit räumliche Informationen für viel weniger Punkte enthalten sind, können komprimierte Punktwolkendaten weniger Speicherplatz belegen als nicht komprimierte Daten für die ursprüngliche oder erfasste Punktwolke und können schneller und/oder mit weniger Netzwerkressourcen als nicht komprimierte Daten für die ursprüngliche oder erfasste Punktwolke übermittelt werden.
-
1A veranschaulicht ein System mit einem Sensor gemäß einigen Ausführungsformen, der Informationen für Punkte einer Punktwolke erfasst, und einem Codierer, der eine Punktwolke komprimiert, die an einen Decodierer gesendet wird.
-
System 100 umfasst einen Sensor 102 und einen Codierer 104. Sensor 102 erfasst eine Punktwolke 110, die Punkte umfasst, die Struktur 106 in der Ansicht 108 des Sensors 102 darstellen. Zum Beispiel kann in einigen Ausführungsformen die Struktur 106 ein Bergbereich, ein Gebäude, ein Schild, eine Umgebung, die eine Straße umgibt, oder jede andere Art von Struktur sein. In einigen Ausführungsformen kann eine erfasste Punktwolke, wie die erfasste Punktwolke 110, räumliche und/oder Attributinformationen für die Punkte enthalten, die in der Punktwolke enthalten sind. Zum Beispiel umfasst Punkt A der erfassten Punktwolke 110 X-, Y-, Z-Koordinaten und Attribute 1, 2 und 3. In einigen Ausführungsformen können Attribute eines Punktes Attribute wie Farbwerte R, G, B, eine Geschwindigkeit der Struktur an dem Punkt, eine Beschleunigung der Struktur an dem Punkt, eine Reflexion der Struktur an dem Punkt, einen Zeitstempel umfassen, der anzeigt, wann der Punkt erfasst wurde, oder andere Attribute. Die erfasste Punktwolke 110 kann an den Codierer 104 bereitgestellt werden, wobei der Codierer 104 eine komprimierte Version der Punktwolke (komprimierte Punktwolke 112) erzeugt, die über das Netzwerk 114 an den Decodierer 116 übermittelt wird.
-
In einigen Ausführungsformen kann der Codierer 104 in den Sensor 102 integriert sein. Beispielsweise kann der Codierer 104 in Hardware oder Software implementiert sein, die in einer Sensorvorrichtung, wie dem Sensor 102, enthalten ist. In anderen Ausführungsformen kann der Codierer 104 auf einer separaten Rechenvorrichtung implementiert sein, die sich in der Nähe des Sensors 102 befindet.
-
1B veranschaulicht ein Verfahren zum Codieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen. 1C veranschaulicht auch repräsentative Ansichten einer Punktwolke bei verschiedenen Stufen eines Codierungsprozesses gemäß einigen Ausführungsformen.
-
Bei 152 empfängt ein Codierer, wie der Codierer 104, eine erfasste Punktwolke, wie erfasste Punktwolke 110, die in 1A veranschaulicht ist, oder erfasste Punktwolke 154, die in 1C veranschaulicht ist. Es ist zu beachten, dass die erfasste Punktwolke 110 und 154 zur einfacheren Darstellung in zwei Dimensionen veranschaulicht sind, aber in einigen Ausführungsformen dreidimensionale Punktwolken umfassen können.
-
Bei 156 das tastet der Codierer die Punktwolke mit niedriger Frequenz ab, um unterabgetastete Punktwolke zu erzeugen. Zum Beispiel veranschaulicht 1C eine unterabgetastete Punktwolke 158. In einigen Ausführungsformen kann ein Codierer die Punktwolke gleichmäßig abtasten, um die unterabgetastete Punktwolke zu erzeugen. Zum Beispiel kann der Codierer Punkte in gleichmäßigen Intervallen in einer Punktwolke auswählen, um eine unterabgetastete Punktwolke zu erzeugen. In einigen Ausführungsformen kann ein Codierer einen verlustbehafteten Komprimierungsalgorithmus verwenden, wenn räumliche Informationen einer unterabgetasteten Punktwolke codiert werden, die verwendet werden sollen, um eine dekomprimierte unterabgetastete Punktwolke zu erzeugen. In einigen solchen Ausführungsformen kann ein Codierer die unterabgetastete Punktwolke unter Verwendung des verlustbehafteten Komprimierungsalgorithmus codieren und kann die verlustbehaftete codierte unterabgetastete Punktwolke an dem Codierer decodieren, um eine repräsentative unterabgetastete Punktwolke zu erzeugen, auf die ein Decodierer beim Decodieren von räumlichen Informationen für Punkte einer unterabgetasteten Punktwolke, die nach verlustbehafteten Komprimierungsalgorithmus codiert wurden, treffen wird. In einigen Ausführungsformen kann ein Codierer einen verlustfreien Komprimierungsalgorithmus zum Codieren von räumlichen Informationen für Punkte einer unterabgetasteten Punktwolke verwenden, und der Codierer kann das Codieren und das Decodieren der unterabgetasteten Punktwolke weglassen, um eine repräsentative unterabgetastete Punktwolke zu erzeugen, auf die ein Decodierer treffen soll. Dies liegt daran, dass, wenn ein verlustfreier Komprimierungsalgorithmus verwendet wird, die unterabgetastete Punktwolke dafür repräsentativ ist, auf was der Decodierer beim Decodieren der räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke trifft, die nach dem verlustfreien Komprimierungsalgorithmus codiert wurden.
-
Bei 160 identifiziert der Codierer Unterteilungsstellen zwischen den jeweiligen Punkten der unterabgetasteten Punktwolke und den benachbarten Punkten der jeweiligen Punkte der unterabgetasteten Punktwolke. Zum Beispiel, wie in 162 von 1C veranschaulicht. Bei 164 bestimmt der Codierer, ob ein Punkt in die dekomprimierte Punktwolke an der Unterteilungsstelle aufgenommen, in die dekomprimierte Punktwolke an der Unterteilungsstelle nicht aufgenommen oder in der dekomprimierten Punktwolke relativ zur Unterteilungsstelle versetzt werden soll. Zum Beispiel, wie in 166 von 1C veranschaulicht.
-
In einigen Ausführungsformen können mehrere Unterteilungsstellen zwischen einem gegebenen Punkt und den jeweiligen Punkten von einem Satz von zu dem gegebenen Punkt benachbarten Punkten bestimmt werden und für jede der mehreren Unterteilungsstellen kann bestimmt werden, ob ein Punkt in die dekomprimierte Punktwolke an der Unterteilungsstelle aufgenommen, in die dekomprimierte Punktwolke an der Unterteilungsstelle nicht aufgenommen oder in der dekomprimierten Punktwolke relativ zur Unterteilungsstelle versetzt werden soll. In jedem Fall kann, basierend auf dem Vergleich der Unterteilungsstelle mit der ursprünglichen Punktwolke vor der Unterabtastung, bestimmt werden, einen Punkt relativ zu einer Unterteilungsstelle aufzunehmen, nicht zu nehmen, zu versetzen. Wenn zum Beispiel die Unterteilungsstelle auf eine Oberfläche der ursprünglichen Punktwolke fällt, kann der Codierer bestimmen, dass ein Punkt an der Unterteilungsstelle in die dekomprimierte Punktwolke aufgenommen werden soll. Umgekehrt, wenn die Unterteilungsstelle mehr als ein Schwellenabstand von einer Oberfläche der ursprünglichen Punktwolke ist, kann der Codierer bestimmen, dass ein Punkt nicht an der Unterteilungsstelle aufgenommen werden soll. Wenn die sich die Unterteilungsstelle innerhalb des Schwellenbereichs einer Oberfläche der ursprüngliche Punktwolke befindet, aber angepasst werden müsste, um mit der Oberfläche der ursprünglichen Punktwolke ausgerichtet zu werden, kann der Codierer bestimmen, einen Punkt in der dekomprimierten Wolke relativ zur Unterteilungsstelle zu versetzen, so dass der versetzte Punkt mit der ursprünglichen Punktwolke genau ausgerichtet ist.
-
In einigen Ausführungsformen kann ein Codierer zusätzlich zu räumlichen Informationen auch zeitliche Informationen codieren. Zum Beispiel kann jeder Punkt ein dem Punkt zugeordnetes Zeitattribut aufweisen, wie eine Zeit, zu der der Punkt erfasst wurde. In einigen Ausführungsformen, in denen zeitliche Informationen codiert werden, kann der Codierer ferner bestimmen, ob ein Punkt aufgenommen, nicht aufgenommen oder relativ zu einer Unterteilungsstelle basierend auf zeitlichen Informationen versetzt werden soll, wie ob sich die Punktwolke an der Unterteilungsstelle von einem Zeitschritt zum nächsten, als ein Beispiel, geändert hat. Oder, basierend darauf, ob ein Punkt an der Unterteilungsstelle in einer vorherigen Version der dekomprimierten Punktwolke zu einem früheren Zeitpunkt aufgenommen war.
-
In einigen Ausführungsformen kann ein Codierer bestimmen, dass ein oder mehrere zusätzliche Punkte in eine dekomprimierte Punktwolke aufgenommen werden sollen. Wenn zum Beispiel die ursprüngliche erfasste Punktwolke eine unregelmäßige Oberfläche oder Form aufweist, so dass Unterteilungsstellen zwischen Punkten in der unterabgetasteten Punktwolke die unregelmäßige Oberfläche oder Form nicht angemessen darstellen, kann der Codierer bestimmen, einen oder mehrere zusätzliche Punkte zusätzlich zu den Punkten aufzunehmen, von denen bestimmt wurde, dass sie an Unterteilungsstellen aufgenommen oder relativ zu Unterteilungsstellen in der dekomprimierten Punktwolke versetzt werden sollen. In einigen Ausführungsformen können Daten, die zusätzliche Punkte darstellen, explizit zusätzlich zu den unterabgetasteten Punkten, die in die Daten für die komprimierte Punktwolke aufgenommen wurden, codiert werden.
-
In einigen Ausführungsformen kann ein Codierer 160 und 164 für jeden Punkt in einer unterabgetasteten Punktwolke durchführen. In einigen Ausführungsformen kann ein Codierer auch Punkte hinzufügen, von denen bestimmt wurde, dass sie aufgenommen oder relativ zu einer Stelle versetzt werden sollen, und andere zusätzliche Punkte, von denen bestimmt wurde, dass sie in eine dekomprimierte Punktwolke aufgenommen werden sollen, um eine aktualisierte unterabgetastete Punktwolke zu erzeugen. Der Codierer kann dann 160 und 164 für jeden der Punkte der aktualisierten unterabgetasteten Punktwolke durchführen. In einigen Ausführungsformen kann ein Codierer ferner durch 160 und 164 weiter iterieren oder eine unterabgetastete Punktwolke für eine bestimmte Anzahl von Iterationen aktualisieren, zum Beispiel einen vorgegebenen oder bestimmten Parameter (N). In einigen Ausführungsformen kann eine Anzahl von durchzuführenden Unterteilungsiterationen ein konfigurierbarer Parameter sein, der an dem Codierer konfiguriert ist und zusammen mit der komprimierten Punktwolke an einen Decodierer übertragen wird. In einigen Ausführungsformen kann ein Codierer und Decodierer ausgelegt sein, um eine feste Anzahl von Unterteilungsiterationen durchzuführen.
-
Wenn der Codierer die Auswertung der jeweiligen Unterteilungsstellen abgeschlossen hat, um zu bestimmen, ob ein Punkt aufgenommen, nicht aufgenommen oder an jeder der jeweiligen Unterteilungsstellen versetzt werden soll, und durch dieses Verfahren für alle Unterteilungsiterationen, die pro Iterationsparameter erforderlich sind, iteriert hat, kann der Codierer bei 168 die räumlichen Informationen und/oder die Attributinformationen für die Punkte der unterabgetasteten Punktwolke codieren und kann auch Daten codieren, die für jede der jeweiligen Unterteilungsstellen angeben, ob ein Punkt an der jeweiligen Unterteilungsstelle aufgenommen oder nicht aufgenommen werden soll. Für Punkte, die in der dekomprimierten Punktwolke versetzt werden sollen, kann der Codierer ferner Stellenkorrekturdaten codieren, die angeben, wie der Punkt relativ zu der Unterteilungsstelle versetzt werden soll. In einigen Ausführungsformen kann der Codierer zusätzlich räumliche und/oder Attributinformationen für zusätzliche Punkte codieren, die zu der dekomprimierten Punktwolke hinzugefügt werden sollen, und kann andere Konfigurationsinformationen codieren.
-
Zum Beispiel veranschaulicht 166 von 1C Punkte an Unterteilungsstellen, die versetzt werden, um sich auf die ursprüngliche erfasste Punktwolke auszurichten. In einigen Ausführungsformen können diese Stellenkorrekturinformationen als räumliche Informationen Delta X, Delta Y oder Delta Z bezüglich der Unterteilungsstelle codiert werden. In anderen Ausführungsformen können diese Stellenkorrekturinformationen als ein skalarer Wert codiert werden, der über ein Punktprodukt zwischen einem Vektor von der Unterteilungsstelle zu der versetzten Stelle und einem Normalvektor an der Unterteilungsstelle bestimmt werden kann, wobei der Normalvektor normal zu einer Oberfläche der unterabgetasteten Punktwolke ist, bevor der Punkt zu der versetzten Stelle versetzt wird. In einigen Ausführungsformen können Stellenkorrekturdaten arithmetisch codiert oder nach Golomb-Codierungstechniken oder anderen geeigneten verlustfreien Codierungstechniken codiert werden.
-
In einigen Ausführungsformen kann ein Codierer zusätzlich zu räumlichen Informationen auch zeitliche Informationen codieren. Zum Beispiel kann jeder Punkt eine dem Punkt zugeordnete Zeit aufweisen, wie eine Zeit, zu der der Punkt erfasst wurde. In einigen Ausführungsformen, in denen zeitliche Informationen codiert werden, kann der Codierer ferner bestimmen, ob ein Punkt aufgenommen, nicht aufgenommen oder relativ zu einer Unterteilungsstelle basierend auf zeitlichen Informationen versetzt werden soll, wie, ob sich die Punktwolke an der Unterteilungsstelle von einem Zeitschritt zum nächsten geändert hat. Als ein weiteres Beispiel kann ein Codierer bestimmen, dass ein Punkt, der zu einem bestimmten Zeitschritt in eine ursprüngliche (nicht komprimierte) Punktwolke aufgenommen wurde, der nicht bei vorherigen Zeitschritten (z. B. Rahmen) in der ursprünglichen Punktwolke erscheint, und/oder der nicht bei nachfolgenden Zeitschritten (z. B. Rahmen) in der ursprünglichen Punktwolke erscheint, kein wichtiger Punkt ist. Als Reaktion auf eine solche Bestimmung kann ein Codierer bestimmen, dass ein Punkt nicht an einer Unterteilungsstelle aufgenommen werden muss, die dem Punkt in der ursprünglichen Punktwolke entspricht. Ein Codierer kann ähnliche zeitliche Überlegungen verwenden, wenn er bestimmt, ob ein Punkt relativ zu einer Unterteilungsstelle versetzt werden soll, und/oder wenn er bestimmt, ob räumliche Informationen für zusätzliche Punkte in eine Punktwolke aufgenommen werden sollen.
-
Zusätzlich können räumliche Informationen für zusätzliche Punkte codiert und in die komprimierte Punktwolke aufgenommen werden, von denen bestimmt wurde, dass sie in eine dekomprimierte Punktwolke aufgenommen werden sollen. Auch Daten, die konfigurierbare Parameter angeben, wie eine Anzahl von nächstgelegenen Nachbarn (K), die in einen Satz von nächstgelegenen Nachbarn für einen Punkt beim Bestimmen von Unterteilungsstellen aufgenommen werden sollen, ein minimaler Abstand von einem ausgewählten Punkt (D0) für nächstgelegene Nachbarn, ein maximaler Abstand von einem ausgewählten Punkt (D1) für nächstgelegene Nachbarn, ein minimaler Abstand von einem ausgewählten Punkt für eine Unterteilungsstelle (D2), ein Abstand zwischen einem ausgewählten Punkt und einem nächstgelegenen Nachbarn für eine Unterteilungsstelle (M), zum Beispiel ein Mittelpunkt, eine Anzahl der durchzuführenden Unterteilungsiterationen (N) usw., können in eine komprimierte Punktwolke aufgenommen werden, die von einem Codierer an einen Decodierer gesendet wird, oder in eine komprimierte Punktwolke aufgenommen werden, die von einem Decodierer gespeichert und später decodiert werden soll. In einigen Ausführungsformen können diese zusätzlichen Informationen, die in der komprimierten Punktwolke enthalten sind, unter Verwendung verschiedener Codierungstechniken codiert werden. Zum Beispiel können arithmetische Codierung, Golomb-Codierung oder andere geeignete verlustfreie oder verlustbehaftete Codierungstechniken verwendet werden.
-
Da die komprimierte Punktwolke räumliche Informationen für die unterabgetasteten Punkte, Daten, die die Aufnahme oder Nicht-Aufnahme von Punkten an Unterteilungsstellen anzeigen, Daten, die das Versetzen von Punkten, die relativ zu Unterteilungsstellen versetzt werden sollen, anzeigen, räumliche Informationen für zusätzliche Punkte, die aufgenommen werden sollen, und Konfigurationsinformationen, die vom Codierer verwendet werden, einschließt, kann der Decodierer die ursprüngliche erfasste Punktwolke oder eine nahezu Replik der ursprünglichen erfassten Punktwolke durch Durchführen einer ähnlichen Analyse wie der Codierer neu erstellen. Zum Beispiel kann der Decodierer Unterteilungsstellen unter Verwendung der gleichen Konfigurationsparameter wie der Codierer bestimmen und Punkte an den Unterteilungsstellen nach den Bestimmungen, die in der komprimierten Punktwolke enthalten sind, aufnehmen, nicht aufnehmen oder versetzen. Der Decodierer kann auch zusätzliche Punkte basierend auf den räumlichen Informationen für die zusätzlichen Punkte einschließen, die in der komprimierten Punktwolke enthalten sind. Ein Decodierer kann auch basierend auf zeitlichen Parametern, wie Änderungen von Punktstellen von Frame zu Frame in einer Punktwolke mit mehreren Frames, bestimmen, ob zusätzliche Punkte aufgenommen werden sollen.
-
2A veranschaulicht Komponenten eines Codierers gemäß einigen Ausführungsformen.
-
Der Codierer 202 kann ein ähnlicher Codierer wie der in 1A veranschaulichte Codierer 104 sein. Der Codierer 202 schließt den Unterabtaster 216, den verlustbehafteten Codierer 204 und den verlustbehafteten Decodierer 210 ein. Wie oben beschrieben, kann in einigen Ausführungsformen ein verlustbehafteter Codierungsalgorithmus verwendet werden, um räumliche Informationen von Punkten einer unterabgetasteten Punktwolke zu codieren.
-
Somit kann ein Codierer wie der Codierer 202 eine Punktwolke beispielsweise über die Schnittstelle für eingehende Daten 214 empfangen und kann die empfangene Punktwolke über einen Unterabtaster wie den Unterabtaster 216 unterabtasten, um eine unterabgetastete Punktwolke zu erzeugen. Der Codierer kann dann die unterabgetastete Punktwolke verlustbehaftet codieren und verlustbehaftet decodieren, zum Beispiel über den verlustbehafteten Codierer 204 und den verlustbehafteten Decodierer 210, um eine repräsentative unterabgetastete Punktwolke zu erzeugen, die eine unterabgetastete Punktwolke darstellt, die ein Decodierer erzeugen wird, wenn er eine komprimierte Punktwolke mit unterabgetasteten Punkten empfängt, die verlustbehaftet codiert wurden.
-
In einigen Ausführungsformen kann ein Codierer, wie der Codierer 202, ferner eine Konfigurationsschnittstelle wie die Konfigurationsschnittstelle 212 einschließen, wobei ein oder mehrere Parameter, die von dem Codierer zum Komprimieren einer Punktwolke verwendet werden, über die Konfigurationsschnittstelle angepasst werden können. In einigen Ausführungsformen kann eine Konfigurationsschnittstelle, wie die Konfigurationsschnittstelle 212, eine programmatische Schnittstelle wie eine API sein. Konfigurationen, die von einem Codierer, wie dem Codierer 202, verwendet werden, können in einem Konfigurationsspeicher wie Konfigurationsspeicher 218 gespeichert werden. Ein Unterteilungsauswerter, wie der Unterteilungsstellenauswerter 206, kann Unterteilungsstellenauswertungen durchführen, um zu bestimmen, ob Punkte aufgenommen, nicht aufgenommen oder relativ zu Unterteilungsstellen versetzt werden sollen. Ein Unterteilungsstellenauswerter kann auch weitere Punkte bestimmen, die in eine dekomprimierte Punktwolke aufgenommen werden sollen, die aus Daten erzeugt wurde, die in eine komprimierte Punktwolke aufgenommen sind, die von dem Codierer codiert wird.
-
Sobald die Informationen zu der Unterteilungsstellenentscheidung bestimmt worden sind und alle weiteren Punkte, die in die dekomprimierte Punktwolke aufgenommen werden sollen, bestimmt worden sind, können die räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke, die Daten, die Informationen zu der Unterteilungsstellenentscheidung angeben, Versetzungsinformationen, räumliche Informationen für weitere Punkte, die in eine dekomprimierte Punktwolke aufgenommen werden sollen, und Konfigurationsinformationen zur Verwendung beim Decodieren einer komprimierten Punktwolke angeben, über einen ausgehenden Datencodierer, wie einen ausgehenden Datencodierer 208, codiert werden. In einigen Ausführungsformen kann ein ausgehender Datencodierer ausgehende Daten nach einer von verschiedenen Codierungstechniken codieren, wie einer arithmetischen Codierung, einer Golomb-Codierung, verschiedenen verlustfreien Codiertechniken oder verlustbehafteten Codiertechniken. In einigen Ausführungsformen können räumliche Informationen für Punkte entsprechend einer verlustbehafteten Codierungstechnik codiert werden, während Versetzungsinformationen für Punkte, die relativ zu einer Unterteilungsstelle versetzt werden sollen, entsprechend einer verlustfreien Codiertechnik codiert werden können. In einigen Ausführungsformen können Versetzungsinformationen, die wenige Zeichen umfassen, unter Verwendung einer speziellen Codierungstechnik codiert werden, während Versetzungsinformationen, die mehr Zeichen umfassen, unter Verwendung einer anderen Codierungstechnik codiert werden können.
-
In einigen Ausführungsformen kann ein Codierer, wie der Codierer 202, mehr oder weniger Komponenten als in 2A gezeigt einschließen. Zum Beispiel können in einigen Ausführungsformen, die räumliche Informationen unter Verwendung einer verlustfreien Codierungstechnik codieren, der verlustbehaftete Codierer 204 und der verlustbehaftete Decodierer 210 weggelassen werden.
-
2B veranschaulicht Komponenten eines Decodierers gemäß einigen Ausführungsformen.
-
Der Decodierer 220 kann ein ähnlicher Decodierer sein wie der in 1A veranschaulichte Decodierer 116. Der Decodierer 220 schließt die codierte Datenschnittstelle 224, den Unterabtastungsdecodierer 222, den Unterteilungspunktauswerter 226, den Konfigurationsspeicher 230 und die decodierte Datenschnittstelle 228 ein.
-
Ein Decodierer, wie der Decodierer 220, kann eine codierte komprimierte Punktwolke, wie die in 1A veranschaulichte komprimierte Punktwolke 112 oder die in 3 veranschaulichte komprimierte Punktwolkendatei 300, über eine codierte Datenschnittstelle 224 von einem Codierer empfangen. Die codierte komprimierte Punktwolke kann decodiert und von dem Decodierer verwendet werden, um Punkte einer unterabgetasteten Punktwolke zu bestimmen. Zum Beispiel können räumliche Informationen von Punkten einer unterabgetasteten Punktwolke von einem Unterabtastungsdecodierer, wie einem Unterabtastungsdecodierer 222, decodiert werden.
-
In einigen Ausführungsformen kann eine komprimierte Punktwolke über eine codierte Datenschnittstelle, wie die codierte Datenschnittstelle 224, von einer Speichervorrichtung oder einer anderen zwischengeschalteten Quelle empfangen werden, wobei die komprimierte Punktwolke zuvor von einem Codierer, wie dem Codierer 104, codiert wurde.
-
Sobald eine unterabgetastete Punktwolke bestimmt wurde, kann ein Unterteilungspunktauswerter, wie der Unterteilungspunktauswerter 226, benachbarte Punkte für jeweilige Punkte der bestimmten unterabgetasteten Punktwolke bestimmen und Unterteilungsstellen zwischen den jeweiligen Punkten und den jeweiligen benachbarten Punkten bestimmen. Der Unterteilungsauswerter kann auch Daten zum Decodieren empfangen, die in einer komprimierten Punktwolke enthalten sind, die angeben, ob ein Punkt an einer bestimmten Unterteilungsstelle aufgenommen oder nicht aufgenommen werden soll, oder ob der Punkt relativ zu der Unterteilungsstelle versetzt werden soll. In einigen Ausführungsformen kann der Unterabtastungsdecodierer 222 auch über verlustbehaftete oder verlustfreie Techniken codierte Daten decodieren, die Informationen, ob ein Punkt an einer bestimmten Unterteilungsstelle aufgenommen, nicht aufgenommen werden soll, und/oder Versetzungsinformationen angeben, und die decodierten Daten an den Unterteilungspunktauswerter 226 bereitstellen. Der Unterteilungsauswerter kann die Unterteilungsstellen basierend auf Parametern bestimmen, die in einem Konfigurationsspeicher gespeichert sind, wie dem Konfigurationsspeicher 230. In einigen Ausführungsformen können mindestens einige der Konfigurationen konfigurierbare Parameter sein, die an einem Codierer ausgelegt und zusammen mit der komprimierten Punktwolke an den Decodierer übertragen werden. In einigen Ausführungsformen können mindestens einige der Parameter feste Parameter sein, die nicht mit einer komprimierten Punktwolke übertragen werden. In einigen Ausführungsformen können konfigurierbare Parameter, die in einer komprimierten Punktwolke enthalten sind, decodiert und zu einem Konfigurationsspeicher wie dem Konfigurationsspeicher 230 hinzugefügt werden, so dass die konfigurierbaren Parameter vom Unterteilungspunktauswerter 226 verwendet werden, wenn Unterteilungsstellen bestimmt werden. In einigen Ausführungsformen können ein Unterteilungspunktauswerter und/oder ein Unterabtastungsdecodierer ferner räumliche Informationen für weitere Punkte, die in die dekomprimierte Punktwolke aufgenommen werden sollen, decodieren, wobei die räumlichen Informationen für die weiteren Punkte in die codierte komprimierte Punktwolke aufgenommen werden, die vom Decodierer empfangen wird.
-
Ein Decodierer, wie der Decodierer 220, kann eine dekomprimierte Punktwolke, die basierend auf einer empfangenen codierten komprimierten Punktwolke erzeugt wurde an eine empfangende Vorrichtung oder Anwendung über eine decodierte Datenschnittstelle bereitstellen, wie die decodierte Datenschnittstelle 228. Die dekomprimierte Punktwolke kann die Punkte der unterabgetasteten Punktwolke, Punkte, die in eine Unterteilungsstelle aufgenommen oder relativ zu einer Unterteilungsstelle versetzt werden sollen, und weitere Punkte, von denen angegeben wird, dass sie in die dekomprimierte Punktwolke aufgenommen werden, einschließen. In einigen Ausführungsformen kann die dekomprimierte Punktwolke verwendet werden, um eine visuelle Anzeige zu erzeugen, beispielsweise für ein Datenhelm. In einigen Ausführungsformen kann die dekomprimierte Punktwolke auch an eine Entscheidungsmaschine bereitgestellt werden, die die dekomprimierte Punktwolke verwendet, um eine oder mehrere Steuerentscheidungen zu treffen. In einigen Ausführungsformen kann die dekomprimierte Punktwolke in verschiedenen anderen Anwendungen oder für verschiedene andere Zwecke verwendet werden.
-
3 veranschaulicht beispielhafte komprimierte Punktwolkendatei gemäß einigen Ausführungsformen. Die Punktwolkendatei 300schließt Konfigurationsinformationen 304, Punktwolkendaten 306, Daten über die Aufnahme an einem Unterteilungsstellenpunkt/Versetzung 308 für Unterteilungsstellenpunkte und zusätzliche Punkte ein, die in eine dekomprimierte Punktwolke 310 aufgenommen werden sollen. In einigen Ausführungsformen kann die Punktwolkendatei 300 in Teilen über mehrere Pakete übertragen werden. In einigen Ausführungsformen können nicht alle der in der Punktwolkendatei 300 gezeigten Abschnitte in jedem Paket enthalten sein, das komprimierte Punktwolkeninformationen übermittelt. In einigen Ausführungsformen kann eine Punktwolkendatei, wie die Punktwolkendatei 300, in einer Speichervorrichtung, wie einem Server, der einen Codierer oder Decodierer implementiert, gespeichert werden oder kann in einer anderen Rechenvorrichtung gespeichert werden.
-
4 veranschaulicht ein Verfahren zum Codieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen.
-
Bei 402 empfängt ein Codierer eine Punktwolke. Die Punktwolke kann eine erfasste Punktwolke von einem oder mehreren Sensoren sein oder kann eine erzeugte Punktwolke sein, wie eine Punktwolke, die durch eine Graphikanwendung erzeugt wird.
-
Bei 404 tastet der Codierer die empfangene Punktwolke mit niedriger Frequenz ab, um unterabgetastete Punktwolke zu erzeugen. Die unterabgetastete Punktwolke kann weniger Punkte als die empfangene Punktwolke einschließen. Zum Beispiel kann die empfangene Punktwolke Hunderte von Tausenden von Punkten oder Millionen von Punkten einschließen, und die unterabgetastete Punktwolke kann Hunderte von Punkten oder Tausende von Punkten einschließen.
-
Bei 406 codiert und decodiert der Codierer die unterabgetastete Punktwolke, um eine repräsentative unterabgetastete Punktwolke zu erzeugen, die der Decodierer erzeugen wird, wenn er die komprimierte Punktwolke decodiert. In einigen Ausführungsformen können der Codierer und Decodierer einen verlustbehafteten Komprimierungs-/Dekomprimierungsalgorithmus ausführen, um die repräsentative unterabgetastete Punktwolke zu erzeugen. In einigen Ausführungsformen können räumliche Informationen für Punkte einer unterabgetasteten Punktwolke als Teil der Erzeugung einer repräsentativen unterabgetasteten Punktwolke unterabgetastet werden. In einigen Ausführungsformen kann ein Codierer verlustfreie Kompressionstechniken verwenden und 406 kann weggelassen werden. Wenn beispielsweise verlustfreie Komprimierungstechniken verwendet werden, kann die ursprüngliche unterabgetastete Punktwolke repräsentativ für eine unterabgetastete Punktwolke sein, die der Decodierer erzeugen wird, da bei der verlustfreien Komprimierung Daten während der Kompression und Dekomprimierung nicht verloren gehen.
-
Bei 408 identifiziert der Codierer Unterteilungsstellen zwischen den Punkten der unterabgetasteten Punktwolke nach den Konfigurationsparametern, die für die Komprimierung der Punktwolke ausgewählt wurden, oder nach den festen Konfigurationsparametern. Die von dem Codierer verwendeten Konfigurationsparameter, die keine festen Konfigurationsparameter sind, werden an einen Decodierer übertragen, indem Werte für die Konfigurationsparameter in einer komprimierten Punktwolke aufgenommen werden. Somit kann ein Decodierer dieselben Unterteilungsstellen bestimmen wie der Codierer, der basierend auf Unterteilungskonfigurationsparametern ausgewertet wird, die in der komprimierten Punktwolke enthalten sind. In 5 wird in mehr Einzelheiten erläutert, wie ein Codierer Unterteilungsstellen nach den Konfigurationsparametern identifiziert.
-
Bei
410 bestimmt der Codierer für die jeweiligen der Unterteilungsstellen, ob ein Punkt an der Unterteilungsstelle in eine dekomprimierte Punktwolke aufgenommen werden soll. Daten, die diese Bestimmung angeben, werden in der komprimierten Punktwolke codiert. In einigen Ausführungsformen können die Daten, die diese Bestimmung angeben, ein einzelnes Bit sein, das, wenn es „wahr“ ist, bedeutet, dass ein Punkt aufgenommen werden soll, und wenn es „falsch“ ist, bedeutet, dass ein Punkt nicht aufgenommen werden soll. Zusätzlich kann ein Codierer bestimmen, dass ein Punkt, der in eine dekomprimierte Punktwolke aufgenommen werden soll, relativ zu der Unterteilungsstelle in der dekomprimierten Punktwolke versetzt werden soll. Für solche Punkte kann der Codierer ferner Daten codieren, die angeben, wie der Punkt relativ zur Unterteilungsstelle versetzt werden soll. In einigen Ausführungsformen können Stellenkorrekturinformationen quantisiert und Entropiecodiert werden. In einigen Ausführungsformen können die Stellenkorrekturinformationen Delta-X-, Delta-Y- und/oder Delta-Z-Werte umfassen, die angeben, wie der Punkt relativ zur Unterteilungsstelle versetzt werden soll. In anderen Ausführungsformen können die Stellenkorrekturinformationen einen einzelnen skalaren Wert umfassen, der der normalen Komponente der Stellenkorrekturinformationen entspricht, die wie folgt berechnet werden:
-
In der obigen Gleichung ist Delta N ein skalarer Wert, der Stellenkorrekturinformationen angibt, die die Differenz zwischen der versetzten oder angepassten Punktstelle relativ zur Unterteilungsstelle (z. B. [XA ,YA ,ZA ]) und der ursprünglichen Unterteilungsstelle (z. B. [X,Y,Z]) darstellen. Das Kreuzprodukt dieser Vektordifferenz und des Normalvektors an der Unterteilungsstelle ergibt den skalaren Wert Delta N. Da ein Decodierer den Normalvektor an der Unterteilungsstelle bestimmen kann und die Koordinaten der Unterteilungsstelle z. B. [X,Y,Z] bestimmen kann, kann der Decodierer auch die Koordinaten der angepassten Stelle, z. B. [XA ,YA ,ZA ] durch Lösen der obigen Gleichung für die angepasste Stelle, die eine versetzte Stelle für einen Punkt relativ zur Unterteilungsstelle darstellt, bestimmen. In einigen Ausführungsformen können die Stellenkorrekturinformationen ferner in eine normale und eine oder mehrere weitere tangentiale Komponenten zerlegt werden. In einer solchen Ausführungsform können die normale Komponente, z. B. Delta N, und die tangentiale Komponente(n) quantisiert und codiert werden, um in eine komprimierte Punktwolke aufgenommen zu werden.
-
Bei 412 bestimmt der Codierer, ob ein oder mehrere zusätzliche Punkte (zusätzlich zu den unterabgetasteten Punkten und zusätzlich zu Punkten, die an Unterteilungsstellen aufgenommen sind, oder Punkten, die an Stellen aufgenommen sind, die relativ zu Unterteilungsstellen versetzt sind) in eine dekomprimierte Punktwolke aufgenommen werden sollen. Wenn zum Beispiel die ursprüngliche Punktwolke eine unregelmäßige Oberfläche oder Form aufweist, so dass Unterteilungsstellen zwischen Punkten in der unterabgetasteten Punktwolke die unregelmäßige Oberfläche oder Form nicht angemessen darstellen, kann der Codierer bestimmen, einen oder mehrere zusätzliche Punkte zusätzlich zu den Punkten aufzunehmen, von denen bestimmt wurde, dass sie an Unterteilungsstellen aufgenommen oder relativ zu Unterteilungsstellen in der dekomprimierten Punktwolke versetzt werden sollen. Zusätzlich kann ein Codierer bestimmen, ob ein oder mehrere zusätzliche Punkte, basierend auf Einschränkungen des Systems, wie einer Zielbitrate, einem Zielkomprimierungsverhältnis, einer Qualitätszielmetrik usw., in eine dekomprimierte Punktwolke aufgenommen werden sollen. In einigen Ausführungsformen kann sich ein Bit-Budget durch die sich ändernden Bedingungen wie Netzwerkbedingungen, Prozessorlast usw. ändern. In solchen Ausführungsformen kann ein Codierer eine Menge zusätzlicher Punkte anpassen, die in eine dekomprimierte Punktwolke, basierend auf einem sich ändernden Bit-Budget, aufgenommen werden sollen. In einigen Ausführungsformen kann ein Codierer zusätzliche Punkte einschließen, so dass ein Bit-Budget verbraucht wird, ohne überschritten zu werden. Zum Beispiel, wenn ein Bit-Budget höher ist, kann ein Codierer mehr zusätzliche Punkte einschließen, um das Bit-Budget zu verbrauchen (und die Qualität zu verbessern), und wenn das Bit-Budget geringer ist, kann der Codierer weniger zusätzliche Punkte einschließen, so dass das Bit-Budget verbraucht, jedoch nicht überschritten wird.
-
Bei 414 bestimmt der Codierer, ob zusätzliche Unterteilungsiterationen durchgeführt werden sollen. In diesem Fall werden die Punkte, von denen bestimmt wurde, dass sie in eine dekomprimierte Punktwolke aufgenommen, versetzt oder zusätzlich aufgenommen werden sollen, berücksichtigt, und der Prozess kehrt zu 408 zurück, um neue Unterteilungsstellen einer aktualisierten unterabgetasteten Punktwolke zu identifizieren, die Punkte einschließt, von denen bestimmt wurde, dass sie aufgenommen, versetzt oder zusätzlich in eine dekomprimierte Wolke aufgenommen werden sollen. In einigen Ausführungsformen kann eine Anzahl von durchzuführenden (N) Unterteilungsiterationen ein fester oder konfigurierbarer Parameter eines Codierers/Decodierers sein. In einigen Ausführungsformen können unterschiedliche Unterteilungsiterationswerte unterschiedlichen Abschnitten einer Punktwolke zugewiesen werden. Beispielsweise kann ein Codierer den Blickwinkel berücksichtigen, aus dem die Punktwolke betrachtet wird, und kann mehr Unterteilungsiterationen an Punkten der Punktwolke im Vordergrund der Punktwolke durchführen, wie sie von dem Blickwinkel betrachtet wird, und weniger Unterteilungsiterationen an Punkten im Hintergrund der Punktwolke, wie sie von dem Blickwinkel betrachtet wird.
-
Bei 416 werden die räumlichen Informationen für die unterabgetasteten Punkte der Punktwolke codiert und in die komprimierte Punktwolke aufgenommen. Zusätzlich werden Aufnahme- und Versetzungsdaten für Unterteilungsstellen codiert und zusammen mit räumlichen Informationen für zusätzliche Punkte, die in eine dekomprimierte Punktwolke aufgenommen werden sollen, in die komprimierte Punktwolke aufgenommen. Zusätzlich werden alle konfigurierbaren Parameter, die von dem Codierer ausgewählt werden oder von einem Benutzer an den Codierer geliefert werden, codiert, um in die komprimierte Punktwolke aufgenommen zu werden. Die komprimierte Punktwolke kann dann als komprimierte Punktwolkendatei oder als mehrere komprimierte Punktwolkendateien an eine empfangende Entität gesendet werden oder kann paketiert und über mehrere Pakete an eine empfangende Entität wie einen Decodierer oder eine Speichervorrichtungen übertragen werden.
-
5 veranschaulicht einen Prozess zum Unterteilen einer unterabgetasteten Punktwolke gemäß einigen Ausführungsformen. Schritte 502-512, die in 5 veranschaulicht sind, können als Teil des Identifizierens von Unterteilungsstellen durchgeführt werden, wie in 408 in 4.
-
Bei 502 wählt ein Unterteilungsstellenauswerter, wie der Unterteilungsstellenauswerter 206 des Codierers 202, der in 2A veranschaulicht ist, einen ausgewählten Punkt aus einer unterabgetasteten Punktwolke aus, wie eine unterabgetastete Punktwolke, die sich aus der Unterabtastung bei 404 in 4 ergibt oder eine repräsentative unterabgetastete Punktwolke, die sich aus 406 in 4 ergibt. In einigen Ausführungsformen können Punkte einer unterabgetasteten Punktwolke geordnet werden, und der Unterteilungsstellenauswerter kann den ersten (oder nächsten) Punkt in der Reihenfolge auswählen. Die unterabgetasteten Punkte können an den Decodierer in der gleichen Reihenfolge übertragen werden, so dass der Decodierer die Punkte, die ausgewertet werden sollen, aus der unterabgetasteten Punktwolke oder der repräsentativen unterabgetasteten Punktwolke in derselben Reihenfolge auswählt, in der sie zur Auswertung durch den Codierer ausgewählt wurden.
-
Bei 504 identifiziert der Unterteilungsstellenauswerter den nächstgelegenen benachbarten Punkt zu dem ausgewählten Punkt (oder in nachfolgenden Iterationen den nächstgelegenen benachbarten Punkt). Bei 506 bestimmt der Unterteilungsstellenauswerter, ob der identifizierte nächste oder nächstgelegene benachbarte Punkt wenigstens einen minimalen Abstand (D0) von dem ausgewählten Punkt, der ausgewertet wird, aufweist. In einigen Ausführungsformen kann D0 ein konfigurierbarer Parameter sein, den der Codierer an einen Decodierer in einer komprimierten Punktwolke überträgt. Wenn sich der nächste oder nächstgelegene benachbarte Punkt näher an dem ausgewählten Punkt befindet, der ausgewertet wird, als der minimale Abstand D0, wird der benachbarte Punkt für eine Unterteilungsstelle nicht weiter ausgewertet, und der Prozess kehrt zu 504 zurück, wobei ein nächstgelegener benachbarter Punkt ausgewählt wird.
-
Wenn der identifizierte benachbarte Punkt, der bei 506 ausgewertet wird, vom ausgewählten Punkt weiter weg entfernt ist als der minimale Abstand, wird bei 508 bestimmt, ob der identifizierte benachbarte Punkt, der ausgewertet wird, näher an dem ausgewählten Punkt liegt, der ausgewertet wird, als ein maximaler Abstand (D1). D1 kann auch ein konfigurierbarer Parameter sein, den der Codierer an einen Decodierer in einer komprimierten Punktwolke überträgt. Wenn der identifizierte benachbarte Punkt, der ausgewertet wird, weiter weg von dem ausgewählten Punkt, der ausgewertet wird, als der maximale Abstand (D1) entfernt ist, kann der identifizierte benachbarte Punkt, der ausgewertet wird, für eine Unterteilungsstelle nicht weiter ausgewertet werden, und der Prozess kann zu 504 zurückkehren, wobei ein anderer benachbarter Punkt ausgewählt wird, oder wenn keine benachbarten Punkte innerhalb von D0 und D1 vorhanden sind, kann der Prozess beendet werden und zu 410 von 4 (z. B. 512 von 5) zurückkehren.
-
Bei 510 wird eine Unterteilungsstelle zwischen dem ausgewählten Punkt, der ausgewertet wird, und dem identifizierten benachbarten Punkt, der ausgewertet wird, ausgewertet, um zu bestimmen, ob die Unterteilungsstelle wenigstens in einem minimalen Abstand von dem ausgewählten Punkt, der ausgewertet wird (D2) liegt. In einigen Ausführungsformen kann die Unterteilungsstelle an einem Mittelpunkt zwischen dem ausgewählten Punkt, der ausgewertet wird, und dem identifizierten benachbarten Punkt, der ausgewertet wird, liegen. In einigen Ausführungsformen kann die Unterteilungsstelle an einer anderen Stelle als einem Mittelpunkt zwischen dem ausgewählten Punkt, der ausgewertet wird, und dem identifizierten benachbarten Punkt, der ausgewertet wird, liegen. Zum Beispiel kann in einigen Ausführungsformen ein Codierer einen Konfigurationsparameter zum Bestimmen einer Unterteilungsstelle zwischen einem ausgewählten Punkt, der ausgewertet wird, und einem identifizierten benachbarten Punkt, der ausgewertet wird, auswählen. Dieser Parameter (M) kann an einen Decodierer in einer komprimierten Punktwolke übertragen werden.
-
Wenn die Unterteilungsstelle größer als der minimale Abstand D2 von dem ausgewählten Punkt ist, der ausgewertet wird, kann die Unterteilung eine gültige Unterteilungsstelle sein, und der Codierer kann bestimmen, ob ein Punkt an der Unterteilungsstelle aufgenommen, an der Unterteilungsstelle nicht aufgenommen oder relativ zu der Unterteilungsstelle bei 512 versetzt werden soll. Es ist zu beachten, dass 512 das gleiche wie 410 in 4 sein kann, und der Codierer kann weiter mit den Schritten 412-416, die in 4 gezeigt werden, fortfahren.
-
6 veranschaulicht ein Verfahren zum Decodieren einer komprimierten Punktwolke gemäß einigen Ausführungsformen. Ein Decodierer kann ähnliche Schritte durchführen, wie für einen Codierer in 4 und 5 beschrieben wird, um eine dekomprimierte Punktwolke basierend auf Informationen zu erzeugen, die in einer komprimierten Punktwolke enthalten sind, die von einem Codierer nach einem ähnlichen Prozess wie in 4 und 5 beschrieben empfangen wird.
-
Bei 602 empfängt der Decodierer eine komprimierte Punktwolke. Die komprimierte Punktwolke kann räumliche Informationen für Punkte einer unterabgetasteten Punktwolke, Informationen, die die Aufnahme oder das Versetzen von Punkten an Unterteilungsstellen angeben, räumliche Informationen für zusätzliche Punkte, die in eine dekomprimierte Punktwolke aufgenommen werden sollen, und Konfigurationsinformationen einschließen. In einigen Ausführungsformen kann die unterabgetastete Punktwolke an den Decodierer in einem codierten Format übertragen werden. Beispielsweise können die räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke unter Verwendung einer arithmetischen Codierungstechnik oder einer Golomb-Codierungstechnik an einem Codierer codiert worden sein. In solchen Ausführungsformen kann der Decodierer die codierten räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke decodieren, so dass die räumlichen Informationen für die Punkte der unterabgetasteten Punktwolke verwendet werden können, um zusätzliche Punkte zu bestimmen, die in eine komprimierte Punktwolke, die aus der dekomprimierten Punktwolke erzeugt wurde, aufgenommen werden sollen.
-
Bei 604 wählt ein Unterteilungspunktauswerter eines Decodierers, wie der Unterteilungspunktauswerter 226 des Decodierers 220, der in 2B veranschaulicht, einen Punkt aus der unterabgetasteten Punktwolke aus, der in der komprimierten Punktwolke übertragen wird, um für Unterteilungsstellen auszuwerten. Bei nachfolgenden Iterationen kann der ausgewählte Punkt ein Punkt einer aktualisierten unterabgetasteten Punktwolke sein, die Punkte einschließt, von denen bestimmt wurde, dass sie in einer vorhergehenden Iteration der Bestimmung von Unterteilungsstellen in eine dekomprimierte Punktwolke aufgenommen werden sollen. In einigen Ausführungsformen können die Punkte der unterabgetasteten Punktwolke so geordnet sein, dass der Unterteilungspunktauswerter des Decodierers Punkte der unterabgetasteten Punktwolke auswählt, die in derselben Reihenfolge auszuwerten sind, in der die Punkte an einem Codierer ausgewertet wurden.
-
Bei 606 identifiziert der Unterteilungspunktauswerter des Decodierers einen nächsten (oder nächstgelegenen) benachbarten Punkt zu dem ausgewählten Punkt der unterabgetasteten Punktwolke, die ausgewertet wird. Bei 608 bestimmt der Unterteilungspunktauswerter des Decodierers, ob der ausgewählte benachbarte Punkt wenigstens einen minimalen Abstand (D0) von dem ausgewählten Punkt, der ausgewertet wird, aufweist. Wenn der benachbarte Punkt nicht wenigstens den minimalen Abstand D0 von dem ausgewählten Punkt, der ausgewertet wird, aufweist, kehrt der Unterteilungspunktauswerter zu 606 zurück und wählt einen anderen benachbarten Punkt aus. Wenn sich der benachbarte Punkt in einem größeren Abstand als der minimale Abstand D0 von dem ausgewählten Punkt, der ausgewertet wird, befindet, bestimmt der Unterteilungspunktauswerter bei 610, ob die benachbarten Punkte innerhalb eines maximalen Abstands D1 von dem Punkt, der ausgewertet wird, liegen. Wenn der benachbarte Punkt nicht innerhalb des maximalen Abstands D1 von dem ausgewählten Punkt liegt, der ausgewertet wird, kehrt der Unterteilungspunktauswerter zu 606 zurück und wählt einen anderen benachbarten Punkt aus. Wenn es keine benachbarten Punkte innerhalb von D0 und D1 gibt, kehrt der Unterteilungspunktauswerter zu 604 zurück und wertet einen anderen Punkt aus.
-
Wenn der benachbarte Punkt innerhalb von D0 und D1 liegt, bestimmt der Unterteilungspunktauswerter bei 612 eine Unterteilungsstelle zwischen dem ausgewählten Punkt, der ausgewertet wird, und dem aktuellen benachbarten Punkt, der ausgewertet wird. In einigen Ausführungsformen kann Unterteilungsstelle ein Mittelpunkt sein oder an einer anderen Stelle als ein Mittelpunkt liegen, wobei die Konfigurationsinformationen, die in der komprimierten Punktwolke enthalten sind, angeben, wie eine Unterteilungsstelle zwischen einem Punkt und einem benachbarten Punkt bestimmt werden soll. Bei 614 bestimmt der Unterteilungspunktauswerter des Decodierers, ob bestimmte Unterteilungsstelle wenigstens einen minimalen Abstand D2 von dem ausgewählten Punkt, der ausgewertet wird, aufweist. In einigen Ausführungsformen können die Parameter D0, D1 und/oder D2 in einer komprimierten Punktwolke übertragen werden oder können feste Parameter sein, die sowohl am Codierer als auch am Decodierer gleich sind. Wenn die bestimmte Unterteilungsstelle nicht mindestens den minimalen Abstand D2 von dem ausgewählten zu bewertenden Punkt aufweist, kehrt der Unterteilungspunktauswerter des Decodierers zu 606 zurück und identifiziert einen anderen benachbarten Punkt zum Auswerten.
-
Bei 616 bestimmt der Unterteilungspunktauswerter, sobald eine gültige Unterteilungsstelle bestimmt wurde, basierend auf den in der komprimierten Punktwolke enthaltenen Aufnahme-/Versetzungsdaten des Unterteilungsstellenpunkts, ob ein Punkt an der Unterteilungsstelle aufgenommen werden soll. Wenn ein Punkt nicht an der Unterteilungsstelle aufgenommen werden soll, kehrt der Unterteilungspunktauswerter zu 606 zurück und identifiziert einen anderen benachbarten Punkt zum Auswerten.
-
Bei 618 bestimmt der Unterteilungspunktauswerter, ob der Punkt relativ zu der Unterteilungsstelle versetzt werden soll. Wenn der Punkt nicht versetzt werden soll, bewirkt der Unterteilungspunktauswerter bei 620, dass ein Punkt an der Unterteilungsstelle in die dekomprimierte Punktwolke aufgenommen wird. Wenn der Punkt versetzt werden soll, verwendet der Decodierer bei 622 Versetzungsinformationen, die in der komprimierten Punktwolke enthalten sind, um eine Stelle relativ zu der Unterteilungsstelle zu bestimmen, an dem ein Punkt in die dekomprimierte Punktwolke aufgenommen werden soll, und bewirkt bei 624, dass der Punkt in die dekomprimierte Punktwolke aufgenommen wird.
-
Bei 626 bestimmt der Decodierer basierend auf Konfigurationsinformationen, ob es zusätzliche benachbarte Punkte gibt, die für den ausgewählten Punkt ausgewertet werden sollen. Beispielsweise kann ein Konfigurationsparameter „K“, der in der komprimierten Punktwolke enthalten ist, eine Anzahl benachbarter Punkte angeben, die in einen Satz von benachbarten Punkten aufgenommen werden sollen, die für Unterteilungsstellen für einen gegebenen ausgewählten Punkt, der ausgewertet wird, ausgewertet werden sollen. Wenn weitere benachbarte Punkte ausgewertet werden sollen, kann der Decodierer zu 606 zurückkehren, und der Unterteilungspunktauswerter kann einen anderen benachbarten Punkt auswerten, der zu dem ausgewählten Punkt, der ausgewertet wird, benachbart ist. Wenn es keine zusätzlichen benachbarten Punkte gibt, die für den ausgewählten Punkt ausgewertet werden sollen, kann der Decodierer bei 628 bestimmen, ob zusätzliche Punkte der unterabgetasteten Punktwolke ausgewertet werden sollen. Wenn es zusätzliche Punkte der unterabgetasteten Punktwolke gibt, die ausgewertet werden sollen, kann der Decodierer zur 604 zurückkehren und den nächsten Punkt der unterabgetasteten Punktwolke zum Auswerten auswählen und kann den oben für den nächsten Punkt in der unterabgetasteten Punktwolke beschriebenen Prozess ausführen. In einigen Ausführungsformen können die Punkte der unterabgetasteten Punktwolke an den Decodierer in einer Reihenfolge übertragen werden, so dass der Decodierer die Punkte der unterabgetasteten Punktwolke, die ausgewertet werden sollen, in derselben Reihenfolge auswählt, in der sie am Codierer ausgewertet wurden.
-
Wenn keine zusätzlichen Punkte der unterabgetasteten Punktwolke ausgewertet werden sollen, kann der Decodierer bei 630 bestimmen, ob es zusätzliche Punkte gibt, die in die dekomprimierte Punktwolke für die aktuelle Unterteilungsiteration aufgenommen werden sollen. Wenn es zusätzliche Punkte gibt, die aufgenommen werden sollen, können sie bei 632 aufgenommen werden. Wenn nicht, kann 632 übersprungen werden.
-
Bei 634 bestimmt der Decodierer, ob es zusätzliche Unterteilungsiterationen gibt, die auszuführen sind. Beispielsweise kann die komprimierte Punktwolke einen Konfigurationsparameter „N“ einschließen, der eine Anzahl von Unterteilungsiterationen angibt, die ausgeführt werden sollen, wenn eine dekomprimierte Punktwolke aus der komprimierten Punktwolke erzeugt wird. Wenn eine zusätzliche Unterteilungsiteration durchgeführt werden muss, aktualisiert der Decodierer bei 636 die aktuelle unterabgetastete Punktwolke mit allen Punkten, von denen bestimmt wurde, dass die an einer Unterteilungsstelle aufgenommen oder relativ zu einer Unterteilungsstelle versetzt werden sollen, zusammen mit allen zusätzlichen Punkten, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke aufgenommen werden sollen. Nach dem Aktualisieren der aktuellen unterabgetasteten Punktwolke kehrt der Decodierer zu 604 zurück und wiederholt den Prozess unter Verwendung der aktualisierten unterabgetasteten Punktwolke, um Verteilungsstellen zu bestimmen.
-
Wenn keine zusätzlichen Unterteilungsiterationen durchgeführt werden müssen, erzeugt der Decodierer die dekomprimierte Punktwolke bei 638. Die dekomprimierte Punktwolke umfasst die Punkte der ursprünglichen unterabgetasteten Punktwolke, die in der komprimierten Punktwolke enthalten sind, und alle Punkte, von denen bestimmt wurde, dass sie aufgenommen oder relativ zu Unterteilungsstellen versetzt werden sollen, die während einer der Unterteilungsiterationen bestimmt wurden, zusammen mit einem zusätzlichen Punkten, von denen bestimmt wurde, dass sie während einer der Unterteilungsiterationen in die dekomprimierte Punktwolke aufgenommen werden.
-
7 veranschaulicht komprimierte Punktwolken gemäß einigen Ausführungsformen, die in einer 3-D-Telepräsenz-Anwendung verwendet wird.
-
In einigen Ausführungsformen können ein Sensor wie der Sensor 102, ein Codierer wie der Codierer 104 oder der Codierer 202 und ein Decodierer wie der Decodierer 116 oder der Decodierer 220 verwendet werden, um Punktwolken in einer 3-D-Telepräsenzanwendung zu übertragen. Zum Beispiel kann ein Sensor, wie der Sensor 102, bei 702 ein 3D-Bild erfassen, und bei 704 kann der Sensor oder ein dem Sensor zugeordneter Prozessor eine 3D-Rekonstruktion basierend auf erfassten Daten zum Erzeugen einer Punktwolke durchführen.
-
Bei 706 kann ein Codierer wie der Codierer 104 oder 202 die Punktwolke komprimieren, und bei 708 kann der Codierer oder ein Nachprozessor die komprimierte Punktwolke über ein Netzwerk 710 paketieren und übertragen. Bei 712 können die Pakete an einem Zielort empfangen werden, der einen Decodierer Umfasst, wie den Decodierer 116 oder den Decodierer 220. Der Decodierer kann die Punktwolke bei 714 dekomprimieren und die dekomprimierte Punktwolke kann bei 716 gerendert werden. In einigen Ausführungsformen kann eine 3-D-Telepräsenz-Anwendung Punktwolkendaten in Echtzeit übertragen, so dass eine Anzeige bei 716 Bilder darstellt, die bei 702 beobachtet werden. Zum Beispiel kann eine Kamera in einer Schlucht einem entfernten Benutzer ermöglichen, ein Gehen durch eine virtuelle Schlucht bei 716 zu erfahren.
-
8 veranschaulicht komprimierte Punktwolken, die in einer Virtual-Reality (VR)- oder Augmented-Reality (AR) -Anwendung gemäß einigen Ausführungsformen verwendet werden.
-
In einigen Ausführungsformen können Punktwolken in Software erzeugt werden (zum Beispiel im Gegensatz zu dem Erfassen durch einen Sensor). Beispielsweise werden bei 802 Virtual-Reality oder Augmented-Reality-Inhalte erzeugt. Die Virtual-Reality oder Augmented-Reality-Inhalte können Punktwolkendaten und Nicht-Punktwolkendaten einschließen. Zum Beispiel kann ein Nicht-Punktwolken-Zeichen eine Landschaft durchqueren, die, als ein Beispiel, durch Punktwolken dargestellt ist. Bei 804 können die Punktwolkendaten komprimiert werden und bei 806 können die komprimierten Punktwolkendaten und Nicht-Punktwolkendaten paketiert und über ein Netzwerk 808 übertragen werden. Beispielsweise können die Virtual-Reality oder Augmented-Reality-Inhalte, die bei 802 erzeugt werden, an einem entfernten Server erzeugt und über das Netzwerk 808 an einen Verbraucher der VR- oder AR-Inhalte übertragen werden. Bei 810 werden die Pakete empfangen und an der Vorrichtung des VR- oder AR-Verbrauchers synchronisiert. Ein Decodierer, der auf der Vorrichtung des VR- oder AR-Verbrauchers arbeitet, kann die komprimierte Punktwolke bei 812 dekomprimieren, und die Punktwolken- und Nicht-Punktwolkendaten können in Echtzeit gerendert werden, zum Beispiel in einem Datenhelm der Vorrichtung des VR- oder AR-Verbrauchers. In einigen Ausführungsformen können Punktwolkendaten erzeugt, komprimiert, dekomprimiert und als Reaktion auf den VR- oder AR-Verbraucher, der das Datenhelm manipuliert, gerendert werden, um in unterschiedliche Richtungen zu schauen.
-
In einigen Ausführungsformen kann die hier beschriebene Punktwolkenkomprimierung in verschiedenen anderen Anwendungen verwendet werden, wie z. B. geografischen Informationssystemen, Sportsendungswiederholungen, Museumsanzeigen, autonomer Navigation usw.
-
Beispiel für ein Computersystem
-
9 veranschaulicht ein Beispiel eines Computersystems 900, das einen Codierer oder Decodierer oder andere der hier beschriebenen Komponenten (z. B. eine der oben beschriebenen Komponenten unter Bezugnahme auf 1 bis 8) gemäß einigen Ausführungsformen implementieren kann. Das Computersystem 900 kann so ausgelegt sein, dass es eine oder alle der oben beschriebenen Ausführungsformen ausführt. In verschiedenen Ausführungsformen kann ein Computersystem 900 eine von verschiedenen Arten von Vorrichtungen sein, unter anderem ein PC-System, ein Desktop-Computer, ein Laptop, ein Notebook, ein Tablet, ein Slate, ein Pad oder ein Netbook-Computer, ein Mainframe-Computersystem, ein in der Hand zu haltender Computer, eine Workstation, ein Netz-Computer, eine Kamera, eine Set Top Box, eine mobile Vorrichtung, eine Anwendervorrichtung, eine Videospielkonsole, eine in der Hand zu haltende Videospielvorrichtung, ein Anwendungsserver, eine Speichervorrichtung, ein Fernsehgerät, ein Videorecorder, eine periphere Vorrichtung wie ein Switch, ein Modem, ein Router oder ganz allgemein jede Art von Rechner oder elektronischer Vorrichtung.
-
Verschiedene Ausführungsformen eines Punktwolkencodierers oder -decodierers, wie hier beschrieben, können in einem oder mehreren Computersystemen 900 ausgeführt werden, die mit verschiedenen anderen Vorrichtungen wechselwirken können. Man beachte, dass jede Komponente, Aktion oder Funktion, die oben mit Bezug auf 1 bis 8 beschrieben wurde, an einem oder mehreren Computern ausgeführt werden kann, der bzw. die als Computersystem 900 von 9 ausgeführt ist bzw. sind, nach verschiedenen Ausführungsformen. In der veranschaulichten Ausführungsform weist das Computersystem 900 einen oder mehrere Prozessoren 910 auf, die über eine Eingabe/Ausgabe-Schnittstelle (E/A-Schnittstelle) 930 mit einem Systemspeicher 920 gekoppelt sind. Das Computersystem 900 weist ferner eine Netzschnittstelle 940, die mit der E/A-Schnittstelle 930 gekoppelt ist, und eine oder mehrere Eingabe-/AusgabeVorrichtungen 950 auf, beispielsweise eine Cursor-Steuervorrichtung 960, eine Tastatur 970 und ein oder mehrere Displays 980. In manchen Fällen kann in Betracht gezogen werden, dass Ausführungsformen unter Verwendung eines Einzelinstanz-Computersystems 900 implementiert werden, während in anderen Ausführungsformen mehrere solcher Systeme oder mehrere Knoten, aus denen das Computersystem 900 besteht, so ausgelegt sein können, dass sie verschiedene Abschnitte oder Instanzen von Ausführungsformen hosten. Zum Beispiel können in einer Ausführungsform manche Elemente über einen oder mehrere Knoten des Computersystems 900 implementiert werden, die sich von den Knoten unterscheiden, die andere Elemente implementieren.
-
In verschiedenen Ausführungsformen kann das Computersystem 900 ein Einzelprozessorsystem sein, das einen Prozessor 910 einschließt, oder ein Multiprozessorsystem, das mehrere Prozessoren 910 (z. B. zwei, vier, acht oder eine andere, geeignete Anzahl) einschließt. Die Prozessoren 910 können jeder geeignete Prozessor sein, der in der Lage ist, Befehle auszuführen. Zum Beispiel können Prozessoren 910 in verschiedenen Ausführungsformen Allzweck- oder eingebettete Prozessoren sein, die eine von einer Reihe verschiedener Befehlssatzarchitekturen (instruction set architectures, ISAs) implementieren, wie etwa x86, PowerPC, SPARC oder MIPS ISAs, oder eine beliebige andere, geeignete ISA. In Multiprozessorsystemen kann jeder der Prozessoren 910 die gleiche ISA implementieren wie die anderen, muss aber nicht notwendigerweise.
-
Der Systemspeicher 920 kann dafür ausgelegt sein, Anweisungen des Punktwolkenkomprimierungs- oder Punktwolkendekomprimierungsprogramms 922 und/oder Sensordaten zu speichern, auf die der Prozessor 910 zugreifen kann. In verschiedenen Ausführungsformen kann der Systemspeicher 920 unter Verwendung jeder geeigneten Speichertechnologie, wie als statischer Schreib-Lese-Speicher (SRAM), synchroner dynamischer RAM (SDRAM), nicht-flüchtiger/Flash-Speicher oder eine beliebige andere Art von Speicher implementiert werden. In der dargestellten Ausführungsform können Programmbefehle 922 dafür ausgelegt sein, eine Bildsensorsteueranwendung zu implementieren, die eine der oben beschriebenen Funktionalitäten enthält. In einigen Ausführungsformen können Programmbefehle und/oder Daten auf verschiedenen Arten von für Computer zugänglichen Medien oder auf ähnlichen Medien, die vom Systemspeicher 920 oder vom Computersystem 900 getrennt vorliegen, empfangen, versendet oder gespeichert werden. Obwohl das beschriebene Computersystem 900 die Funktionalität von Funktionsblöcken vorangehender Figuren implementiert, kann jede der hierin beschriebenen Funktionalitäten über solch ein Computersystem implementiert werden.
-
In einer Ausführungsform kann die E/A-Schnittstelle 930 dazu ausgelegt sein, E/A-Verkehr zwischen dem Prozessor 910, dem Systemspeicher 920 und beliebigen peripheren Vorrichtungen in der Vorrichtung, einschließlich der Netzwerkschnittstelle 940 oder anderer peripherer Schnittstellen, wie etwa Eingabe-/Ausgabevorrichtungen 950, zu koordinieren. In einigen Ausführungsformen kann die E/A-Schnittstelle 930 jede nötige Protokoll-, Zeitsteuerungs- oder andere Datenumwandlung durchführen, um Datensignale von einer Komponente (z. B. dem Systemspeicher 920) in ein Format zu konvertieren, das sich zur Verwendung durch eine andere Komponente (z. B. den Prozessor 910) eignet. In einigen Ausführungsformen kann die E/A-Schnittstelle 930 Vorrichtungen unterstützen, die über verschiedene Arten von peripheren Bussen angeschlossen werden, wie etwa eine Variante des Peripheral Component Interconnect-Busstandards (PCI-Busstandard) oder des Universal Serial Bus-Standards (USB-Standard). In einigen Ausführungsformen kann die Funktion der E/A-Schnittstelle 930 auf zwei oder mehr separate Komponenten aufgeteilt sein, beispielsweise eine Nordbrücke und eine Südbrücke. Ebenso können in einigen Ausführungsformen einige oder alle Funktionalitäten der E/A-Schnittstelle 930, wie etwa eine Schnittstelle mit einem Systemspeicher 920, direkt in den Prozessor 910 eingebaut sein.
-
Die Netzwerkschnittstelle 940 kann dazu ausgelegt sein, einen Datenaustausch zwischen dem Computersystem 900 und anderen Vorrichtungen, die an ein Netzwerk 985 angeschlossen sind (z. B. Träger- oder Agent-Vorrichtungen), oder zwischen Knoten des Computersystems 900 zuzulassen. Das Netz 985 kann in verschiedenen Ausführungsformen eines oder mehrere Netze einschließen, wozu unter anderem Local Area Networks (LANs) (z. B. ein Ethernet- oder Corporate-Network), Wide Area Networks (WANs) (z. B. das Internet), drahtlose Datennetze, andere elektronische Datennetze oder Kombinationen davon gehören. In verschiedenen Ausführungsformen kann die Netzwerkschnittstelle 940 eine Kommunikation über drahtgebundene oder drahtlose allgemeine Datennetzwerke, beispielsweise jede geeignete Art von Ethernet-Netzwerk; über Telekommunikations-/Telefonienetzwerke wie etwa analoge Sprachnetzwerke oder digitale Faser-Kommunikationsnetzwerke; über Speichernetzwerke wie etwa Fibre-Channel-SANs oder über jede andere geeignete Art von Netzwerk und/oder Protokoll unterstützen.
-
Eingabe/Ausgabe-Vorrichtungen 950 können in manchen Ausführungsformen einen oder mehrere Display-Anschlüsse, Tastaturen, Keypads, Touchpads, Scanner, Sprach- oder optischen Erkennungsvorrichtungen oder beliebigen anderen Vorrichtungen, die sich dafür eignen, Dateneingabe oder -zugriffe durch eines oder mehrere Computersysteme 900 durchzuführen. Mehrere Eingabe/Ausgabe-Vorrichtungen 950 können im Computersystem 900 vorhanden oder auf verschiedene Knoten des Computersystems 900 verteilt sein. In einigen Ausführungsformen können ähnliche Eingabe/AusgabeVorrichtungen getrennt vom Computersystem 900 vorliegen und können mit einem oder mehreren Knoten des Computersystems 900 über eine drahtgebundene oder drahtlose Verbindung, wie etwa eine Netzwerkschnittstelle 940, interagieren.
-
Wie in 9 dargestellt ist, kann der Speicher 920 Programmbefehle 922 einschließen, die von einem Prozessor ausführbar sind, um irgendeine(s) der oben beschriebenen Elemente oder Aktionen zu implementieren. In einer Ausführungsform können die Programmbefehle die oben beschriebenen Verfahren implementieren. In anderen Ausführungsformen können andere Elemente und Daten enthalten sein. Man beachte, dass Daten jegliche der oben beschriebenen Daten oder Informationen beinhalten können.
-
Der Fachmann wird erkennen, dass das Computersystem 900 lediglich der Veranschaulichung dient und den Umfang der Ausführungsformen nicht beschränken soll. Insbesondere können das Computersystem und die Vorrichtungen beliebige Kombinationen aus Hardware und Software einschließen, welche die angegebenen Funktionen ausführen können, einschließlich Computern, Netzgeräten, Internetgeräten, PDAs, drahtlosen Telefonen, Pagern usw. Das Computersystem 900 kann auch mit anderen Vorrichtungen verbunden sein, die nicht dargestellt sind, und kann stattdessen als eigenständiges System arbeiten. Außerdem kann die Funktionalität, die von den dargestellten Komponenten bereitgestellt wird, in manchen Ausführungsformen in weniger Komponenten kombiniert oder in zusätzlichen Komponenten verteilt sein. Ebenso kann in manchen Ausführungsformen die Funktionalität von manchen der dargestellten Komponenten nicht bereitgestellt werden, und/oder es kann eine zusätzliche Funktionalität verfügbar sein.
-
Der Fachmann wird außerdem erkennen, dass zwar wie dargestellt verschiedene Dinge im Speicher gespeichert oder in einer Speichervorrichtung abgelegt sein können, während sie verwendet werden, dass diese Dinge oder Teile davon aber für die Zwecke der Speicherverwaltung und Datenintegrität auch zwischen einem Speicher und anderen Speichervorrichtungen übertragen werden können. Alternativ dazu können in anderen Ausführungsformen einige oder alle von den Software-Komponenten im Speicher oder einer anderen Vorrichtung ausgeführt werden und mit dem dargestellten Computersystem über Inter-Computer-Kommunikation kommunizieren. Einige oder alle von den Systemkomponenten oder Datenstrukturen können auch auf einem für Computer zugänglichen Medium oder einem tragbaren Gegenstand gespeichert werden (z. B. als Befehle oder strukturierte Daten), um von einem geeigneten Laufwerk gelesen zu werden, wofür Beispiele oben beschrieben sind. In einigen Ausführungsformen können Befehle, die auf einem für Computer zugänglichen Medium gespeichert sind, das separat vom Computersystem 900 vorliegt, über Übertragungsmedien oder -signale wie etwa elektrische, elektromagnetische oder digitale Signale, die über ein Kommunikationsmedium wie etwa ein Netzwerk und/oder eine drahtlose Verbindung übermittelt werden, an das Computersystem 900 übertragen werden. Verschiedene Ausführungsformen können ferner das Empfangen, Verschicken oder Speichern von Befehlen und/oder Daten, die gemäß der obigen Beschreibung implementiert werden, auf einem für Computer zugänglichen Medium beinhalten. Allgemein gesprochen kann ein für Computer zugängliches Medium ein nicht-transitorisches, computerlesbares Speichermedium oder Speichermedium einschließen, wie magnetische oder optische Medien, z. B. eine Disk oder DVD/CD-ROM, flüchtige oder nicht-flüchtige Medien wie RAM (z. B. SDRAM, DDR, RDRAM, SRAM usw.), ROM usw. In manchen Ausführungsformen kann ein für Computer zugängliches Medium Sendemedien oder -signale beinhalten, wie elektrische, elektromagnetische oder digitale Signale, die über ein Kommunikationsmedium, wie ein Netz und/oder eine drahtlose Strecke übermittelt werden.
-
Die hierin beschriebenen Verfahren können in Software, Hardware oder einer Kombination davon in verschiedenen Ausführungsformen implementiert werden. Außerdem kann die Reihenfolge der Blöcke der Verfahren geändert werden, und verschiedene Elemente können hinzugefügt, aufgezeichnet, kombiniert, weggelassen, modifiziert werden usw. Verschiedene Modifikationen und Änderungen können vorgenommen werden, wie dies für einen Fachmann, der sich dieser Offenbarung bedient, naheliegen würde. Die verschiedenen, hierin beschriebenen Ausführungsformen sollen veranschaulichend und nicht einschränkend sein. Es sind viele Variationen, Modifikationen, Hinzufügungen und Verbesserungen möglich. Dementsprechend können für Komponenten, die hierin als einzelne Instanz beschrieben sind, mehrere Instanzen bereitgestellt werden. Grenzen zwischen verschiedenen Komponenten, Operationen und Datenspeicherungen sind in gewissem Maß willkürlich, und bestimmte Operationen sind im Kontext spezifischer, veranschaulichender Konfigurationen veranschaulicht. Andere Zuordnungen von Funktionalitäten sind denkbar und können in den Umfang der folgenden Ansprüche fallen. Schließlich können Strukturen und Funktionalitäten, die in den Beispielkonfigurationen als diskrete Komponenten dargestellt werden, als eine kombinierte Struktur oder Komponente implementiert werden. Diese und andere Variationen, Modifikationen, Erweiterungen und Verbesserungen können in den Umfang der Ausführungsformen fallen, wie er in den folgenden Ansprüchen definiert ist.