DE112018004878T5 - Punktwolkengeometriekomprimierung - Google Patents

Punktwolkengeometriekomprimierung Download PDF

Info

Publication number
DE112018004878T5
DE112018004878T5 DE112018004878.0T DE112018004878T DE112018004878T5 DE 112018004878 T5 DE112018004878 T5 DE 112018004878T5 DE 112018004878 T DE112018004878 T DE 112018004878T DE 112018004878 T5 DE112018004878 T5 DE 112018004878T5
Authority
DE
Germany
Prior art keywords
point cloud
point
points
location
subsampled
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Pending
Application number
DE112018004878.0T
Other languages
English (en)
Inventor
Khaled Mammou
Fabrice A. Robinet
Andrea Gremaschi
Alexandros Tourapis
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Apple Inc
Original Assignee
Apple Inc
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Apple Inc filed Critical Apple Inc
Publication of DE112018004878T5 publication Critical patent/DE112018004878T5/de
Pending legal-status Critical Current

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/597Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding specially adapted for multi-view video sequence encoding
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T17/00Three dimensional [3D] modelling, e.g. data description of 3D objects
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T9/00Image coding
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/119Adaptive subdivision aspects, e.g. subdivision of a picture into rectangular or non-rectangular coding blocks
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/102Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or selection affected or controlled by the adaptive coding
    • H04N19/132Sampling, masking or truncation of coding units, e.g. adaptive resampling, frame skipping, frame interpolation or high-frequency transform coefficient masking
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/134Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the element, parameter or criterion affecting or controlling the adaptive coding
    • H04N19/167Position within a video image, e.g. region of interest [ROI]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/10Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding
    • H04N19/169Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding
    • H04N19/182Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using adaptive coding characterised by the coding unit, i.e. the structural portion or semantic portion of the video signal being the object or the subject of the adaptive coding the unit being a pixel
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/30Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability
    • H04N19/33Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using hierarchical techniques, e.g. scalability in the spatial domain
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/42Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation
    • H04N19/423Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements
    • H04N19/426Methods or arrangements for coding, decoding, compressing or decompressing digital video signals characterised by implementation details or hardware specially adapted for video compression or decompression, e.g. dedicated software implementation characterised by memory arrangements using memory downsizing methods
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N19/00Methods or arrangements for coding, decoding, compressing or decompressing digital video signals
    • H04N19/50Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding
    • H04N19/59Methods or arrangements for coding, decoding, compressing or decompressing digital video signals using predictive coding involving spatial sub-sampling or interpolation, e.g. alteration of picture size or resolution
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2207/00Indexing scheme for image analysis or image enhancement
    • G06T2207/10Image acquisition modality
    • G06T2207/10028Range image; Depth image; 3D point clouds
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06TIMAGE DATA PROCESSING OR GENERATION, IN GENERAL
    • G06T2210/00Indexing scheme for image generation or computer graphics
    • G06T2210/56Particle system, point based geometry or rendering

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Theoretical Computer Science (AREA)
  • Computer Graphics (AREA)
  • Geometry (AREA)
  • Software Systems (AREA)
  • Image Processing (AREA)
  • Compression Or Coding Systems Of Tv Signals (AREA)
  • Image Generation (AREA)

Abstract

Ein System umfasst einen Codierer, der ausgelegt ist, um eine Punktwolke zu komprimieren, die eine Vielzahl von Punkten umfasst, wobei jeder Punkt räumliche Informationen für den Punkt umfasst. Der Codierer ist so ausgelegt, dass er die Punkte unterabtastet und Unterteilungsstellen für die unterabgetasteten Punkte bestimmt. Der Codierer ist auch ausgelegt, um für die jeweilige Unterteilungsstelle zu bestimmen, ob ein Punkt aufgenommen, nicht aufgenommen oder relativ zu der Unterteilungsstelle versetzt werden soll. Der Codierer codiert die räumlichen Informationen für die unterabgetasteten Punkte und codiert die Aufnahme-/Versetzungsinformationen des Unterteilungsstellenpunktes, um eine komprimierte Punktwolke zu erzeugen. Ein Decodierer erzeugt eine ursprüngliche oder nahezu Replik einer ursprünglichen Punktwolke basierend auf räumlichen Informationen und den in der komprimierten Punktwolke enthaltenen Aufnahme-/Versetzungsinformationen der Unterteilungsstelle.

Description

  • 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: Δ N = ( [ X A , Y A , Z A ] [ X , Y , Z ] ) [ N o r m a l v e k t o r ]
    Figure DE112018004878T5_0001
  • 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.

