Frage

Hey Mathe-Aussenseiter, ich habe ein Problem, das mich für eine Weile jetzt gewesen ist stumping. Es ist für ein persönliches Projekt.

Ich habe drei Punkte bekommt: rot, grün und blau. Sie sind auf einem Karton Slip so positioniert, dass der rote Punkt in der unteren linken Seite (0,0), der blaue Punkt ist in der unteren rechten Ecke (1,0), und der grüne Punkt ist in der oberen linken Ecke. Stellen Sie sich vor Schritt zurück und ein Bild von der Karte aus einem Winkel nehmen. Wenn Sie das Zentrum eines jeden Punktes im Bild finden waren (sagen wir mal die Einheiten sind Pixel), wie würden Sie den Normalvektor der Karte Gesicht im Bild (relativ zur Kamera) finden?

Jetzt ein paar Dinge, die ich über dieses Problem aufgriff:

  1. Die Punkte (in "real life") sind immer im rechten Winkel. Auf dem Bild sind sie nur in einem rechten Winkel, wenn die Kamera um den roten Punkt entlang einer „Achse“ gedreht wurde (Achse der Linie erstellt von den roten und blauen oder roten und grünen Punkten).
  2. Es gibt Punkte auf nur einer Seite der Karte. So wissen Sie, werden Sie nie an der Rückseite davon suchen werden.
  3. Der Abstand der Karte in die Kamera, ist irrelevant. Wenn ich die Tiefe jeden Punkt weiß, wäre dies sehr viel einfacher sein (nur ein einfaches Kreuzprodukt, nicht wahr?).
  4. Die Drehung der Karte ist irrelevant, was ich suche. In der Bastelei, dass ich diese, um herauszufinden, um zu versuchen, getan habe, kann die Drehung mit Hilfe des Normalvektors am Ende gefunden werden. Unabhängig davon, ob die Rotation ist ein Teil (oder ein Produkt), um den normalen Vektor zu finden, ist mir nicht bekannt.

Hope gibt es jemanden da draußen, die diese entweder getan oder ist ein Mathegenie. Ich habe zwei meiner Freunde hier haben mir geholfen drauf und we've - so weit -. War nicht erfolgreich

War es hilfreich?

Lösung

ich es funktionierte in meiner alten Version von MathCAD aus:

Edit: Wording falsch Screenshot MathCAD: "Bekannte: g und b sind senkrecht miteinander"

In MathCAD i vergessen, den letzten Schritt des Kreuzprodukt zu tun, was ich werde hier aus meiner früheren Antwort copy-paste:

  

Jetzt haben wir für die X-Y-Z von der gelöst   übersetzt g und b Punkte, Ihre   Original Frage wollte die normalen von   die Ebene.

     

Wenn Quer g x b , wir bekommen die   Vektor normal zu beiden:

        | u1  u2  u3 |
g x b = | g1  g2  g3 |
        | b1  b2  b3 |  

      = (g2b3 - b2g3)u1 + (b1g3 - b3g1)u2 + (g1b2 - b1g2)u3
     

