tigger
Semiprofi
Thread Starter
- Mitglied seit
- 01.02.2004
- Beiträge
- 8.496
Hallo,
ich habe ein Projekt, wo ich unter QT zusammen mit C++ Active Shape Models benutze.
Vorerst geht es nur um 2D Polygone, später sollen noch 3D Oberflächen- und Volumendaten mit einbezogen werden.
Das Programm an sich ist eigentlich schon lauffähig, aber ich habe Probleme mit der Plausibilität der Ergebnisse und der Laufzeit.
Das Projekt stammt komplett aus meiner Feder, für die PCA bzw. das Errechnen der Eigenvektoren ist die Bibliothek alglib angebunden.
Es soll anhand der eingehenden Daten das Active Shape Model erstellt, daraus neue Objekte erschaffen und diese wieder an ihre ursprüngliche Position / Rotation zurückgesetzt werden.
Die eingehenden Daten sind von Hand segmentiert, also wird sowohl 2D als auch 3D noch eine Punkt zu Punkt Korrespondenz benötigt.
Für 3D wird auf ICP zurückgegriffen, wobei das momentan noch Brute Force ist mit O(n²).
Für 2D wird für einen Punkt der nächste Nachbar gesucht, dann die Umlaufrichtung des Polygons ähnlich OpenGL anhand der Oberflächennormalen ermittelt und dann alle restlichen Punkte in gleicher Umlaufrichtung abgelaufen.
Hauptpunkte, die optimiert werden sollten, sind die Erstellung der Kovarianzmatrix zur Ermittlung der Modellparameter, hier wird ja z.B. allein für ein Objekt mit 200 Punkten in 3D eine Matrix aufgebaut mit 600² Elementen, die noch ansteigend mit der Anzahl der Datensätze an Komplexität gewinnt.
Außerdem erreicht ICP mit seinem momentanen O(n²) ja auch schnell Komplexitäten jenseits von gut und böse.
Für das Erreichen einer gleichen Punktanzahl werden momentan auf den Zwischenstrecken Punkte eingefügt, bis alle Objekte die gleiche Punktanzahl haben.
Die Hauptfrage wäre, ob ich jemandem hier mal das Projekt zuschicken könnte und der einfach mal drüber schaut, wo noch Potential da ist bzw. ob das Active Shape Model in sich logisch ist.
Die Punkte werden für 2D und 3D als QVector3D abgelegt, ich habe jetzt schon optimiert, dass im Vornherein ermittelt wird, ob alle Objekte 2D-planar sind und lese dann nur x/y Koordinaten ein, das hat wenigstens schonmal einen Leistungsschub gebracht.
Die Logik hinter dem Active Shape Model basiert auf einem Beispiel aus Matlab, welches ich dann Stück für Stück auf mein Projekt adaptiert hab und ursprünglich lieferten die 2 Projekte auch mal gleiche Ergebnisse für einen Testdatensatz mit Handkonturen, bei denen die Punkt zu Punkt Referenz schon stimmte.
Ja, lange Rede gar kein Sinn, falls sich hier jemand findet, kann ich ja noch näher drauf eingehen.
danke
ich habe ein Projekt, wo ich unter QT zusammen mit C++ Active Shape Models benutze.
Vorerst geht es nur um 2D Polygone, später sollen noch 3D Oberflächen- und Volumendaten mit einbezogen werden.
Das Programm an sich ist eigentlich schon lauffähig, aber ich habe Probleme mit der Plausibilität der Ergebnisse und der Laufzeit.
Das Projekt stammt komplett aus meiner Feder, für die PCA bzw. das Errechnen der Eigenvektoren ist die Bibliothek alglib angebunden.
Es soll anhand der eingehenden Daten das Active Shape Model erstellt, daraus neue Objekte erschaffen und diese wieder an ihre ursprüngliche Position / Rotation zurückgesetzt werden.
Die eingehenden Daten sind von Hand segmentiert, also wird sowohl 2D als auch 3D noch eine Punkt zu Punkt Korrespondenz benötigt.
Für 3D wird auf ICP zurückgegriffen, wobei das momentan noch Brute Force ist mit O(n²).
Für 2D wird für einen Punkt der nächste Nachbar gesucht, dann die Umlaufrichtung des Polygons ähnlich OpenGL anhand der Oberflächennormalen ermittelt und dann alle restlichen Punkte in gleicher Umlaufrichtung abgelaufen.
Hauptpunkte, die optimiert werden sollten, sind die Erstellung der Kovarianzmatrix zur Ermittlung der Modellparameter, hier wird ja z.B. allein für ein Objekt mit 200 Punkten in 3D eine Matrix aufgebaut mit 600² Elementen, die noch ansteigend mit der Anzahl der Datensätze an Komplexität gewinnt.
Außerdem erreicht ICP mit seinem momentanen O(n²) ja auch schnell Komplexitäten jenseits von gut und böse.
Für das Erreichen einer gleichen Punktanzahl werden momentan auf den Zwischenstrecken Punkte eingefügt, bis alle Objekte die gleiche Punktanzahl haben.
Die Hauptfrage wäre, ob ich jemandem hier mal das Projekt zuschicken könnte und der einfach mal drüber schaut, wo noch Potential da ist bzw. ob das Active Shape Model in sich logisch ist.
Die Punkte werden für 2D und 3D als QVector3D abgelegt, ich habe jetzt schon optimiert, dass im Vornherein ermittelt wird, ob alle Objekte 2D-planar sind und lese dann nur x/y Koordinaten ein, das hat wenigstens schonmal einen Leistungsschub gebracht.
Die Logik hinter dem Active Shape Model basiert auf einem Beispiel aus Matlab, welches ich dann Stück für Stück auf mein Projekt adaptiert hab und ursprünglich lieferten die 2 Projekte auch mal gleiche Ergebnisse für einen Testdatensatz mit Handkonturen, bei denen die Punkt zu Punkt Referenz schon stimmte.
Ja, lange Rede gar kein Sinn, falls sich hier jemand findet, kann ich ja noch näher drauf eingehen.
danke