|
|
Algorithmus zur Dezimierung (Douglas-Peucker) |
|
Senraphil |

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 10:59
Titel: Algorithmus zur Dezimierung (Douglas-Peucker)
|
 |
|
 |
|
Hallo liebe Gemeinde,
ich mache langsam Fortschritte im Verständnis und Umgang mit Matlab, doch nach meinen letzten Beiträgen mit vergleichweise einfachen Fragen, habe ich nun eine etwas härtere Nuss vor mir:
Ich möchte mit Hilfe eines Algorithmus (ich habe an den Douglas-Peucker-Algorithmus gedacht) und eines Toleranzkriteriums meinen Datensatz dezimieren, um eine Glättung des Höhenprofils zu erreichen.
Dazu wie immer ein kleines Beispiel:
Die Struktur meines Datensatzes sieht wie folgt aus:
Die in SPALTE 4 eingetragenen Werte sind die errechneten Höhen in [m] an den jeweiligen Punkten. Daraus lässt sich selbstverständlich durch den plot-Befehl ein Höhenverlauf ausgeben. Den plot habe ich als jpg-Datei mit dem Namen "Ausgabe_Höhen_Originaldaten" angehängt.
Nun soll mit Hilfe des Algorithmus die Datenmenge reduziert werden. Als Toleranzkriterium soll dmax=2 angenommen werden. Das bedeutet, es sollen alle DatenZEILEN gelöscht werden, bei der die Höhenänderung von einem zum nächsten (oder auch zum übernächsten,...) Punkt geringer als 2 Meter ist. Am Ende soll dann der Datensatz so aussehen:
Was nun passiert ist: ZEILE 1 muss stehen bleiben, da sich dort der Startpunkt mit Starthöhe befindet. Danach wird zunächst die ZEILE 2 gelöscht, da die Höhendifferenz von 75 auf 77 Meter innerhalb der Toleranz liegt. Der nächste Punkt (ZEILE3) liegt dann bei einer Höhe von 74 Meter. Hier ist die Höhendifferenz zum ersten Punkt (Punkt 2 wurde ja bereits gelöscht) 1 Meter, was wiederum innerhalb der Toleranz liegt und somit auch diese Zeile gelöscht werden kann. Der nächste Punkt (ZEILE 4) mit einer Höhe von 80 Metern bleibt dann bestehen, da die Höhendifferenz von 5 Metern zum 1.Punkt ausserhalb der Toleranz liegt.
Das selbe passiert mit den Höhen in den ZEILEN 7-10 der Ausgangsdaten. Es werden die ZEILEN 8 und 9 gelöscht, da dort die Änderungen in der Höhe innerhalb der Toleranz liegen. Somit bleiben die ZEILEN 7 und 10 bestehen. Die plot-Ausgabe des reduzierten Datensatzes habe ich ebenfalls mit dem Namen "Ausgabe_Höhen_reduziert" angehängt.
Die letzte ZEILE muss natürlich ebenfalls wie die 1.ZEILE des Originaldatensatzes bestehen bleiben. Dies ist aber bei der Verwendung des Douglas-Peucker-Algorithmus automatisch gegeben, wenn ich das richtig nachgelesen habe.
Kann mir jemand bei meinem Problem weiterhelfen? Ist die Verwendung des Douglas-Peucker-Algorithmus hier sinnvoll? Wenn ja, wie muss der Code dazu aussehen?
Ich hoffe ihr versteht meine Frage und könnt mir weiterhelfen.
Vielen Dank.
Gruß
Senraphil
Beschreibung: |
|
 Download |
Dateiname: |
Ausgabe_Höhen_reduziert.jpg |
Dateigröße: |
14.02 KB |
Heruntergeladen: |
285 mal |
Beschreibung: |
|
 Download |
Dateiname: |
Ausgabe_Höhen_Originaldaten.jpg |
Dateigröße: |
14.28 KB |
Heruntergeladen: |
284 mal |
|
|
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 11:16
Titel:
|
 |
das von dir beschriebene problem sollte sich doch recht einfach mit einer schleife lösen lassen. du hast doch schon geschrieben was gemacht werden muss ^^ das musst du jetzt nur noch in eine schleife packen
so in der art:
das muss natürlich noch an dein problem angepasst werden.
_________________
richtig Fragen
|
|
|
Senraphil |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 12:35
Titel:
|
 |
Hi Winkow,
ich habs mal probiert auf das Beispiel, was ich hier im Forum mitgepostet hab, anzuwenden. Leider kommt bei mir nicht das richtige Ergbenis raus.
Was ist in deinem Code "a"?
Ist hier die Anwendung des Douglas-Peucker-Algorithmus dann überhaupt sinnvoll?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 12:45
Titel:
|
 |
a ist zb sowas
ob der algorythmus sinnvoll ist kann ich nicht sagen.
_________________
richtig Fragen
|
|
|
Senraphil |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 13:07
Titel:
|
 |
Der Befehl funktioniert leider so nicht.
Das Ergebnis ist, dass alle Werte der Matrix in die erste Zeile der Varaible geschrieben werden und sich ansonsten nichts ändert.
Die Matrix wird von 10x5 auf 1x49 umgewandelt.
Kannst du deinen angegebenen Befehl eventuell nochmal überprüfen?
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 13:51
Titel:
|
 |
deswegen meinte ich ja das du den code auf dein problem abwandeln musst. hast du verstanden was der code macht ? kleiner tipp. da fehlt irgendwo ne 4 und irgendwo n :
_________________
richtig Fragen
|
|
|
Senraphil |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 14:38
Titel:
|
 |
Die Funktionsweise des Befehls hab ich nun einigermaßen verstanden.
Allerdings erschließt sich mir nicht, wo die 4(die ja den Bezug auf die betreffende Spalte herstellen soll) und das "n" hin sollen..
Muss nicht die 4 in die Befehlszeile
Ich steh grad echt aufm Schlauch
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 15:11
Titel:
|
 |
das n steht für ein das wichtige kam danach ^^ der :
^^
das mit der 4 war schon richtig bei dir.
der : gehört dann in die zeile darunter da du ja die ganze zeile löschen willst.
_________________
richtig Fragen
|
|
|
Senraphil |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 24.04.2014, 15:27
Titel:
|
 |
Endlich hat es so funktioniert wie ich es mir vorstelle!
Noch ein paar Fehlversuche und ich wäre in die Luft gegangen
Danke an Winkow!!
|
|
|
Senraphil |
Themenstarter

Forum-Fortgeschrittener
|
 |
Beiträge: 51
|
 |
|
 |
Anmeldedatum: 16.04.14
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 25.04.2014, 13:46
Titel:
|
 |
Jetzt hab ich doch nochmal ne kleine Frage:
Was bewirkt das k=1 ??
|
|
|
Winkow |

Moderator
|
 |
Beiträge: 3.842
|
 |
|
 |
Anmeldedatum: 04.11.11
|
 |
|
 |
Wohnort: Dresden
|
 |
|
 |
Version: R2014a 2015a
|
 |
|
|
 |
|
Verfasst am: 28.04.2014, 12:34
Titel:
|
 |
Senraphil hat Folgendes geschrieben: |
Was bewirkt das k=1 ?? |
das k mit eins initialisiert wird ^^ wenn k nicht existiert kann ich ja nicht while k<.... und k ist 1 weil ich ja beim ersten element anfangen will
_________________
richtig Fragen
|
|
|
|
|
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 - 2025
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.
|
|