Alle Werte bekannt sind, stecken Sie sie in   (Ich werde nicht die Version mit g3 schreiben   und b3 substituiert, da es nur   zu lang und hässlich sein nützlich.

Aber in der Praxis, ich glaube, Sie werden es numerisch lösen müssen, die Anpassung g z und b z , um am besten passen die Bedingungen:

  

g · b = 0

und

  

| g | = | b |

Da die Pixel nicht algebraisch perfektionieren.

Beispiel

ein Bild der Astronauten 13 Apollo Mit Rigging eines des quadratischen Lithiumhydroxid cannister des Befehlsmodul an der Arbeit in der LEM, i die Ecken:

Mit ihnen als meine Basis für eine X-Y-Ebene:

i aufgezeichnet, die Pixelort mit Photoshop, mit positiven X nach rechts, und positivem Y nach unten (die rechten Regel von Z gehen zu halten " in " das Bild):

  

g = (79,5, -48,5, g z )

     

b = (-110,8, -62,8, b z )

Stanzen der beiden Formeln in Excel starten, und mit Hilfe der Analyse Toolpack auf " minimiert " der Fehler durch Einstellen g z und b z , es kam mit zwei Z-Werten nach oben:

  

g = (79,5, -48,5, 102,5)

     

b = (-110,8, -62,8, 56,2)

Was dann lässt mich calcuate andere interessante Werte.

Die Länge von g und b in Pixel:

  

| g | = 138,5

     

| b | = 139,2

Der Normalvektor:

  

g x b = (3710, -15.827, -10.366)

Das Gerät normal (Länge 1):

  

u N = (0,1925, -0,8209, -0,5377)

Skalierung normal gleiche Länge (in Pixel) als g und b (138,9):

  

Normal = (26,7, -114,0, -74,7)

Nun, da ich die normalen, die die gleiche Länge wie ist g und b , i aufgetragen sie auf das gleiche Bild:

ich denke, du werde ein neues Problem haben: Verzerrung, die durch die Kameralinse eingeführt. Die drei Punkte nicht perfekt auf die 2-dimensionale photographische Ebene projizieren. Es gibt eine sphärische Verzerrung, die keine geraden Linien macht mehr gerade, macht gleich lange nicht mehr gleich, und macht die Normalen etwas weg von normal.

Microsoft Forschung hat einen Algorithmus figure, wie für die Kamera-Verzerrung zu korrigieren:

Eine flexible neue Technik für die Kamerakalibrierung

Aber es ist mir schleier:

  

Wir schlagen eine flexible neue Technik   leicht eine Kamera kalibrieren. Es ist gut   ohne spezialisiert für den Einsatz   Kenntnis der 3D-Geometrie oder Computer   Vision. Die Technik erfordert nur   die Kamera ein ebenes Muster zu beobachten,   gezeigt, auf einige (mindestens zwei)   unterschiedliche Ausrichtungen. Entweder   Kamera oder das planare Muster kann sein   frei bewegt. Die Bewegung muss nicht sein   bekannt. Radial Linsenverzerrung   modelliert. Das vorgeschlagene Verfahren   besteht aus einer Lösung geschlossener Form,   durch eine nichtlineare Verfeinerung gefolgt   basierend auf dem Maximum-Likelihood   Kriterium. Sowohl Computersimulation   und reale Daten wurden Test verwendet   die vorgeschlagene Technik, und sehr gut   Ergebnisse wurden erzielt. Verglichen   mit klassischen Techniken, die Verwendung   teure Ausrüstungen wie zwei oder   drei orthogonalen Ebenen, die vorgeschlagene   Technik ist einfach und flexibel zu bedienen.   Es geht 3D-Computer-Vision ein   Schritt von der Laborumgebungen   reale Welt Verwendung.

Sie haben ein Beispielbild, in dem Sie die Verzerrung sehen:


(Quelle: microsoft.com )

Hinweis

  • Sie wissen nicht, ob Sie die „top“ des Kartons sind zu sehen, oder die „unten“, also die normale vertikal gespiegelt werden könnte (das heißt z = -z)

Update

gefunden Guy einen Fehler in den abgeleiteten algebraischen Formeln. Befestigung an Formeln führt, dass ich glaube nicht, hat eine einfache geschlossene Form. Das ist nicht so schlimm, da es nicht genau ohnehin gelöst werden kann; aber numerisch.

Hier ist ein Screenshot von Excel, wo ich mit den beiden knowns Regeln starten:

  

g · b = 0

und

  

| g | = | b |

die 2. ein als Differenz Schreiben (ein „Fehler“ amount), können Sie dann beide addieren und diesen Wert als Nummer verwenden, die Excel-Solver haben minimieren :

alt text

Das heißt, Sie werden Ihre eigenen numerischen iterativen Solver schreiben. Ich starre auf meine Numerische Methoden für Ingenieure Lehrbuch von der Universität; Ich weiß, es Algorithmen enthält rekursiven Gleichungen ohne einfache geschlossene Form zu lösen.

Andere Tipps

Von den Klängen von ihm haben Sie drei Punkte p 1 , p 2 und p 3 eine Ebene definiert, und Sie wollen den Normalvektor zur Ebene finden.

Darstellen der Punkte als Vektoren vom Ursprung, eine Gleichung für einen Normalvektor wäre
n = ( p 2 - p 1 ) x ( p 3 - p 1 )
(Wobei x das Kreuzprodukt der beiden Vektoren)

Wenn Sie den Vektor zu Punkt nach außen von der Front wollen der Karte, dann ala die rechte Hand-Regel-Set
p 1 = rot (unten links) Punkt
p 2 = blau (unten rechts) Punkt
p 3 = grün (oben links) dot

@ Ian Boyd ... mochte ich Ihre Erklärung, nur habe ich auf Schritt stecken 2, wenn Sie sagte zu lösen für b z . noch haben Sie b z in Ihrer Antwort, und ich glaube nicht, sollten Sie b z in Ihrem Antwort ...

b z sein sollte +/- Quadratwurzel von g x 2 + g < sub> y 2 + g z 2 - b x 2 - b y 2

Nachdem ich das selbst tat, fand ich es sehr schwer zu ersetzen b z in die erste Gleichung, wenn man für g gelöst z , denn wenn Substitution b z , würden Sie jetzt bekommen:

  

g z = - (g x b x + g y b y ) / sqrt (g x 2 + g y 2 + g z 2 - b x 2 - b y 2 )

Der Teil, der dies schwierig macht, ist, dass es g z in der Quadratwurzel, so dass Sie es trennen müssen und kombinieren Sie die g z zusammen und lösen für g z Was habe ich, glaube ich nicht nur so, wie ich es gelöst war richtig, denn wenn ich schrieb mein Programm zu berechnen g z für mich, ich verwende, um Ihr g x und g y Werte zu sehen, ob meine Antwort mit Ihnen abgestimmt, und es kam nicht.

Also ich frage mich, ob Sie mir helfen könnten, weil ich das wirklich für eine meiner Projekte zur Arbeit benötigen. Dank!

Just Denken auf meine Füße hier.

Ihre wirksame Eingänge sind das scheinbare Verhältnis RB / RG [+], der scheinbare Winkel BRG und der Winkel, (sagen wir) RB Marken mit dem Bildschirm-Koordinate y-Achse (tat ich vermisse nichts). Sie müssen Sie die Komponenten des normalisierten normal (heh!) Vektor, der ich glaube, nur zwei unabhängige Werte ist (auch wenn man mit einer von vorne nach hinten Mehrdeutigkeit gelassen werden, wenn die Karte durchschauen ist). [++]

So vermute ich, dass dies möglich ist ...

Von hier aus ich auf der Annahme arbeiten, dass die scheinbare Winkel von RB ist immer 0, und wir können die Endlösung um die z-Achse später drehen.

Starten Sie mit der Karte, die parallel zu der Betrachtungsebene und orientiert in der „natürlichen“ Weg (das heißt Sie obere gegen untere und links gegen rechts Zuweisungen eingehalten werden). Wir können durch Drehen von \theta um die anfängliche x-Achse (für -\pi/2 < \theta < \pi/2), dann Drehen von \phi herum anfängliche y-Achse (für -\pi/2 < \phi < \pi/2) alle interessanten Positionen der Karte zu erreichen. Beachten Sie, dass wir die scheinbare Richtung des RB Vektor bewahrt haben.

Im nächsten Schritt berechnet das scheinbare Verhältnis und die scheinbaren Winkel nach in Bezug auf \theta und \phi und invertieren das Ergebnis. [+++]

Die normale wird R_y(\phi)R_x(\theta)(0, 0, 1) für R_i die primitive Rotationsmatrix um die Achse i sein.

[+] Die absoluten Längen zählen nicht, denn das sagt Ihnen, nur die Entfernung zur Karte.

[++] Eine weitere Annahme:., Dass der Abstand von der Karte auf Ansichtsebene ist viel groß als die Größe der Karte

[+++] Hier wird die Projektion Sie verwenden, um von drei-D-Raum auf die Betrachtungsebene Angelegenheiten. Dies ist der schwierige Teil, aber nicht etwas, was wir für Sie tun können, wenn Sie sagen, was Projektion Sie verwenden. Wenn Sie eine echte Kamera verwenden, dann ist dies eine perspektivische Projektion und ist im Wesentlichen jedes Buch auf 3D-Grafik abgedeckt.

rechts, wird der Normalvektor nicht durch die Entfernung ändern, aber der Vorsprung des Kartons auf einem Bild hat Wechsel nach Entfernung (einfach: Wenn Sie eine kleine Karton, ändert sich nichts. Wenn Sie eine Karton 1 Meile breit und 1 Meile hoch und Sie drehen es so, dass eine Seite näher und die andere Seite mehr weit entfernt ist die nahe Seite vergrößert und die andere Seite auf dem Bild verkürzt. Sie können das sofort sehen, dass ein Rechteck kein Rechteck bleibt, sondern ein Trapez)

Die meist genaue Art und Weise für kleine Winkel und die Kamera auf der Mitte zentriert ist das Verhältnis der Breite / Höhe zwischen „normalen“ Bild und Winkelbild auf den mittleren Linien zu messen (weil sie nicht verzogen werden).

Wir definieren x wie links nach rechts, y wie unten nach oben, z wie von Ferne in der Nähe.

Dann
x = arcsin (measuredWidth / normWidth) rot-blau
y = arcsin (measuredHeight / normHeight) rot-grün
z = sqrt (1,0-x ^ 2-y ^ 2)

werde ich morgen eine genauere Lösung berechnen, aber ich bin jetzt zu müde ...

könnten Sie u, v, n co-oridnates. Legen Sie Ihre Sicht auf die Position der „Augen“ oder „Kamera“ ist, dann Übersetzungs x, y, z-Koordinaten zu u, v, n. Von dort können Sie die Normalen sowie Perspektive und Sichtflächen bestimmen, ob Sie wollen (u ‚v‘, n '). Auch bedenken, dass 2D = 3D mit z = 0. Schließlich stellen Sie sicher, verwenden Sie homogene Koordinaten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top