Claims (20)

  1. System, umfassend: einen oder mehrere Sensoren, die ausgelegt sind, um eine Vielzahl von Punkten zu erfassen, die eine Punktwolke bilden, wobei jeder der jeweiligen Punkte räumliche Informationen umfasst, die eine räumliche Stelle des jeweiligen Punkts identifizieren, und einen Codierer, der ausgelegt ist, um eine komprimierte Punktwolke zu erzeugen, wobei zur Erzeugung der komprimierten Punktwolke der Codierer ausgelegt ist, um: eine erfasste Punktwolke unterabzutasten, die von einem oder mehreren Sensoren erfasst wird, wobei die unterabgetastete Punktwolke weniger Punkte umfasst als die erfasste Punktwolke; und für jeweilige 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 dem Vergleich der Stelle mit der erfassten Punktwolke zu bestimmen, ob ein Punkt in einer dekomprimierten Punktwolke an der Stelle aufgenommen, an der Stelle nicht aufgenommen oder relativ zur Stelle versetzt werden soll; und Daten für die komprimierte Punktwolke zu codieren, umfassend: räumliche Informationen für die Punkte der unterabgetasteten Punktwolke; und Daten, die für jede der jeweiligen Stellen angeben, ob ein entsprechender Punkt an der Stelle aufgenommen, an der Stelle nicht aufgenommen oder relativ zu der Stelle in der dekomprimierten Punktwolke versetzt werden soll.
  2. System nach Anspruch 1, wobei für die jeweiligen Punkte der unterabgetasteten Punktwolke der Codierer ferner ausgelegt ist, um; einen Satz von benachbarten Punkten zu identifizieren, wobei das Identifizieren einer Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke das Identifizieren einer Stelle zwischen dem jeweiligen Punkt und den jeweiligen der benachbarten Punkte des Satzes von benachbarten Punkten umfasst, und wobei die Bestimmung basierend auf dem Vergleich der Stelle mit der erfassten Punktwolke, ob ein Punkt in einer dekomprimierten Punktwolke an der Stelle aufgenommen, an der Stelle nicht aufgenommen oder relativ zu der Stelle versetzt werden soll, das Durchführen der Bestimmung für jede der jeweiligen Stellen zwischen dem jeweiligen Punkt und den jeweiligen der benachbarten Punkten des Satzes benachbarter Punkte umfasst.
  3. System von Anspruch 2, wobei eine Anzahl der nächsten benachbarten Punkte in dem Satz von benachbarten Punkten für den jeweiligen Punkt ein konfigurierbarer Parameter ist, der durch den Codierer konfigurierbar ist, wobei der Codierer ferner ausgelegt ist, um für die komprimierten Punktwolkendaten zu codieren, die die Anzahl der nächstgelegenen benachbarten Punkte angeben, die in den Satz benachbarter Punkte aufgenommen werden sollen, wobei ein Decodierer die codierten Daten verwendet, die die Anzahl der nächstgelegenen Nachbarn angeben, die in den Satz von benachbarten Punkten bei der Erzeugung der dekomprimierten Punktwolke aufgenommen werden sollen.
  4. System nach Anspruch 3, wobei der Codierer, um den Satz benachbarter Punkte zu identifizieren, zum Identifizieren benachbarter Punkte ausgelegt ist, die sich in einem Abstand von dem jeweiligen Punkt befinden, der größer als ein minimaler Abstand von dem jeweiligen Punkt und kleiner als ein maximaler Abstand von dem jeweiligen Punkt ist, wobei der minimale Abstand und der maximale Abstand konfigurierbare Parameter sind, die vom Codierer konfigurierbar sind, wobei der Codierer ferner ausgelegt ist, um Daten für die komprimierte Punktwolke zu codieren, die den minimalen Abstand und den maximalen Abstand angeben, wobei ein Decodierer die codierten Daten verwendet, die den minimalen Abstand und den maximalen Abstand beim Erzeugen der dekomprimierten Punktwolke angeben.
  5. System nach Anspruch 4, wobei die Anzahl der nächstgelegenen benachbarten Punkte, der minimale Abstand und der maximale Abstand vom Benutzer konfigurierbare Parameter sind.
  6. System nach Anspruch 1, wobei der Codierer ferner ausgelegt ist, um: zu bestimmen, ob ein oder mehrere zusätzliche Punkte in die dekomprimierte Punktwolke aufgenommen werden sollen, basierend auf dem Vergleich der erfassten Punktwolke mit den unterabgetasteten Punkten, den Punkten, die bestimmt sind, in die dekomprimierte Punktwolke aufgenommen zu werden, und den Punkten, die bestimmt sind, in der dekomprimierten Punktwolke versetzt zu werden; und Daten für die komprimierte Punktwolke zu codieren, die räumliche Informationen für den einen oder die mehreren zusätzlichen Punkte umfassen, die in die dekomprimierte Punktwolke aufgenommen werden sollen.
  7. System nach Anspruch 1, wobei der Codierer ferner ausgelegt ist, um: nach der Bestimmung eines oder mehrerer Punkte, die in die dekomprimierte Punktwolke aufgenommen werden sollen, oder eines oder mehrerer Punkte, die in der dekomprimierten Punktwolke versetzt werden sollen, einen oder mehrere Punkte oder einen oder mehrere versetzte Punkte in die unterabgetastete Punktwolke als Punkte einer aktualisierten unterabgetasteten Punktwolke hinzuzufügen; und für jeweilige Punkte der aktualisierten unterabgetasteten Punktwolke: eine Stelle zwischen dem jeweiligen Punkt der aktualisierten unterabgetasteten Punktwolke und einem benachbarten Punkt in der aktualisierten unterabgetasteten Punktwolke zu identifizieren, und basierend auf dem Vergleich der Stelle mit der erfassten Punktwolke zu bestimmen, ob ein Punkt in einer dekomprimierten Punktwolke an der Stelle aufgenommen, an der Stelle nicht aufgenommen oder relativ zur Stelle versetzt werden soll, wobei zum Codieren von Daten für die komprimierte Punktwolke der Codierer ausgelegt ist, Daten zu codieren, die Daten umfassen, die für jeweilige Stellen von jeder von einer oder mehreren jeweiligen aktualisierten unterabgetasteten Punktwolken angeben, ob ein entsprechender Punkt an der jeweiligen Stelle aufgenommen, an der jeweiligen Stelle nicht aufgenommen oder relativ zu der jeweiligen Stelle in der dekomprimierten Punktwolke versetzt werden soll.
  8. Verfahren zum Erzeugen einer komprimierten Punktwolke, umfassend: Unterabtasten einer Punktwolke, wobei die unterabgetastete Punktwolke weniger Punkte als die Punktwolke umfasst; und für jeweilige Punkte der unterabgetasteten Punktwolke: Vergleichen einer Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke mit der Punktwolke vor dem Unterabtasten; und basierend auf dem Vergleich, Bestimmen, ob: ein Punkt an der Stelle aufgenommen, an der Stelle nicht aufgenommen oder relativ zu der Stelle in einer dekomprimierten Punktwolke versetzt werden soll; und Codieren von Daten, die räumliche Informationen für die Punkte der unterabgetasteten Punktwolke umfassen, und Daten, die für jede der jeweiligen Stellen angeben, ob ein jeweiliger Punkt an der Stelle aufgenommen werden soll, an der Stelle nicht aufgenommen oder relativ zu der Stelle in einer dekomprimierten Punktwolke versetzt werden soll.
  9. Verfahren nach Anspruch 8, ferner umfassend: Identifizieren für die jeweiligen Punkte der unterabgetasteten Punktwolke eines Satzes von benachbarten Punkten; wobei das Identifizieren einer Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke das Identifizieren einer Stelle zwischen dem jeweiligen Punkt und jedem der benachbarten Punkte des Satzes von benachbarten Punkten umfasst.
  10. Verfahren nach Anspruch 9, wobei das Identifizieren für jeden der jeweiligen Punkte der unterabgetasteten Punktwolke eines Satzes von benachbarten Punkten Folgendes umfasst: Identifizieren von einem oder mehreren benachbarten Punkten, die sich in einem Abstand von dem jeweiligen Punkt befinden, der größer als ein minimaler Abstand von dem jeweiligen Punkt und kleiner als ein maximaler Abstand von dem jeweiligen Punkt ist, wobei der minimale Abstand und der maximale Abstand konfigurierbare Parameter sind, die von einem Codierer konfigurierbar sind.
  11. Verfahren nach Anspruch 8, ferner umfassend: Bestimmen basierend auf der unterabgetasteten Punktwolke und den Punkten, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke aufgenommen oder in der dekomprimierten Punktwolke versetzt werden sollen, ob ein oder mehrere zusätzliche Punkte in die dekomprimierte Punktwolke aufgenommen werden sollen; und Codieren von Daten für die komprimierte Punktwolke, die räumliche Informationen für die zusätzlichen Punkte umfassen, die in die dekomprimierte Punktwolke aufgenommen werden sollen.
  12. Verfahren nach Anspruch 8, ferner umfassend: Codieren an einem Codierer der unterabgetastete Punktwolke nach einem verlustbehafteten Komprimierungsalgorithmus; und Decodieren an dem Codierer der unterabgetasteten Punktwolke, die nach dem verlustbehafteten Komprimierungsalgorithmus codiert wird, um zu einer repräsentativen decodierten unterabgetasteten Punktwolke am Codierer zu führen, wobei das Vergleichen einer Stelle zwischen dem jeweiligen Punkt der unterabgetasteten Punktwolke und einem benachbarten Punkt in der unterabgetasteten Punktwolke mit der Punktwolke vor der Unterabtastung, unter Verwendung eines jeweiligen Punktes und eines benachbarten Punktes der repräsentativen decodierten abgetasteten Punktwolke an dem Codierer durchgeführt wird.
  13. Verfahren von Anspruch 8, wobei das Codieren von Daten, die anzeigen, ob ein Punkt relativ zu einer jeweiligen Stelle in einer dekomprimierten Punktwolke versetzt werden soll, Folgendes umfasst: Codieren von Daten, die eine Bewegung in einer X-, und Y-, oder Z-Richtung für den jeweiligen Zeitpunkt relativ zu der Stelle anzeigen.
  14. Verfahren von Anspruch 8, wobei das Codieren von Daten, die anzeigen, ob ein Punkt zu einer jeweiligen Stelle in einer dekomprimierten Punktwolke versetzt werden soll, Folgendes umfasst: Codieren eines skalaren Wertes, der eine Differenz zwischen einem Normalvektor normal zu einer Oberfläche der unterabgetasteten Punktwolke an der entsprechenden Stelle und einem Normalvektor normal zu der Oberfläche der unterabgetasteten Punktwolke angibt, wenn der Punkt versetzt wird, wobei ein Decodierer die Stelle des versetzten Mittelpunktes basierend auf dem skalaren Wert und dem Normalvektor auf der Oberfläche der unterabgetasteten Punktwolke an der jeweiligen Stelle bestimmt.
  15. Nicht-flüchtiges computerlesbares Medium, das Programmbefehle speichert, die, wenn sie von einem oder mehreren Prozessoren ausgeführt werden, bewirken, dass der eine oder die mehreren Prozessoren einen Decodierer implementieren, der zu Folgenden ausgelegt ist: Empfangen einer komprimierten Punktwolke, wobei die komprimierte Punktwolke räumliche Informationen für Punkte einer unterabgetasteten Punktwolke und Daten umfasst, die für jede einer Vielzahl von 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; für jeweilige Punkte der unterabgetasteten Punktwolke: Identifizieren einer entsprechenden Stelle zwischen dem jeweiligen Punkt und einem benachbarten Punkt in der unterabgetasteten Punktwolke; und Bestimmen basierend auf Daten, die in der empfangenen komprimierten Punktwolke enthalten sind, ob ein Punkt an der jeweiligen Stelle aufgenommen, nicht aufgenommen oder versetzt werden soll; und Erzeugen der dekomprimierten Punktwolke, 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.
  16. Nicht-flüchtiges computerlesbares Medium nach Anspruch 15, wobei die komprimierte Punktwolke ferner Daten umfasst, die eine Anzahl nächstgelegener Nachbarn angeben, die in einen Satz von nächstgelegenen Nachbarn für jeweilige der Punkte der unterabgetasteten Punktwolke aufgenommen werden sollen, wobei der Decodierer ferner für Folgendes ausgelegt ist: für die jeweiligen Punkte der unterabgetasteten Punktwolke: Identifizieren eines Satzes von benachbarten Punkten, wobei der Satz die angegebene Anzahl der nächstgelegene Nachbarn umfasst; Identifizieren einer Stelle zwischen dem jeweiligen Punkt und jedem der benachbarten Punkte des Satzes von benachbarten Punkten; und Bestimmen basierend auf den Daten, die in der empfangenen komprimierten Punktwolke enthalten sind, ob ein Punkt an jeder der Stellen zwischen dem jeweiligen Punkt und jedem der benachbarten Punkte des Satzes benachbarter Punkte aufgenommen, nicht aufgenommen oder versetzt werden soll.
  17. Nicht-flüchtiges computerlesbares Medium nach Anspruch 16, wobei die komprimierte Punktwolke ferner Daten umfasst, die einen minimalen Abstand von dem jeweiligen Punkt und einen maximalen Abstand von der jeweiligen Punkt zum nächstgelegenen Nachbarn angeben, die in den Satz der nächstgelegenen Nachbarn für die jeweiligen Punkte der unterabgetasteten Punktwolke aufgenommen werden sollen, wobei die benachbarten Punkte, die identifiziert werden, in dem Satz der benachbarten Punkte aufgenommen zu werden, in einem Abstand von dem jeweiligen Punkt liegen, der größer als der minimale Abstand und kleiner als der maximale Abstand ist.
  18. Nicht-flüchtiges computerlesbares Medium nach Anspruch 15, wobei die komprimierte Punktwolke ferner Daten umfasst, die einen minimalen Abstand von einem jeweiligen Punkt für eine Stelle zwischen dem jeweiligen Punkt und einem benachbarten Punkt, der berücksichtigt werden soll, angeben, wobei Stellen, die kleiner als der minimale Abstand von einem jeweiligen Punkt sind, nicht weiter zur Aufnahme in einen Punkt an der Stelle in der dekomprimierten Punktwolke ausgewertet werden.
  19. Nicht-flüchtiges computerlesbares Medium nach Anspruch 15, wobei die komprimierte Punktwolke ferner Daten umfasst, die für eine bestimmte Stelle zwischen einem jeweiligen Punkt und einem benachbarten Punkt einen skalaren Stellenkorrekturwert angeben, wobei der Codierer ausgelegt ist, um: einen Normalvektor zur Oberfläche der unterabgetasteten Punktwolke zu bestimmen; und eine Stelle für den Punkt zu bestimmen, der relativ zu der bestimmten Stelle basierend auf einem Punktprodukt des skalaren Werts und dem bestimmten Normalvektor versetzt werden soll.
  20. Nicht-flüchtiges computerlesbares Medium nach Anspruch 15, wobei der Decodierer ferner ausgelegt ist, um: die Punkte, von denen bestimmt wurde, dass sie in die dekomprimierte Punktwolke in die unterabgetastete Punktwolke aufgenommen werden sollen, hinzuzufügen, um eine aktualisierte unterabgetastete Punktwolke zu erzeugen; und für jeweilige Punkte der aktualisierten unterabgetasteten Punktwolke: eine Stelle zwischen dem jeweiligen Punkt und einem benachbarten Punkt in der aktualisierten unterabgetasteten Punktwolke zu bestimmen; und basierend auf den Daten, die in der erhaltenen komprimierten Punktwolke enthalten sind, zu bestimmen, ob ein Punkt an der Stelle in der dekomprimierten Wolke aufgenommen, nicht aufgenommen oder versetzt werden soll; wobei die komprimierte Punktwolke Daten umfasst, die eine Anzahl von Iterationen des Aktualisierens einer unterabgetasteten Punktwolke angeben, die durchgeführt werden sollen, wenn die dekomprimierte Punktwolke erzeugt wird.
