Abzählbarkeit von Voxeln in einem Koordinatensytem

Neue Frage »

oXmoX Auf diesen Beitrag antworten »
Abzählbarkeit von Voxeln in einem Koordinatensytem
Hi!

Ich habe leider keine Ahnung, in welches Themengebiet meine Frage gehört, darum setze ich sie mal hier rein.

Ich habe einen 3D-Raum gefüllt mit Voxeln, also kleinen Würfeln, die den Raum als Primitive unterteilen (ähnlich wie Pixel in 2D). Nun möchte ich jedem Voxel einen eindeutigen Integerwert als ID zuweisen, der sich aus seinen Koordinaten (x, y, z) berechnen soll.

Es muss gehen, da die Voxel ja abzählbar sind und vermutlich ist das hier ein total simple Frage.

Gruß,
oXmoX
oXmoX Auf diesen Beitrag antworten »

Ok, grad beim Mittagessen ist es mir eingefallen:

ID = z * SizeY * SizeX + y * SizeX + z

...sollte jedem Voxel eine ID zuweisen, die auf seinem Koordinaten (x, y, z) beruht. SizeX, SizeY und SizeZ sind die Anzahlen der Voxel in der jweiligen Dimension. Die Kenntnis von SizeX, SizeY und SizeZ vereinfacht die Aufgabe zugegebenermaßen.
 
 
Tobias Auf diesen Beitrag antworten »

Du brauchst also eine injektive Abbildung ?

Mit deinem Size kann ich garnichts anfangen. Ist das schon die Lösung?

Wie wärs sonst mit ?
redsun Auf diesen Beitrag antworten »

Wofür brauhst du das denn genau wenn die Frage gestattet ist?
jovi Auf diesen Beitrag antworten »

Zitat:
ID = z * SizeY * SizeX + y * SizeX + z


Du meinst wohl: ID = z * SizeY * SizeX + y * SizeX + x

das entspricht dann etwa dem Schema in einem 3-dim. Feld.
oXmoX Auf diesen Beitrag antworten »

Zitat:
Original von jovi
Du meinst wohl: ID = z * SizeY * SizeX + y * SizeX + x

das entspricht dann etwa dem Schema in einem 3-dim. Feld.


Genau ...eigentlich viel zu simpel für dieses Forum Augenzwinkern ...Aber ich hatte halt grad Mittagspause und wollte unverschämterweise mal andere Köpfe für mich arbeiten lassen.

Zitat:
Wofür brauhst du das denn genau wenn die Frage gestattet ist?


Ich möchte die Voxel-Strukturen in meinem Programm in ein eindimensionales Array schreiben. Das Array ist aus Performancegründen eindimensional.
Ist deine Frage damit beantwortet oder möchtest du tiefere Einblicke?
redsun Auf diesen Beitrag antworten »

Würd mich schon interessieren, was du genau programmierst Augenzwinkern und auch mit welcher Sprache. Hört sich nämlcih recht interessant an ...
oXmoX Auf diesen Beitrag antworten »

Zitat:
Original von redsun
Würd mich schon interessieren, was du genau programmierst Augenzwinkern und auch mit welcher Sprache. Hört sich nämlcih recht interessant an ...


Also ich programmiere ein visuelles Personen-Trackingsystem und zwar mit Delphi 7.0. Dazu stehen mir zwei Kameras zur Verfügung, die in etwa im rechten Winkel angeordnet sind und den selben Teil des Raumes betrachten. Die Kameras sind kalibriert, d.h. sie sind verzerrungsfrei und stehen in einem gemeinsamen Koordinatensystem. Über verschiedene adaptive Hintergrundmodelle bin ich in der Lage, beweget Vordergrundobejkte von statischem Hintergrund zu unterscheiden. D.h. für jedes Kamerabild kann ich die Silhouetten einer bewegten Person bestimmen.

Mein nächster Schritt ist jetzt die Berechnung der Visuellen Hülle. Ist etwas kompliziert zu erklären, aber unter einer visuellen Hülle versteht man das maximale Volumen, auf das man aus den beiden Sihouetten auf den jeweiligen Kamera-Bildebenen schließen kann. Bildhaft kann man sich das so vorstellen. Man baut einen Kegel auf, der durch den Silhouetten-Umriss begrenzt wird und seine Spitze im Brennpunkt der Kamera hat. Da ich ja zwei Kameras habe, habe ich auch zwei Kegel (vorrausgesetzt bei Kameras sehen das Objekt). Ggfs. schneiden sich diese Kegel irgendwo in dem Raum, den die Kameras beide betrachten. Das Schnittvolumen ist dann die visuelle Hülle, in der sich die Person befinden muss.

Kannst du mir noch folgen?

Jetzt kommt der Teil mit den Voxeln. Damit man das Schnittvolumen auch in echtzeit berechnen kann, wird der Raum virtuell in Würfel-Primitive aufgeteilt. In einem Preprocessingschritt wird jedes Voxel einzeln auf jede der beien Kamera-Bildebenen projeziert und die berechnete 2D-Silhouette des Voxels gespeichert. Zur Laufzeit wird dann die Silhouette der Person vor der Kamera mit jeder Voxel-Silhouette aus dem Preprocessing auf Schnitt geprüft. Nur wenn alle Kameras (in dem Fall ja nur zwei) einen Schnitt für das Voxel feststellen, befindet sich die Person offensichtlich innerhalb es Voxels. Sieht eine Kamera keine Überschneidung, so ist das Voxel offenbar leer.

Ich könnte mir vorstellen, dass das obige kaum zu verstehen ist ...aber ich wollte ja nicht unbedingt einen Roman schreiben.

Gruß,
oXmoX
redsun Auf diesen Beitrag antworten »

Nicht schlecht Augenzwinkern ich glaube ich habs einigermaßen verstanden, zumindest Theoretisch.
Wenn cih dich noch weiter mit Fragen löchern dürfte ... wie hast du die Kameras angeschlossen und wie steuerst du sie mit Delphi an? Hab in die Richtung gar keine Erfahrung und würd gern mal wissen, wie man das überhaupt anstellt Augenzwinkern
oXmoX Auf diesen Beitrag antworten »

Ich benutze industrielle FireWire-Kameras. In Windows kann man Capture-Quellen entweder mit Video for Windwos (VfW) oder mit DirectShow (ein Teil von DirectX) ansprechen ...vorrausgestzt der Hersteller liefert WDM-Treiber mit (aber das tun eigentlich alle Hersteller). Wenn du in Delphi mit DirectShow Programmieren willst, dann empfehle ich das Paket DSPack (einfach mal Googeln). Damit hat man dann etwas mehr Kompfort beim Programmieren. Hat mich allerdings schon einiges an Einarbeitungszeit gekostet, da ich einiges über die Standardfunktionalität hinaus benötigt habe und selber Direct-Show-Filter connecten musste. Ansonsten kommt man aber sehr schnell zu ersten Ergebnissen.
redsun Auf diesen Beitrag antworten »

kk danke dir, werd ich mir mal anschaun und gucken ob ich schlau draus werde Augenzwinkern
Neue Frage »
Antworten »



Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »