|
|
parallele Ebenen mit minimalen Abstand |
|
bbflo |
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 20.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 14:03
Titel: parallele Ebenen mit minimalen Abstand
|
|
|
|
|
Hallo Leute,
ich habe ein kleines Problem mit Ebenen.
Ausgangspunkt ist eine Punktwolke, von beliebig vielen Punkten, die alle mit geringer Abweichung in einer Ebene liegen, siehe angehängtes Bild. Diese Ebene nenne ich Soll-Ebene.
Nun möchte ich durch den höchsten und niedrigsten Punkt jeweils eine Ebene ("Fit-Ebenen") legen, so dass die obere und die untere Fit-Ebene zueinander parallel sind und den geringsten Abstand voneinander haben.
Die Fit-Ebenen müssen nicht parallel zur Soll-Ebene sein, aber alle Punkte der Punktwolke müssen zwischen den Fit-Ebenen liegen.
Mein Ziel ist also salopp gesagt, zu wissen, wie groß der Bereich ist, in dem alle Punkte der Punktwolke liegen.
Mein Vorgehen war, mittels PCA (Hauptkomponenten Analyse) eine Ebene durch alle Punkte zu legen und dann die Abstände zu der PCA-Ebene zu berechnen.
Wie im angehängten Bild dargestellt, liefert mir das für bestimmte Spezialfälle aber keine befriedigende Lösung. Die zwei Fit-Ebenen müssten parallel zur Linie im rechten Bild liegen und nicht parallel zur PCA-Ebene im linken Bild.
Hat hier jemand eine Idee, wie ich das lösen könnte?
Bin für jeden Hinweis/ Tipp sehr dankbar.
Liebe Grüße,
flo
Beschreibung: |
|
Download |
Dateiname: |
Ebenenproblem.JPG |
Dateigröße: |
35.64 KB |
Heruntergeladen: |
983 mal |
|
|
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 17:34
Titel:
|
|
Was ist das Problem, also was willst Du mit den Daten machen?
|
|
|
bbflo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 20.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 17:56
Titel:
|
|
Ich möchte aus den Punkten die Abweichung von der Soll-Ebene, also die Toleranz berechnen.
Dabei ist es egal, ob die Fit-Ebenen jetzt parallel zur Soll-Ebene sind oder nicht, hauptsache der Abstand ist minimal.
Ich möchte sozusagen rausfinden, wie hoch die minimale Höhe eines Quaders ist, der alle Punkte der Punktwolke enthält.
Ist mein Problem jetzt klarer?
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 18:19
Titel:
|
|
|
|
|
bbflo hat Folgendes geschrieben: |
Ich möchte aus den Punkten die Abweichung von der Soll-Ebene, also die Toleranz berechnen. [...] Ist mein Problem jetzt klarer? |
Mir ist schon klar "was" Du da machen willst, die Frage ist "wofür". Eine PCA ist letztendlich eine Eigenwert- und Eigenvektorbestimmung + Sortierung + Matrixvektor-Multiplikation. Das ist sehr aufwändig, gerade wenn die Datenmenge groß ist und hier nicht notwendig
Ich gehe davon aus, dass Dir Deine Soll-Ebene bekannt ist und somit kannst Du z.B. mit Hilfe einer Fehlerfunktion (SEE) den Fehler bestimmen. Im Fall einer Ebene, einfach den Abstand zwischen Punkt und Ebene nehmen, quadrieren und summieren (bzw. als Fehlerfunktion kann man natürlich auch etwas anderes nehmen). Dies ist um einiges effektiver und hat nicht die numerische Berechnung von Eigenwerten dabei.
Der Fehler gibt dann letztendlich an, wie gut Deine Punkte zur Ebene liegen, liegen die Punkte alle in der Ebene, ist der Fehler 0.
bbflo hat Folgendes geschrieben: |
Dabei ist es egal, ob die Fit-Ebenen jetzt parallel zur Soll-Ebene sind oder nicht, hauptsache der Abstand ist minimal.
|
Anhand des Fehler kannst Du dann die Lage einer Ebene optimieren, indem Du eben eine Ebene generierst, die "optimal" (was Du dann definieren musst) ist, wobei man das dann mit verschiedenen Verfahren optimieren kann, letztendlich minimiert / maximiert man dann eine Funktion. Eine ähnliche Optimierung findet sich in http://de.wikipedia.org/wiki/Support_Vector_Machine
|
|
|
bbflo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 20.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 20:56
Titel:
|
|
|
|
|
Vielen Dank für Deine Antwort, aber leider kann ich Dir nicht zu 100% folgen.
Zitat: |
Ich gehe davon aus, dass Dir Deine Soll-Ebene bekannt ist und somit kannst Du z.B. mit Hilfe einer Fehlerfunktion (SEE) den Fehler bestimmen. |
Ich weiß, dass die Punkte ungefähr eine Ebene beschreiben, aber ich habe z.B. keinen festen z-Wert der diese Ebene beschreibt. Bei meiner Vorgehensweise benutze ich PCA um mir eine Ebene durch die Punkte zu legen und von dieser Ebene ausgehend berechne ich dann die Abstände.
Das funktioniert bei manchen Spezialfällen aber eben nicht so gut.
Ich würde das Problem auch gerne ohne PCA lösen, weiß aber nicht wie.
Vielleicht noch ein Beispiel zur Verdeutlichung:
Bei einem beliebig gefertigtem Bauteil in Form eines Würfels möchte ich die Ebenheit einer bestimmten Fläche messen. Nehmen wir an ich messe die Koordinaten einer bestimmten Anzahl von Punkten der Fläche ein und habe nun meine Punktwolke mit meinen Messpunkten als Tabelle vorliegen. Aus diesen Daten möchte ich die Toleranz bestimmen.
Dabei interessiert es mich nicht, ob meine Fläche leicht verkippt bezüglich der anderen Würfelflächen ist, auch nicht die Abweichung der Fläche von einer perfekt flachen Ebene, die durch meine Messpunkte gefitted ist.
Sondern nur der kleinst mögliche Abstand zwischen zwei parallelen Ebenen, zwischen denen alle Punkte liegen.
Ich habe schon überlegt, ob ich alle Punkte in eine Ebene projiziere, im rechten bild z.B. in die x-z-Ebene. Dann würde eine Gerade durch die Punkte reichen, bei der der maximale Abstand zwischen jedem Punkt und der Gerade minimal ist.
Least square liefert mir ja nur die minimale Summe der Fehlerquadrate, in dem Fall würde mich aber nur eine Minimierung des größten Abstandes interessieren.
Nochmal Danke dass Du mir versuchst zu helfen.
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 21:38
Titel:
|
|
|
|
|
Nur dass ich es verstehe, Du hast eine Punkte, die eine Ebene beschreiben, Du hast keine Ebene vorgegeben?
Wenn die Punkte eine Ebene beschreiben, dann wäre die Ebene, die beschrieben wird, wenn Du gedanklich in Deine Punktwolke eine Ebene so hineinlegst, dass von allen Punkten der Abstand der Ebene minimal ist. Vereinfacht ausgedrückt: Konstruiere zufällig eine Ebene in Deiner Punktwolke und verändere die Lange so lange, bis der Fehler nicht mehr kleiner wird. Rein fachlich optimierst Du die Lange der Ebene in der Punktwolke. Der minimale Fehler gibt Dir dann an, wie gut Du gefittet hast bzw. sollte der Toleranz entsprechen.
Mir ist nicht klar, warum Du da mit 2 parallelen Ebenen rumhantieren möchtest, denn Du hast Punkte, die eine Ebene beschreiben, d.h. entweder bestimmst Du den Fehler zu einer von Dir vorgegebenen Ebene, das wäre dann so etwas wie Abweichung von dem Soll-Zustand oder Du kannst in die Punktdaten eine Ebene hineinlegen und das entspricht der Lageoptimierung einer zufällig initialisierten Ebene (beachte dabei, dass das Optimieren letztendlich in einem lokalen Optimium endet und nicht in einem globalen, d.h. Du solltest die Startparameter der zufittenden Ebene schon passend wählen). In diesem Fall gibt der Fehler der Fehlerfunktion, die Du optimierst, so etwas wie die Güte wieder, d.h. wie gut sind Deine Punkte im Verhältnis zur Ebene.
Aufgrund dieses Fits, kannst Du dann so etwas wie die "Dicke" der Ebene bestimmen, denn die zwei Punkte, die am dichtesten an der gefitteten Ebene liegen liefern dann so etwas wie die Ausdehnung. D.h. nach dem Ebenenfit, suchst Du 2 Punkte, die minimalen Abstand zur Ebene haben und der eine muss ober- und der unterhalb der Ebene liegen. Damit hättest Du dann so etwas wie die Ausdehnung der Ebene.
siehe dazu den Link zur SVM, denn diese macht so etwas. Sie bestimmt zwischen 2 Punktmengen eine Ebene mit optimaler Lage, d.h. so dass die Ebene von den beiden Punktmengen möglichst weit entfernt liegt.
|
|
|
bbflo |
Themenstarter
Forum-Newbie
|
|
Beiträge: 4
|
|
|
|
Anmeldedatum: 20.08.12
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 22:57
Titel:
|
|
|
|
|
flashpixx hat Folgendes geschrieben: |
Nur dass ich es verstehe, Du hast eine Punkte, die eine Ebene beschreiben, Du hast keine Ebene vorgegeben?. |
Ich habe Punkte die -mehr oder weniger gut- eine Ebene beschreiben.
Verstehe ich Dich richtig? Du schlägst vor, zunächst eine Ebene irgendwie durch die Punkte zu legen, dann die Abstände der Punkte zur Ebene zu messen und dann iterativ die Lage der Ebene zu verändern, so lange bis der maximale Abstand eines einzelnen (dem "schlechtesten") Punktes zu der Ebene minimal wird?
Ja, glaube das wäre wahrscheinlich eine Möglichkeit.
Zitat: |
Aufgrund dieses Fits, kannst Du dann so etwas wie die "Dicke" der Ebene bestimmen, denn die zwei Punkte, die am dichtesten an der gefitteten Ebene liegen liefern dann so etwas wie die Ausdehnung. D.h. nach dem Ebenenfit, suchst Du 2 Punkte, die minimalen Abstand zur Ebene haben und der eine muss ober- und der unterhalb der Ebene liegen. Damit hättest Du dann so etwas wie die Ausdehnung der Ebene. |
Das verstehe ich nicht, hast Du Dich vielleicht vertippt? Für meine Toleranz sind nicht die Punkte entscheidend, die am dichtesten an der Ebene sind bzw. den minimalen Abstand haben, sondern die Punkte, die im Vergleich zu allen anderen Punkten den maximalen Abstand zu der gefitteten Ebene haben.
Die Ebenheit-Toleranz ist etwas umständlich über die zwei von mir genannten Ebenen, bzw. Geraden definiert. Deshalb war das mein Ansatzpunkt.
Besten Dank für Deine Hilfe, ich versuche mal damit weiter zu kommen.
Wenn Du, oder sonst noch jemand anderes, noch eine Idee oder Anmerkung hat, immer her damit
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 21.08.2012, 23:05
Titel:
|
|
|
|
|
bbflo hat Folgendes geschrieben: |
Verstehe ich Dich richtig? Du schlägst vor, zunächst eine Ebene irgendwie durch die Punkte zu legen, dann die Abstände der Punkte zur Ebene zu messen und dann iterativ die Lage der Ebene zu verändern, so lange bis der maximale Abstand eines einzelnen (dem "schlechtesten") Punktes zu der Ebene minimal wird?
|
Ja genau das meine ich. Denn gedanklich sollten ja im optimalen Fall alle Punkte "in" der Ebene liegen, also der Fehler von Punkte zu Ebene gleich Null sein. Real hast Du ja Messungenauigkeiten usw drin, d.h. also ist das Ziel einen möglichst "kleinen" Fehler.
Wie schon gesagt, die Support-Vector-Machine macht genau das, Du kannst die Ebene durch die so genannten Support-Vektoren beschreiben, d.h. die Vektoren, die am dichtesten an der Ebene liegen.
Du hats praktisch 2 Möglichkeiten: Wenn Du weisst welche Punkte über und unterhalb der zu findenden Ebene liegen, dann kannst Du direkt die SVM nehmen, Algorithmus gibt es als Matlabimplementieren, d.h. die Punkte die oberhalb liegen bekommen das Label "oben" und die unten liegen "unten", damit fütterst Du dann die SVM und bekommst direkt die Ebene bestimmt.
Wenn Du das nicht machen kannst, dann musst Du eben den Fehler optimieren, d.h. Du musst das mathematisch formalisieren und dann numerisch optimieren (SVM macht letztendlich Lagrange Optimierung).
|
|
|
Jan S |
Moderator
|
|
Beiträge: 11.057
|
|
|
|
Anmeldedatum: 08.07.10
|
|
|
|
Wohnort: Heidelberg
|
|
|
|
Version: 2009a, 2016b
|
|
|
|
|
|
Verfasst am: 22.08.2012, 10:55
Titel: Re: parallele Ebenen mit minimalen Abstand
|
|
Hallo bbflo,
Du suchst die zwei parallelen Ebenen, die alle Punkte umschließen und die einen minimalen Abstand haben. Dann sollte eine der beiden Ebenen durch eine Fläche der Konvexen Hülle gehen. Die andere geht dann durch den Punkt, der am weitesten von dieser Ebene entfernt ist. Wenn Du nur wenige Punkte hast, also z.B. < 1000 sollte die Berechnung der Konvexe Hülle und das Testen aller einzelnen Flächen in erträglicher Zeit berechenbar sein.
So, nun bitte ich um eine Diskussion, ob die Idee überhaupt stimmt. Ich finde nämlich nich auf Anhieb einen Beweis dafür. Allerdings auch kein Gegenbeispiel...
Gruß, Jan
|
|
|
flashpixx |
Forum-Guru
|
|
Beiträge: 355
|
|
|
|
Anmeldedatum: 19.04.08
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 22.08.2012, 11:14
Titel:
|
|
Bei der konvexen Hülle hast Du das Problem der Eindeutigkeit, denn es existieren unendlich viele Ebenen, die die Hülle schneiden. Da Du alle durchprobierst (Brute-Force) ist das extrem aufwändig.
Durch die genannte Fehleroptimierung kann ich schon zu beginn beeinflussen wohin das Verfahren konvergiert.
Die konvexe Hülle umschließt zwar die Punktwolke, aber Du kannst nicht ohne die Ebene bzw. deren Lage zu kennen den "weitesten Punkt" finden. Denn ich müsste zunächst "irgendeine" Ebene bestimmen, dann die Abstände zu den Punkten und dann eben den Punkt nehmen, der passend ist. Da ich aber die Ebene nicht eindeutig bestimmen kann, ist das ein typisches Henne-Ei-Problem und es ist nicht lösbar.
|
|
|
Tithayer |
Forum-Newbie
|
|
Beiträge: 1
|
|
|
|
Anmeldedatum: 30.03.15
|
|
|
|
Wohnort: ---
|
|
|
|
Version: ---
|
|
|
|
|
|
Verfasst am: 01.04.2015, 10:19
Titel:
|
|
Wurde dieses Thema irgendwann gelöst?
Ich habe die gleiche Aufgabenstellung, und stehe vor den gleichen Schwierigkeiten wie bbflo...
Grüße,
Tithayer
|
|
|
|
|
Einstellungen und Berechtigungen
|
|
Du kannst Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen. Du kannst Dateien in diesem Forum posten Du kannst Dateien in diesem Forum herunterladen
|
|
Impressum
| Nutzungsbedingungen
| Datenschutz
| FAQ
| RSS
Hosted by:
Copyright © 2007 - 2024
goMatlab.de | Dies ist keine offizielle Website der Firma The Mathworks
MATLAB, Simulink, Stateflow, Handle Graphics, Real-Time Workshop, SimBiology, SimHydraulics, SimEvents, and xPC TargetBox are registered trademarks and The MathWorks, the L-shaped membrane logo, and Embedded MATLAB are trademarks of The MathWorks, Inc.
|
|