DE112018004878.0T 2017-09-06 2018-09-05 Punktwolkengeometriekomprimierung Pending DE112018004878T5 (de)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US201762555003P 2017-09-06 2017-09-06
US62/555,003 2017-09-06
US16/121,501 US10462485B2 (en) 2017-09-06 2018-09-04 Point cloud geometry compression
US16/121,501 2018-09-04
PCT/US2018/049523 WO2019050931A1 (en) 2017-09-06 2018-09-05 COMPRESSION OF THE GEOMETRY OF A POINT CLOUD

Publications (1)

Publication Number Publication Date
DE112018004878T5 true DE112018004878T5 (de) 2020-06-18

Family

ID=65518420

Family Applications (1)

Application Number Title Priority Date Filing Date
DE112018004878.0T Pending DE112018004878T5 (de) 2017-09-06 2018-09-05 Punktwolkengeometriekomprimierung

Country Status (5)

Country Link
US (3) US10462485B2 (de)
KR (2) KR102513867B1 (de)
CN (2) CN111052189B (de)
DE (1) DE112018004878T5 (de)
WO (1) WO2019050931A1 (de)

Families Citing this family (54)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10462485B2 (en) 2017-09-06 2019-10-29 Apple Inc. Point cloud geometry compression
US10897269B2 (en) 2017-09-14 2021-01-19 Apple Inc. Hierarchical point cloud compression
US10861196B2 (en) 2017-09-14 2020-12-08 Apple Inc. Point cloud compression
US11818401B2 (en) 2017-09-14 2023-11-14 Apple Inc. Point cloud geometry compression using octrees and binary arithmetic encoding with adaptive look-up tables
US10909725B2 (en) 2017-09-18 2021-02-02 Apple Inc. Point cloud compression
US11113845B2 (en) 2017-09-18 2021-09-07 Apple Inc. Point cloud compression using non-cubic projections and masks
US10438413B2 (en) * 2017-11-07 2019-10-08 United States Of America As Represented By The Secretary Of The Navy Hybrid 2D/3D data in a virtual environment
US10607373B2 (en) 2017-11-22 2020-03-31 Apple Inc. Point cloud compression with closed-loop color conversion
US10909727B2 (en) 2018-04-10 2021-02-02 Apple Inc. Hierarchical point cloud compression with smoothing
US10867414B2 (en) 2018-04-10 2020-12-15 Apple Inc. Point cloud attribute transfer algorithm
US10909726B2 (en) 2018-04-10 2021-02-02 Apple Inc. Point cloud compression
US10939129B2 (en) 2018-04-10 2021-03-02 Apple Inc. Point cloud compression
US11017566B1 (en) 2018-07-02 2021-05-25 Apple Inc. Point cloud compression with adaptive filtering
US11202098B2 (en) 2018-07-05 2021-12-14 Apple Inc. Point cloud compression with multi-resolution video encoding
US11012713B2 (en) 2018-07-12 2021-05-18 Apple Inc. Bit stream structure for compressed point cloud data
US11367224B2 (en) 2018-10-02 2022-06-21 Apple Inc. Occupancy map block-to-patch information compression
US11430155B2 (en) 2018-10-05 2022-08-30 Apple Inc. Quantized depths for projection point cloud compression
CN109889840B (zh) * 2019-03-20 2022-11-22 北京大学深圳研究生院 点云编码和解码的方法、编码设备和解码设备
CN113615207A (zh) * 2019-03-21 2021-11-05 Lg电子株式会社 点云数据发送装置、点云数据发送方法、点云数据接收装置和点云数据接收方法
CN113615206B (zh) * 2019-03-21 2024-06-14 Lg电子株式会社 点云数据发送设备、点云数据发送方法、点云数据接收设备和点云数据接收方法
CN113455007B (zh) * 2019-03-22 2023-12-22 腾讯美国有限责任公司 帧间点云属性编解码的方法和装置
WO2020197086A1 (ko) * 2019-03-25 2020-10-01 엘지전자 주식회사 포인트 클라우드 데이터 송신 장치, 포인트 클라우드 데이터 송신 방법, 포인트 클라우드 데이터 수신 장치 및 포인트 클라우드 데이터 수신 방법
US11057564B2 (en) 2019-03-28 2021-07-06 Apple Inc. Multiple layer flexure for supporting a moving image sensor
CN111684804B (zh) * 2019-04-30 2022-05-13 深圳市大疆创新科技有限公司 一种数据编码、数据解码方法、设备及存储介质
CN110211040B (zh) * 2019-04-30 2022-10-21 国网河南省电力公司电力科学研究院 一种基于权值的点云压缩方法和装置
GB2584119B (en) * 2019-05-22 2022-11-02 Sony Interactive Entertainment Inc Content coding system and method
WO2020246689A1 (ko) * 2019-06-05 2020-12-10 엘지전자 주식회사 포인트 클라우드 데이터 전송 장치, 포인트 클라우드 데이터 전송 방법, 포인트 클라우드 데이터 수신 장치 및 포인트 클라우드 데이터 수신 방법
WO2020248187A1 (zh) * 2019-06-13 2020-12-17 深圳市大疆创新科技有限公司 一种点云编码方法、点云解码方法及相关设备
US11711544B2 (en) 2019-07-02 2023-07-25 Apple Inc. Point cloud compression with supplemental information messages
EP4007284A4 (de) * 2019-08-02 2023-05-24 LG Electronics Inc. Vorrichtung und verfahren zur verarbeitung von punktwolkendaten
CN110418135B (zh) * 2019-08-05 2022-05-27 北京大学深圳研究生院 一种基于邻居的权重优化的点云帧内预测方法及设备
US11627314B2 (en) 2019-09-27 2023-04-11 Apple Inc. Video-based point cloud compression with non-normative smoothing
US11562507B2 (en) 2019-09-27 2023-01-24 Apple Inc. Point cloud compression using video encoding with time consistent patches
US11538196B2 (en) 2019-10-02 2022-12-27 Apple Inc. Predictive coding for point cloud compression
US11895307B2 (en) 2019-10-04 2024-02-06 Apple Inc. Block-based predictive coding for point cloud compression
US11798196B2 (en) 2020-01-08 2023-10-24 Apple Inc. Video-based point cloud compression with predicted patches
US11475605B2 (en) 2020-01-09 2022-10-18 Apple Inc. Geometry encoding of duplicate points
CN115136602A (zh) * 2020-02-06 2022-09-30 Pcms控股公司 具有多个测量结果的3d点云增强
EP4131975A4 (de) 2020-04-14 2023-11-22 LG Electronics, Inc. Punktwolkendatenübertragungsvorrichtung, punktwolkendatenübertragungsverfahren, punktwolkendatenempfangsvorrichtung und punktwolkendatenempfangsverfahren
WO2021246796A1 (ko) * 2020-06-05 2021-12-09 엘지전자 주식회사 포인트 클라우드 데이터 송신 장치, 포인트 클라우드 데이터 송신 방법, 포인트 클라우드 데이터 수신 장치 및 포인트 클라우드 데이터 수신 방법
US11615557B2 (en) 2020-06-24 2023-03-28 Apple Inc. Point cloud compression using octrees with slicing
US11620768B2 (en) 2020-06-24 2023-04-04 Apple Inc. Point cloud geometry compression using octrees with multiple scan orders
KR20220001312A (ko) * 2020-06-29 2022-01-05 삼성전자주식회사 무선 통신 시스템에서 데이터의 송수신을 제어하기 위한 방법 및 장치
WO2022050650A1 (ko) * 2020-09-03 2022-03-10 엘지전자 주식회사 포인트 클라우드 데이터 송신 장치, 포인트 클라우드 데이터 송신 방법, 포인트 클라우드 데이터 수신 장치 및 포인트 클라우드 데이터 수신 방법
KR102488423B1 (ko) * 2020-11-18 2023-01-13 광운대학교 산학협력단 포인트 클라우드 압축 방법
CN114598892B (zh) * 2020-12-07 2024-01-30 腾讯科技(深圳)有限公司 点云数据编码方法、解码方法、装置、设备及存储介质
TWI744147B (zh) 2020-12-24 2021-10-21 財團法人工業技術研究院 可動式機械的動作測試方法與控制主機
US11948338B1 (en) 2021-03-29 2024-04-02 Apple Inc. 3D volumetric content encoding using 2D videos and simplified 3D meshes
CN113219493B (zh) * 2021-04-26 2023-08-25 中山大学 一种基于三维激光雷达传感器的端到端点云数据压缩方法
CN117280386A (zh) * 2021-04-29 2023-12-22 交互数字专利控股公司 经由tearing transform的基于学习的点云压缩
EP4364416A4 (de) * 2021-07-02 2024-08-07 Beijing Xiaomi Mobile Software Co Ltd Verfahren zur codierung und decodierung einer punktwolke
US11544419B1 (en) 2021-07-26 2023-01-03 Pointlab, Inc. Subsampling method for converting 3D scan data of an object for marine, civil, and architectural works into smaller densities for processing without CAD processing
US20230345016A1 (en) * 2022-04-26 2023-10-26 KDDI Research, Inc. Point cloud encoding device, point cloud decoding device, point cloud encoding method, point cloud decoding method, and program
US20240282011A1 (en) * 2023-02-21 2024-08-22 Tencent America LLC Fix-point implementation of mesh codec

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7224731B2 (en) * 2002-06-28 2007-05-29 Microsoft Corporation Motion estimation/compensation for screen capture video
US8179393B2 (en) * 2009-02-13 2012-05-15 Harris Corporation Fusion of a 2D electro-optical image and 3D point cloud data for scene interpretation and registration performance assessment
US8731313B2 (en) * 2009-03-23 2014-05-20 Level Set Systems, Inc. Method and apparatus for accurate compression and decompression of three-dimensional point cloud data
US9753124B2 (en) * 2009-07-13 2017-09-05 Celartem, Inc. LIDAR point cloud compression
US20110216063A1 (en) * 2010-03-08 2011-09-08 Celartem, Inc. Lidar triangular network compression
GB2477368B (en) 2010-10-11 2011-12-14 Visual Technology Services Ltd Triangle mesh compression
US9488492B2 (en) * 2014-03-18 2016-11-08 Sri International Real-time system for multi-modal 3D geospatial mapping, object recognition, scene annotation and analytics
US9947128B2 (en) * 2013-01-29 2018-04-17 Andrew Robert Korb Methods for improving accuracy, analyzing change detection, and performing data compression for multiple images
US9530225B1 (en) * 2013-03-11 2016-12-27 Exelis, Inc. Point cloud data processing for scalable compression
US9796400B2 (en) * 2013-11-27 2017-10-24 Solfice Research, Inc. Real time machine vision and point-cloud analysis for remote sensing and vehicle control
EP3123399A4 (de) * 2014-03-27 2017-10-04 Hrl Laboratories, Llc System zur filterung, segmentierung und erkennung von objekten in uneingeschränkten umgebungen
EP3195010A4 (de) * 2014-08-15 2018-04-11 Aeye, Inc. Verfahren und systeme zur ladar-übertragung
US9734595B2 (en) 2014-09-24 2017-08-15 University of Maribor Method and apparatus for near-lossless compression and decompression of 3D meshes and point clouds
US20170214943A1 (en) 2016-01-22 2017-07-27 Mitsubishi Electric Research Laboratories, Inc. Point Cloud Compression using Prediction and Shape-Adaptive Transforms
US10482196B2 (en) 2016-02-26 2019-11-19 Nvidia Corporation Modeling point cloud data using hierarchies of Gaussian mixture models
DE102016106472A1 (de) 2016-04-08 2017-10-12 Dr. Ing. H.C. F. Porsche Aktiengesellschaft Verfahren zum Regeln einer Leistungselektronik
US10223810B2 (en) * 2016-05-28 2019-03-05 Microsoft Technology Licensing, Llc Region-adaptive hierarchical transform and entropy coding for point cloud compression, and corresponding decompression
US10694210B2 (en) * 2016-05-28 2020-06-23 Microsoft Technology Licensing, Llc Scalable point cloud compression with transform, and corresponding decompression
CN106504275B (zh) * 2016-10-12 2019-03-05 杭州深瞳科技有限公司 一种惯性定位与点云配准耦合互补的实时三维重建方法
US10462485B2 (en) 2017-09-06 2019-10-29 Apple Inc. Point cloud geometry compression

