2011-01-05 20 views
3

Ich habe eine Anwendung geschrieben, die ein Quadrat innerhalb eines Bildes erkennt. Um Ihnen ein gutes Verständnis davon, wie ein solches Bild, wie ein Quadrat enthält, in diesem Fall eine Markierung, könnte wie folgt aussehen:Berechnen der Orientierung eines Quadrats und Anzeigen eines Objekts mit der gleichen Ausrichtung

Was ich bekommen, nach der Erfassung, sind die Koordinaten der vier Ecken von meinem Marker. Jetzt weiß ich nicht, wie ich ein Objekt auf meinem Marker anzeigen soll. Das Objekt sollte die gleiche Drehung/Winkel/Richtung wie der Marker haben.

Gibt es irgendwelche Papiere, wie man das erreicht, irgendwelche Algorithmen, die ich verwenden kann, die bewiesen haben, dass sie ziemlich solide/arbeiten?

Es muss keine funktionierende Lösung sein, es könnte eine einfache Beschreibung sein, wie man das oder etwas ähnliches erreicht. Wenn Sie mich auf eine Bibliothek oder etwas verweisen, sollte es unter Linux funktionieren, Windows wird nicht benötigt, wäre aber großartig, falls ich die Anwendung irgendwann portieren muss. Ich habe schon das ARToolkit angeschaut, aber sie haben Kamera-Parameter-Dateien und komplexere Matrizen, während ich nur die vier Eckpunkte und ein einziges Bild anstelle eines ganzen Video/Kamera-Streams bekommen habe.

+0

Ist Ihre Kamera kalibriert? Wenn nicht, kannst du das tun? Es macht das Problem weit einfacher, wenn Sie es tun (Es ist nur eine Frage der Aufnahme mehrerer Bilder eines Schachbrettmuster und Ausführen von verfügbaren Algorithmen, z. B. von opencv). – etarion

Antwort

0

Es ist ein Quadrat. Es soll in einer Ebene, die normal ist, laugen und wir müssen es finden, weil wir so unser Objekt platzieren müssen. Wir können annehmen, dass alle y-Koordinaten 0 sind und nun haben wir es mit einem Aspektproblem zu tun. Vielleicht könnten wir damit beginnen, es in 0-1-Bereich zu mappen. Der meiste linke Punkt bekommt 0 auf x, am meisten rechts 1, das gleiche wird auf z sein - am nächsten bekommen 0 und am weitesten entfernt. können wir dies durch Überprüfung der Länge der Diagonalen bestimmen. kürzere verbindet Vorder- und Rückseite Punkt und neben der anderen 2. so etwas wie wir

 x z 
left: 0 ? 
right: 1 ? 
front: ? 0 
back: ? 1 

diese Ich denke bekommen? könnte nach Aspekt der Seiten berechnet werden. Die Verwendung von Quadrat vereinfacht das Problem. Wenn 2 Linien, die vorne rechts und vorne links verbinden, gleich sind, sind die z-Werte von links und rechts 0,5. Nun und auf diese Weise können Sie alle 3 Dimensionen und Vektor-Cross-Produkt-Berechnung normal verwenden. Sie könnten dann Ihre Modelle mit y-Achse als Höhe nehmen, berechnen Sie die Matrix, die verwendet wird, um 0,1,0 Vektor in den normalen zu drehen, erhalten Sie, dann zeichnen Sie 2D-Bild und skalieren Sie es richtig. Nun, ich weiß nicht, ob ich dir geholfen habe, vielleicht ist es nicht so, wie es funktioniert, aber ich hoffe, ich habe etwas geschrieben, das nützlich sein kann.

1

Ich glaube, Sie können OpenCV cvGetPerspectiveTransform verwenden, um die Transformation zu finden, die ein Quadrat zu den Ecken des Markers verzerren kann, und dann cvWarpPerspective, um das Bild zu verzerren.