Umrechn. v. Punkt in Foto < Sonstiges < Lineare Algebra < Hochschule < Mathe < Vorhilfe
|
Hallo alle,
seit Tagen versuche ich mich schon an der Lösung dieser Aufgabe.
Habe in einem Forum für C# nachgefragt, musste aber erkennen, dass wohl mehr Mathekenntnisse erforderlich sind.
Ich habe diese Frage auch in folgenden Foren auf anderen Internetseiten gestellt:
CSharp - Forum
Mein Fachabi ist schon 30 Jahre her und ich komme nicht weiter.
Es gibt eine Möglichkeit mit 4 Punktepaaren (real / Bildpixel) die Matrix zu ermitteln, wie das Bild dargestellt wird. Um dann mittels Pixel (x,y) auf real (x,y) umzurechnen. Ich finde sie aber nicht.
Es soll nicht 3D sein. Auch kann als Bedingung sein, dass die Punkte in die Eckpunkte eines waagerecht liegenden Rechtecks (Fenter/ Fliesen) sind.
Für Hilfe wäre ich dankbar. (Meine Mathe ist ein wenig eingerostet ;) )
Gruß Robert
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:21 So 12.07.2009 | Autor: | rabilein1 |
Du hast ein Foto von deinen Fliesen gemacht.
Du kennst die Pixel-Koordinaten der Fliesen auf dem Foto und du kennst die Maße der Fliesen in Real.
So ganz ist mir nicht klar, was du nun suchst.
Was willst du umrechnen?
Z.B. 30 cm Fliesen entsprechen 300 Pixel. Wie viele Pixel sind dann 1 cm in Real?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 23:31 So 12.07.2009 | Autor: | Robertico |
Hallo rabilein1,
LinksOben sind es z.B 30 Pixel/Fliese
LinksUnten 27
RechtsOben 12
...
...
Gruß Robert
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 23:42 So 12.07.2009 | Autor: | leduart |
Hallo
Du hast 2 Vektoren in Real oder Urbild, und 2 abgebildete im Bild.
sagen wir [mm] \vektor{a \\ b}, \vektor{c \\ d} [/mm] im Urbild,
[mm] \vektor{A \\ B}, \vektor{C\\ D} [/mm] im Bild.
Am einfachst waere es du hast [mm] \vektor{a \\ b}=\vektor{1 \\ 0}
[/mm]
[mm] \vektor{c \\ d}=\vektor{0 \\ 1}
[/mm]
Dann ist deine Matrix die Urbild nach Bild abbildet einfach
Da deine Urbilder ja senkrecht stehen, kannst du sie leicht so machen
[mm] M=\pmat{ A & C \\ B & D }
[/mm]
umgekehrt entsprechend.
bzw, die inverse matrix dazu.
so einfache matrizen zu invertieren gibts im Netz Prograemmchen, wenn dus nicht mehr kannst.
Suchst du sowas?
Gruss leduart
|
|
|
|
|
Hallo leduart,
so einfach kann es nicht sein. Alle existierenden Programme brauchen 4 Referenzpunkte um daraus Berechnungen anstellen zu können.
Das Foto ist ja in alle drei Ebenen gedreht. Also muss ich wissen, wie steht diese Ebene (Wand) im Koordinatensystem.
Zur Veranschaulichung: Ganz unten eine PDF mit einer Erklärung wie es gehen soll
Gruß Robert
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 00:10 Mo 13.07.2009 | Autor: | leduart |
Hallo
Mit den Vektoren hab ich die Verbindungsvektoren der Punkte gemeint. also (a,b)=P1P2
Dein link funktioniert nicht!
Gruss leduart
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:15 Mo 13.07.2009 | Autor: | Robertico |
Hallo,
dass der Link nicht funktioniert habe auch gerade ich gemerkt. Suche danach.
Gruß Robert
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:23 Mo 13.07.2009 | Autor: | felixf |
Hallo Robert,
> so einfach kann es nicht sein. Alle existierenden Programme
> brauchen 4 Referenzpunkte um daraus Berechnungen anstellen
> zu können.
es ist auch nicht so einfach. Die Abbildung, die man invertieren will, ist schliesslich durch eine perspektivische Transformation entstanden und nicht durch eine affin-lineare Abbildung.
> Zur Veranschaulichung:
> Ganz unten eine PDF mit einer Erklärung wie es gehen soll
Verlink bitte direkt das PDF, so ist voellig unklar was du meinst.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:51 Mo 13.07.2009 | Autor: | Robertico |
Hallo Felix,
war ein wenig zu hektisch, da ich schon lange nach einer Lösung suche.
Leider ein Google-Link, aber die PDF
Gehe jetzt gleich zu Bett. Ist aber traozdem wichtig.
Gruß Robert
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 01:03 Mo 13.07.2009 | Autor: | felixf |
Hallo!
> Es gibt eine Möglichkeit mit 4 Punktepaaren (real /
> Bildpixel) die Matrix zu ermitteln, wie das Bild
> dargestellt wird. Um dann mittels Pixel (x,y) auf real
> (x,y) umzurechnen. Ich finde sie aber nicht.
> Es soll nicht 3D sein. Auch kann als Bedingung sein, dass
> die Punkte in die Eckpunkte eines waagerecht liegenden
> Rechtecks (Fenter/ Fliesen) sind.
Erstmal: reine Matrizenrechnung reicht hier nicht aus. Du musst mit homogenen Koordinaten arbeiten, um das ganze auf Matrizenrechnung zu reduzieren.
Erstmal hast du vier Punkte, naemlich $(0, 0)$, $(1,0)$, $(0, 1)$ und $(1, 1)$ im Quellkoordinatensystem, die deinen vier gegebenen Punkten im Zielkoordinatensystem entsprechen sollen. In homogenen Koordinaten ausgedrueckt hast du die vier Vektoren [mm] $v_1 [/mm] = (0, 0, 0, 1)$, [mm] $v_2 [/mm] = (1, 0, 0, 1)$, [mm] $v_3 [/mm] = (0, 1, 0, 1)$, [mm] $v_4 [/mm] = (1, 1, 0, 1)$. Diese sind linear abhaengig, je drei davon allerdings nicht.
Seien jetzt [mm] $P_1, \dots, P_4$ [/mm] die transformierten Punkte und [mm] $P_1', \dots, P_4'$ [/mm] die homogenen Versionen (also mit $0, 1$ hinten angehaengt). Gesucht ist also eine Transformationsmatrix mit $L(A [mm] v_i) [/mm] = [mm] L(P_i')$, [/mm] wobei $L$ die lineare Huelle ist (anders gesagt: die Gerade, die durch den Ursprung und den Punkt im [mm] $\IR^4$ [/mm] geht) -- insbesondere gibt es also Konstanten [mm] $\lambda_1, \dots, \lambda_4 \in \IR \setminus \{ 0 \}$ [/mm] mit $A [mm] v_i [/mm] = [mm] \lambda_i P_i'$. [/mm] Und $A$ sollte invertierbar sein.
Einfach das Gleichungssystem $A [mm] v_i [/mm] = [mm] P_i'$ [/mm] zu betrachten, $i = 1, [mm] \dots, [/mm] 4$ reicht also nicht aus, da die [mm] $v_i$ [/mm] linear abhaengig sind. (Wenn schon muss man $A [mm] v_i [/mm] = [mm] \lambda_i P_i'$ [/mm] betrachten; passende Wahlen fuer die [mm] $\lamda_i$ [/mm] kann man aus den Abhaengigkeitsgleichungen zwischen den [mm] $v_i$ [/mm] und [mm] $P_i'$ [/mm] erhalten.)
Wenn man die Matrix $A$ hat, kann man zumindest wie folgt umrechnen:
Ist $P = (x, y)$ ein Punkt aus dem Foto, so kann man $(a, b, c, d) = [mm] A^{-1} [/mm] (x, y, 0, [mm] 1)^T$ [/mm] berechnen und dann $(a/d, b/d, c/d, 1)$ anschauen. Es ist dann $c/d = 0$, und der gesuchte Punkt in der Ebene ist $(a/d, b/d)$; das ist dann in der Ebene, in der $(0, 0)$, $(1, 0)$, $(0, 1)$ und $(1, 1)$ die vorgegebenen Punkte sind.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 01:45 Mo 13.07.2009 | Autor: | felixf |
Hallo!
> Einfach das Gleichungssystem [mm]A v_i = P_i'[/mm] zu betrachten, [mm]i = 1, \dots, 4[/mm]
> reicht also nicht aus, da die [mm]v_i[/mm] linear abhaengig sind.
> (Wenn schon muss man [mm]A v_i = \lambda_i P_i'[/mm] betrachten;
> passende Wahlen fuer die [mm]\lamda_i[/mm] kann man aus den
> Abhaengigkeitsgleichungen zwischen den [mm]v_i[/mm] und [mm]P_i'[/mm]
> erhalten.)
Das passende Stichwort dazu (aus dem PDF, was du verlinkt hast): Direkte Lineare Transformation.
LG Felix
|
|
|
|
|
Hallo Felix,
ich weiss, dass es nicht üblich ist, jemandem in Foren etwas vorzukauen. Möchte Dich aber bitten in diesem Fall eine Ausnahme zu machen.
Wenn Du mir den Rechenweg aufzeigst, wie ich aus diesen Punkten:
<point info="OL">
<world x="0" y="1458" z="0"/>
<img x="106" y="923"/>
</point>
<point info="UL">
<world x="0" y="0" z="0"/>
<img x="235" y="2063"/>
</point>
<point info="UR">
<world x="4010" y="0" z="0"/>
<img x="2583" y="1595"/>
</point>
<point info="OR">
<world x="4010" y="1458" z="0"/>
<img x="2616" y="820"/>
</point>
(Das sind die gemessenen Punkte, die das Rechteck der Fliesen beschreiben)
an diese Punkte komme, wobei ja die Weldkoordinaten nicht bekannt sind:
<point info="GOL">
<world x="1262" y="1788" z="0"/>
<img x="1119" y="630"/>
</point>
<point info="GOR">
<world x="2023" y="1788" z="0"/>
<img x="1625" y="625"/>
</point>
(Das sind die Punkte für die Fliesen der Dunstabzugshaube.)
Dann würde mir das sicher helfen.
Gruß Robert
[Dateianhang nicht öffentlich]
Dateianhänge: Anhang Nr. 1 (Typ: JPG) [nicht öffentlich]
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 07:02 Di 14.07.2009 | Autor: | felixf |
Hallo Robert,
> ich weiss, dass es nicht üblich ist, jemandem in Foren
> etwas vorzukauen. Möchte Dich aber bitten in diesem Fall
> eine Ausnahme zu machen.
mach ich :) Dafuer bitte ich dann darum, dass du mir (und Al, ich kann mir vorstellen dass ihn das auch interessiert) eine private Nachricht schreibst und uns erzaehlst wofuer du das genau brauchst (Hobby? Beruf? ...?) bzw. wer (oder was) dich dazu gebracht hat so etwas zu programmieren. Ich bin halt von Natur aus sehr neugierig
> Wenn Du mir den Rechenweg aufzeigst, wie ich aus diesen
> Punkten:
> <point info="OL">
> <world x="0" y="1458" z="0"/>
> <img x="106" y="923"/>
> </point>
Ich nehme an, der world-Tag enthaelt die Koordinaten, die das Objekt in der Ebene haben soll (also mit den schoenen zweidimensionalen, unverzerrten Koordinaten mit denen du arbeiten willst) und der img-Tag enthaelt die Koordinaten, die das Objekt auf dem Foto haben soll.
> (Das sind die gemessenen Punkte, die das Rechteck der
> Fliesen beschreiben)
>
> an diese Punkte komme, wobei ja die Weldkoordinaten nicht
> bekannt sind:
> <point info="GOL">
> <world x="1262" y="1788" z="0"/>
> <img x="1119" y="630"/>
> </point>
>
> <point info="GOR">
> <world x="2023" y="1788" z="0"/>
> <img x="1625" y="625"/>
> </point>
>
> (Das sind die Punkte für die Fliesen der
> Dunstabzugshaube.)
Hier stehen ja auch Zahlen sowohl fuer Welt- wie auch Bildkoordinaten; ich vermute mal eigentlich sind nur die Bild-Koordinaten gegeben und die Welt-Koordinaten gesucht (und du hast sie nur dazugeschrieben damit man evtl. Ergebnisse ueberpruefen kann)? Wenn dies bereits die Welt-Koordinaten sind, wie hast du sie ausgerechnet? Oder hast du sie gemessen bzw. geschaetzt?
In dem unten gehe ich immer davon aus, dass die z-Welt-Koordinate 0 ist (und ignoriere sie damit einfach). Zu dem Problem eine Anmerkung: es ist relativ egal, ob man eine Matrix sucht die Welt- in Bildkoordinaten oder Bild- in Weltkoordinaten umwandelt. Deswegen werde ich von nun an von Quell- und Zielkoordinaten sprechen, die beide homogene Koordinaten im [mm] $\IR^3$ [/mm] sind, und wir suchen eine Matrix, die Quell- in Zielkoordinaten ueberfuehrt (bis auf skalare Vielfache).
Wir haben also $n$ mal zwei Punkte im [mm] $\IR^3$ [/mm] gegeben (in der Form $(x, y, 1)$), sagen wir [mm] $v_i, w_i \in \IR^3$, [/mm] und wir suchen eine Matrix $A [mm] \in \IR^{3 \times 3}$ [/mm] und Skalare [mm] $\lambda_i \in \IR \setminus \{ 0 \}$ [/mm] mit $A [mm] v_i [/mm] = [mm] \lambda_i w_i$, [/mm] $1 [mm] \le [/mm] i [mm] \le [/mm] n$. Wir setzen voraus, das alle [mm] $v_i$ [/mm] und [mm] $w_i$ [/mm] nicht die Nullvektoren sind.
Wenn du dann weitere Punkte in Quellkoordinaten hast, etwa $(x, y)$, und diese in Zielkoordinaten haben willst, berechnest du [mm] $\vektor{ a \\ b \\ c } [/mm] = A [mm] \vektor{ x \\ y \\ 1 }$ [/mm] und der Zielpunkt ist $( [mm] \frac{a}{c}, \frac{b}{c} [/mm] )$. (Falls du nicht mehr weisst, wie Matrizenmultiplikation genau funktioniert, schau z.B. hier.)
Uebrigens, noch ein Hinweis: wenn $L$ eine Gerade ist in Quellkoordinaten, und du jeden einzelnden Punkt der Gerade durch diese obige Abbildung abbilden wuerdest, wuerde die Menge der Zielpunkte wieder eine Gerade sein. Sprich: wenn du von einer Gerade zwei Punkte kennst, reicht es diese Punkte zu transformieren und wieder eine Gerade durch diese beiden Punkte zu legen, um zu sehen, wie die ganze Gerade transformiert werden wuerde.
So, aber nun zurueck zum Problem. Ich beschreibe hier im Endeffekt was auch in diesem Wikipedia-Artikel steht, insbesondere mit Abschnitt ''Example $p = 3$''.
Zu einem Vektor $a = [mm] (a_1, a_2, a_3)$, [/mm] definiere [mm] $[a]_\times [/mm] := [mm] \pmat{ 0 & -a_3 & a_2 \\ a_3 & 0 & -a_1 \\ -a_2 & a_1 & 0 }$; [/mm] dann gilt [mm] $[a]_\times [/mm] b = a [mm] \times [/mm] b$ (Kreuzprodukt) fuer alle Vektoren $a, b [mm] \in \IR^3$.
[/mm]
Wenn man nun die Gleichung [mm] $\lambda_i w_i [/mm] = A [mm] v_i$ [/mm] von Links mit [mm] $[w_i]_\times$ [/mm] multipliziert, erhaelt man [mm] $\lambda_i [w_i]_\times w_i [/mm] = [mm] [w_i]_\times [/mm] A [mm] v_i$. [/mm] Nun ist [mm] $w_i \times w_i [/mm] = 0$ (Eigenschaft vom Kreuzprodukt), weswegen auf der linken Seite der Nullvektor steht -- insbesondere kommt [mm] $\alpha_i$ [/mm] nicht mehr vor. Man erhaelt also das lineare Gleichungssystem [mm] $[w_i]_\times [/mm] A [mm] v_i [/mm] = 0$; die Variablen hier sind die Koeffizienten von $A$, und man hat drei Gleichungen (wenn man die linke Seite ausmultipliziert bekommt man einen Vektor mit drei Komponenten). Wie in dem Wikipedia-Artikel beschrieben, hat die Matrix [mm] $[w_i]_\times$ [/mm] Rang 2 (da [mm] $w_i \neq [/mm] 0$), womit es reicht (die richtigen) zwei der drei Gleichungen zu nehmen. Man kann aber auch einfach alle drei nehmen.
(Da unser Vektor [mm] $w_i$ [/mm] die Form [mm] $\vektor{ x \\ y \\ 1 }$ [/mm] hat kann man die ersten beiden Gleichungen nehmen, also anstelle [mm] $[w_i]_\times$ [/mm] die Matrix [mm] $\pmat{ 0 & -1 & y \\ 1 & 0 & -x }$ [/mm] nehmen; diese hat Rank 2.)
So bekommt man dann $3 [mm] \cdot [/mm] n$ lineare Gleichungen (wenn man die offensichtlich linear Abhaengigen streicht, sind es nur noch $2 [mm] \cdot [/mm] n$) in den Koeffizienten von $A$; dieses Gleichungssystem loest man einfach. Du hast $n = 4$ Punkte, womit man $2 [mm] \cdot [/mm] 4 = 8$ Gleichungen hat fuer die 9 Eintraege von $A$, d.h. $A$ ist nicht eindeutig (was aber keine Ueberraschung ist, da ein skalares Vielfaches von $A$ ebenfalls eine Loesung von dem Problem ist). Man nimmt also irgend eine Loesung (wo nicht alle Koeffizienten 0 sind), und diese tut ihren Dienst.
Ich habe das ganze auch als C++-Programm implementiert; es liefert auch aehnliche Werte wie die, die du angegeben hast. (Da sie nur fast uebereinstimmen, wuerd mich interessieren woher du deine Werte hast.) Ich habe den Quelltext angehaengt, du kannst es beliebig verwenden.
LG Felix
Dateianhänge: Anhang Nr. 1 (Typ: cpp) [nicht öffentlich]
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 07:14 Di 14.07.2009 | Autor: | felixf |
Hallo Robert und alle anderen Interessierten!
Falls es jemand interessiert, hier die Ausgaben des Programms:
1: | The linear equations:
| 2: | 0 a_00 + 0 a_01 + 0 a_02 + 106 a_10 + 923 a_11 + 1 a_12 + -154548 a_20 + -1.34573e+06 a_21 + -1458 a_22 = 0
| 3: | -106 a_00 + -923 a_01 + -1 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 0 a_22 = 0
| 4: | 0 a_00 + 0 a_01 + 0 a_02 + 235 a_10 + 2063 a_11 + 1 a_12 + 0 a_20 + 0 a_21 + 0 a_22 = 0
| 5: | -235 a_00 + -2063 a_01 + -1 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 0 a_22 = 0
| 6: | 0 a_00 + 0 a_01 + 0 a_02 + 2583 a_10 + 1595 a_11 + 1 a_12 + 0 a_20 + 0 a_21 + 0 a_22 = 0
| 7: | -2583 a_00 + -1595 a_01 + -1 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 1.03578e+07 a_20 + 6.39595e+06 a_21 + 4010 a_22 = 0
| 8: | 0 a_00 + 0 a_01 + 0 a_02 + 2616 a_10 + 820 a_11 + 1 a_12 + -3.81413e+06 a_20 + -1.19556e+06 a_21 + -1458 a_22 = 0
| 9: | -2616 a_00 + -820 a_01 + -1 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 1.04902e+07 a_20 + 3.2882e+06 a_21 + 4010 a_22 = 0
| 10: |
| 11: | The linear equations:
| 12: | 1 a_00 + 0 a_01 + 0 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + -0.99118 a_22 = 0
| 13: | 0 a_00 + 1 a_01 + 0 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 0.11216 a_22 = 0
| 14: | 0 a_00 + 0 a_01 + 1 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 1.54155 a_22 = 0
| 15: | 0 a_00 + 0 a_01 + 0 a_02 + 1 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 0.235721 a_22 = 0
| 16: | 0 a_00 + 0 a_01 + 0 a_02 + 0 a_10 + 1 a_11 + 0 a_12 + 0 a_20 + 0 a_21 + 1.18264 a_22 = 0
| 17: | 0 a_00 + 0 a_01 + 0 a_02 + 0 a_10 + 0 a_11 + 1 a_12 + 0 a_20 + 0 a_21 + -2495.17 a_22 = 0
| 18: | 0 a_00 + 0 a_01 + 0 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 1 a_20 + 0 a_21 + 0.000130196 a_22 = 0
| 19: | 0 a_00 + 0 a_01 + 0 a_02 + 0 a_10 + 0 a_11 + 0 a_12 + 0 a_20 + 1 a_21 + 4.40388e-05 a_22 = 0
| 20: | Rank is 8
| 21: | The matrix A:
| 22: | 0.99118 -0.11216 -1.54155
| 23: | -0.235721 -1.18264 2495.17
| 24: | -0.000130196 -4.40388e-05 1
| 25: | Point 1 has world coordinates (1254.5, 1798.21)
| 26: | Point 2 has world coordinates (2022.62, 1804.4) |
Die letzten beiden Zeilen konvertieren die beiden weiteren Punkte, die Robert gegeben hat, von Bild- in Weltkoordinaten und geben die Weltkoordinaten aus. Diese sind recht nah bei denen, die Robert angegeben hat.
Und Robert, du kannst auch gern aus dem anderen Thread bei myCSharp.de auf diesen Thread verlinken, damit andere Interessierte sich das hier ebenfalls anschauen koennen.
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 07:37 Mi 15.07.2009 | Autor: | Robertico |
Hallo Felix,
vielen Dank für deine Mühe. Habe den Beitrag verlinkt. Bin wegen des Baus noch nicht weiter gekommen.
Die Punkte habe ich gemessen und es ist klar, dass sie nur ungefähr stimmen können. (So genau baut ein Elektriker nicht :) )
Gruß Robert
PS: Jetzt wird tapeziert.
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 08:31 Mi 15.07.2009 | Autor: | felixf |
Hallo Robert,
> vielen Dank für deine Mühe. Habe den Beitrag verlinkt.
> Bin wegen des Baus noch nicht weiter gekommen.
du bist also Haeuslebauer?
> Die Punkte habe ich gemessen und es ist klar, dass sie nur
> ungefähr stimmen können. (So genau baut ein Elektriker
> nicht :) )
Ah, das erklaert warum die Ergebnisse leicht von den vom Programm berechneten abweichen :) Ich hatte schon befuerchtet, du haettest sie woanders mit berechnet und mein Programm rechnet evtl. falsch :)
> PS: Jetzt wird tapeziert.
Viel Spass und Erfolg! :)
LG Felix
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:28 Mi 15.07.2009 | Autor: | Robertico |
Hallo Felix,
konnte es doch nicht lassen, die Neugier war zu groß.
Habe dein Programm 1/1 in CSharp umgeschrieben und in mein provisorisches Programm eingebaut.
Klasse!! Klappt einwandfrei. Mein Mauszeiger zeigt mir jetzt gerundet in cm wo genau ich auf der Wand bin.
PN folgt noch.
Als nächtes möchte ich das jetzt verstehen lernen.
Bin froh, wenn der Umbau fertig ist. Dann habe ich viel mehr Zeit.
Gruß Robert
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 00:28 Do 16.07.2009 | Autor: | Robertico |
Hallo Felix,
wollte gerade die versprochene ausführliche PN an Al-Chwarizmi und Dich schicken, die ist mir als Newbie nicht erlaubt. Empfinde ich eigendlich als eine sehr gute Idee, passt aber jetzt nicht.
Nun, habe sie gespeichert, bis ich darf.
(oder andere Idee?/robert.schmitz.stolberg@googlemail.com; die ist sowieso überall im NET)
Gruß Robert
|
|
|
|
|
Hallo Robert,
ich versuche mal, deine Fragestellung etwas
einzugrenzen und zu präzisieren.
Du hast in der "Welt" ein x-y-Koordinatensystem
in einer Ebene (z.B. eine Wand oder der Boden)
dessen Koordinatengitter durch rechteckige
Fliesen bestimmt ist. Den Koordinatennullpunkt
O mit x=y=0 kannst du dabei in einen beliebigen
Kreuzungspunkt legen und als Längenmaßein-
heiten in x-und y-Richtung gerade die entspre-
chenden Fliesenkantenlängen (+Spaltbreite)
nehmen. Eine allfällige Umrechnung in ein
Koordinatensystem in Meter oder Millimeter
ist trivial.
In der Fotografie erscheint die abgebildete
Ebene verzerrt. Das Bild [mm] \overline{O} [/mm] des Koordinaten-
ursprungs O soll vorzugsweise innerhalb des
Bildes sein, damit vorläufige Bildkoordinaten
[mm] \overline{x},\overline{y} [/mm] von dort aus gemessen werden können.
Eine Verschiebung des Bildkoordinatenursprungs
z.B. in eine Ecke ist, falls gewünscht, ebenfalls
ganz leicht zu bewerkstelligen.
Als eingeschränkte Fragestellung haben wir
nun noch:
Wie lauten die Abbildungsgleichungen der
Zentralprojektion der x-y-Ebene auf die [mm] \overline{x}-\overline{y}-
[/mm]
Ebene, wenn der Nullpunkt des einen Koor-
dinatensystems auf den Nullpunkt des anderen
abgebildet wird ?
Wie ermittelt man die Parameter der Abbil-
dung aus drei zusätzlichen Punkt-Bildpunkt-
Paaren ?
LG Al-Chwarizmi
|
|
|
|
|
Ein Schlüssel zu einer dem Problem angemessenen
Lösung liegt wahrscheinlich im Konzept der
kollinearen Abbildung
und der dabei verwendeten homogenen Koordinaten.
LG Al-Chw.
|
|
|
|
|
Hallo,
die Frage, wie man diese Aufgabe mittels
homogener Koordinaten lösen könnte,
hat mich interessiert, und ich habe gleich
versucht, ein Rechenbeispiel dazu zu
erstellen. Da es nach meiner Ansicht recht
gut gelungen ist, will ich es hier darstellen.
Ich stelle mir vor, dass den vier Eckpunkten
einer ersten Fliese die Punkte O(0/0), P(1/0),
Q(1/1), R(0/1) zugeordnet werden.
Auf dem Foto haben diese, von [mm] \overline{O} [/mm] aus gemessen,
die Koordinaten [mm] \overline{O}(0/0), \overline{P}(8/4), \overline{Q}(2/10), \overline{R}(-3/9) [/mm] .
Zuerst soll die Abbildung bestimmt werden,
welche einem Zahlenpaar (x,y) eines "Welt-
punktes" in der x-y-Ebene das Zahlenpaar
[mm] (\overline{x},\overline{y}) [/mm] des entsprechenden Bildpunktes zuordnet.
In homogenen Koordinaten setzen wir:
O(1/0/0), P(1/1/0), Q(1/1/1), R(1/0/1)
Für die Abbildungsmatrix kann man ansetzen:
$\ A\ [mm] =\pmat{1&u&v\\0&a&b\\0&c&d}$
[/mm]
Dass A den Nullpunkt auf den Nullpunkt
abbilden soll, ist darin schon berücksichtigt.
In A stecken nun noch 6 zu bestimmende
Parameter. Um sie herauszufinden, lassen
wir A auf die Punkte P, Q, R los und ver-
gleichen das, was dabei herauskommt, mit
dem, was dabei herauskommen sollte,
nämlich drei homogene Koordinatentripel
für die vorgegebenen Punkte [mm] \overline{P}(8/4), \overline{Q}(2/10), \overline{R}(-3/9) [/mm] .
Dabei kommen genau 6 lineare Gleichungen
für die 6 gesuchten Parameter heraus. Das
System hat eine eindeutige Lösung.
Um am Ende die "Weltkoordinaten" x,y
eines Punktes aus seinen "Fotokoordinaten"
[mm] \overline{x},\overline{y} [/mm] berechnen zu können, bestimmt man
natürlich die zu A inverse Matrix [mm] A^{-1} [/mm] .
viel Spaß beim Rechnen !
LG Al-Chw.
|
|
|
|
|
Hallo
es ist natürlich möglich, aufgrund der vor-
herigen Überlegungen einen Algorithmus zu
entwickeln, welcher Folgendes leistet:
Nach Eingabe der 16 Zahlenwerte [mm] x_i, y_i, u_i, v_i
[/mm]
für 4 Punkte $\ [mm] P_i(x_i/y_i)\ \hat=\ \overline{P}_i(u_i/v_i)$
[/mm]
mit [mm] i\in \{1,2,3,4\} [/mm] wird die Formel bestimmt,
welche es nachher erlaubt, zu beliebigen
Koordinaten (x/y) die zugehörigen Koordinaten
(u/v) bezüglich des anderen, dazu zentralper-
spektivisch kollinearen Koordinatensystems zu
berechnen. Dies alles lässt sich dann in ein
leicht zu handhabendes Programm einbauen.
Aus (x/y) und (u/v) werden die homogenen
Vektoren [mm] \pmat{1\\x\\y} [/mm] bzw. [mm] \pmat{1\\u\\v}. [/mm] "Homogen"
bedeutet insbesondere, dass z.B.
$\ [mm] \pmat{1\\u\\v}\sim\pmat{k\\k*u\\k*v}$
[/mm]
ist, falls [mm] k\not=0 [/mm] . Ich schreibe die homogene
Abbildungsmatrix so:
$\ [mm] A=\pmat{1&a_1&a_2\\a_3&a_4&a_5\\a_6&a_7&a_8}$
[/mm]
Aus den 4 gegebenen "Passpunkt-Paaren"
ergeben sich nun die Gleichungen
$\ [mm] A*P_i=\pmat{1&a_1&a_2\\a_3&a_4&a_5\\a_6&a_7&a_8}*\pmat{1\\x_i\\y_i}=\pmat{1+a_1\,x_i+a_2\,y_i\\a_3+a_4\,x_i+a_5\,y_i\\a_6+a_7\,x_i+a_8\,y_i}\sim\pmat{1\\u_i\\v_i}$
[/mm]
Unter Beachtung der Homogenität [mm] (\sim) [/mm] erhält
man daraus für jedes i die zwei Gleichungen:
[mm] a_3+a_4\,x_i+a_5\,y_i=(1+a_1\,x_i+a_2\,y_i)*u_i
[/mm]
[mm] a_6+a_7\,x_i+a_8\,y_i=(1+a_1\,x_i+a_2\,y_i)*v_i
[/mm]
Zur Berechnung des Vektors [mm] \vec{a}, [/mm] welcher die
Elemente der Matrix A enthält, ergibt sich das
[mm] 8\times{8} [/mm] - Gleichungssystem
[mm] $\pmat{-x_1\,u_1&-y_1\,u_1&1&x_1&y_1&0&0&0\\-x_1\,v_1&-y_1\,v_1&0&0&0&1&x_1&y_1\\-x_2\,u_2&-y_2\,u_2&1&x_2&y_2&0&0&0\\-x_2\,v_2&-y_2\,v_2&0&0&0&1&x_2&y_2\\-x_3\,u_3&-y_3\,u_3&1&x_3&y_3&0&0&0\\-x_3\,v_3&-y_3\,v_3&0&0&0&1&x_3&y_3\\-x_4\,u_4&-y_4\,u_4&1&x_4&y_4&0&0&0\\-x_4\,v_4&-y_4\,v_4&0&0&0&1&x_4&y_4}*\pmat{a_1\\a_2\\a_3\\a_4\\a_5\\a_6\\a_7\\a_8}=\pmat{u_1\\v_1\\u_2\\v_2\\u_3\\v_3\\u_4\\v_4}$
[/mm]
Ist dieses gelöst, berechnen sich die u-v-
Koordinaten aus den x-y-Koordinaten so:
$\ [mm] u=\bruch{a_3+a_4\,x+a_5\,y}{1+a_1\,x+a_2\,y}$
[/mm]
$\ [mm] v=\bruch{a_6+a_7\,x+a_8\,y}{1+a_1\,x+a_2\,y}$
[/mm]
LG Al-Chw.
|
|
|
|