Also Published As

Publication number Publication date
US10462485B2 (en) 2019-10-29
CN111052189B (zh) 2023-12-15
KR102513867B1 (ko) 2023-03-23
US20200275125A1 (en) 2020-08-27
KR20220025157A (ko) 2022-03-03
US10659816B2 (en) 2020-05-19
CN117808967A (zh) 2024-04-02
US10869059B2 (en) 2020-12-15
CN111052189A (zh) 2020-04-21
KR102362066B1 (ko) 2022-02-14
KR20200035133A (ko) 2020-04-01
WO2019050931A1 (en) 2019-03-14
US20200053391A1 (en) 2020-02-13
US20190075320A1 (en) 2019-03-07

Similar Documents

Publication Publication Date Title
DE112018004878T5 (de) Punktwolkengeometriekomprimierung
DE112018005149T5 (de) Punktwolkenkomprimierung
DE112019002589T5 (de) Tiefenlernsystem
DE602004009591T2 (de) Differenz-codierung durch verwendung eines 3d-graphikprozessors
DE102018125739A1 (de) Dynamische Kalibrierung von Mehrkamerasystemen mithilfe einer Vielzahl von Multi View-Bildrahmen
DE112006003361T5 (de) Verfahren und Vorrichtung für das Aufzeichnen/Anzeigen von dreidimensionalen Formdaten und Verfahren und Vorrichtung für das Messen einer dreidimensionalen Form
CN112215171B (zh) 目标检测方法、装置、设备及计算机可读存储介质
US6697529B2 (en) Data compression method and recording medium with data compression program recorded therein
CN115086660B (zh) 基于点云属性预测的解码、编码方法、解码器及编码器
KR102177247B1 (ko) 조작 이미지 판별 장치 및 방법
DE112021000927T5 (de) Systeme, Verfahren und Vorrichtungen für die Bildverarbeitung
EP3434015A1 (de) Datenkompression mittels adaptiven unterabtastens
EP4258671A1 (de) Verfahren zur vorhersage von punktwolkenattributen, codierer, decodierer und speichermedium
CN117593702B (zh) 远程监控方法、装置、设备及存储介质
CN114462486A (zh) 图像处理模型的训练方法、图像处理方法及相关装置
CN114373162A (zh) 用于变电站视频监控的危险区域人员入侵检测方法及系统
WO2022067775A1 (zh) 点云的编码、解码方法、编码器、解码器以及编解码系统
CN110741635A (zh) 编码方法、解码方法、编码设备和解码设备
CN109697693A (zh) 一种实现基于大数据空间运算的方法
WO2022067776A1 (zh) 点云的解码、编码方法、解码器、编码器和编解码系统
DE102021128522A1 (de) Identifizierung von regeln des netzwerkdatenverkehrs
Guo et al. Single Image Dehazing Using Adaptive Sky Segmentation
DE102021111076A1 (de) Techniken zum skalieren von wörterbuch-basierter komprimierung
CN111667499A (zh) 一种交通信号灯的图像分割方法、装置、设备及存储介质
DE102020206501A1 (de) Verfahren zum Zwischenspeichern von Daten

Legal Events

Date Code Title Description
R012 Request for examination validly filed
R079 Amendment of ipc main class

Free format text: PREVIOUS MAIN CLASS: G06T0017000000

Ipc: G06T0009000000