WICHTIG: Der Betrieb von goMatlab.de wird privat finanziert fortgesetzt. - Mehr Infos...

Mein MATLAB Forum - goMatlab.de

Mein MATLAB Forum

 
Gast > Registrieren       Autologin?   

Partner:




Forum
      Option
[Erweitert]
  • Diese Seite per Mail weiterempfehlen
     


Gehe zu:  
Neues Thema eröffnen Neue Antwort erstellen

Interpolation eines digitalen Höhgenmodels in MATLAB

 

Redhead
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2008, 11:54     Titel: Interpolation eines digitalen Höhgenmodels in MATLAB
  Antworten mit Zitat      
Hallo liebe Mitglieder von gomatlab

Das Ziel wäre ein DEM (Digital Elevation Model) zu konstruieren. Die Basis ist ein File mit Koordinaten in 3D ASCII; in 3 kolonnen x, y, und z unterteilt. Es handelt sich um die geographischen koordinaten sowie um die Höhe Z.

Wie kann ich denn nun das file xyz in Matlab öffnen, um ein image file zu konstruieren, welches "lôcher " enthält, mit diskreten Werten die dem file entsprechen aber ohne dass die pixel bereits einen wert haben?

Vielen Dank für eine Antwort.

Herzliche Grüsse von REDHEAD

c'est comment on peut ouvrir un fichier xyz sous matlab et en faire une image avec des "trous", en gros avec des valeurs discrètes qui correspondent au fichier mais tous les pixels n'auront pas une valeur.
Private Nachricht senden Benutzer-Profile anzeigen


jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 14.04.2008, 13:05     Titel:
  Antworten mit Zitat      
Servus,

also einlesen kannst du die *.xyz-Datei mit textread: z.B.:

Code:

dem=textread('dem.xyz');
 


In der Variable dem befinden sich dann gemäß der Eingangsvariable in Spalte 1 die x-, in Spalte 2 die y-Koordinaten und in Spalte 3 die zugehörige Höhe.

Für ein digitales Höhenmodell bietet sich ferner an, ein regelmäßiges Koordinatengitter aufzubauen, am besten über die Funktion meshgrid:
ausgehend von den Minimal- und Maximalwerte der x- und y-Koordinate baut meshgrid eine 2 Matrizen auf, die jeweils an den einzelnen Positionen die zugehörige x- und y-Koordinate angibt.

Code:

% Beispiel
minx=min(dem(:,1));
maxx=max(dem(:,1));
miny=min(dem(:,2));
maxy=max(dem(:,2));

% für ein regelmäßiges DEM mit Höhen zu ganzzahligen Koordinatenwerten empfiehlt sich ein auf- oder abrunden der Extremwerte:
minx=floor(minx);
miny=floor(miny);
maxx=ceil(maxx);
maxy=ceil(maxy);

% Erstellung Koordinatengitter mit Maschenweite 1m
[xmesh, ymesh]=meshgrid(minx:1:maxx, miny:1:maxy);
 


Eine 3. Matrix zmesh könnte dann jeweils die zugehörigen Höhenwerte beinhalten.
Für die Interpolation der Höhen zu den entsprechenden Koordinaten kann man die Funktion interp2 benutzen, und eventuell nichtbesetzte Stellen mit NaN auffüllen.

gruß
jochma [/b]
Private Nachricht senden Benutzer-Profile anzeigen
 
Redhead
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 14.04.2008, 21:10     Titel:
  Antworten mit Zitat      
Danke Jochma für deine informative und bespielsreiche Antwort! Ich hab selbst Mal angefangen rumzubasteln mit dem Befehl textscan, diesen habe ich in Matlab Help gefunden. Habe aber den Befehl vermutlich nicht richtig implementiert. Zuhause habe ich leider kein Matlab, darum konnte ich Deine Empfehlung noch nicht umsetzen. An alle (und besonders auch an Jochma): Was haltet Ihr den von der Textscan Variante? Nachfolgend mein Beispiel:


fid = fopen('mnt_sierraGuara_2007.txt', 'r');
xyz = textscan(fid, '%u8 %u8 %u8', 3, 'headerlines', 1, 'delimiter', ', ','CollectOutput', 1);
fclose(fid)

Danke für Eure Mithilfe und herzliche Grüsse,

REDHEAD
Private Nachricht senden Benutzer-Profile anzeigen
 
jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 15.04.2008, 17:30     Titel:
  Antworten mit Zitat      
also mit textscan hab' ich noch nicht gearbeitet, aber für größere und komplexere Datenmengen scheint es (laut Matlab-Hilfe) besser geeignet zu sein als textread.

Besonders wenn zusätzliche erklärende Zeilen in der Datei vorhanden sind (z.B. auszunehmende headerlines), oder die Daten mit einem ',' voneinander getrennt sind (delimiter).

Für die Daten selbst ist wohl das Format double ('%n') besser geeignet als integer8 ('%u8'), und ich denke, dass der Begrenzer N (bei deinem Beispiel '3') nicht benötigt wird.
Ebenso muss man sich vom Handling drauf einstellen, dass textscan die Daten in eine cell-Variable schreibt und nicht wie textread in eine einzelne Matrix.
'CollectOutput' ist mir und Matlab7.0 neu!? Gibt's wohl erst ab Matlab8.0?

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
Redhead
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.04.2008, 21:02     Titel:
  Antworten mit Zitat      
Hallo Jochma


CollectOutput lässt nach Matlab Hilfe ein Zusammenfassen der eingelesenen Daten in eine Matrix zu (wenn ich das in der English Hilfe richtig verstanden habe). Ich kann mir vorstellen, dass dieser Befehl hinzugefügt wurde, um dem von Dir geschilderten Problem mit der cell-Variable entgegenzuwirken.

Danke für deinen Datenformat-Tipp. Ich muss mir unbedingt Matlab zuhause zulegen. Gibts denn Studentenlizenzen oder trial Versionen mit vernünftigen Ablaufzeiten? Gebe Dir ein Feedback zu deinem Vorschlag sobald ich an der Uni zum programmieren komme.

Nochmals vielen Dank und griessdi!

Redhead
Private Nachricht senden Benutzer-Profile anzeigen
 
jochma
Forum-Fortgeschrittener

Forum-Fortgeschrittener


Beiträge: 79
Anmeldedatum: 25.10.07
Wohnort: Oberbayern
Version: Version 7.0.0 (R14)
     Beitrag Verfasst am: 17.04.2008, 11:15     Titel:
  Antworten mit Zitat      
bei uns in der Uni ist Matlab in den CIP-Pools der Fakultät und an einigen Lehrstühlen vorhanden, einige Unis bieten auch Studentenlizenzen für Matlab an.
Ob's auch eine trial-Version gibt?
Da bin ich überfragt... Question

derweil frohes und erfolgreiches Schaffen! Smile

gruß
jochma
Private Nachricht senden Benutzer-Profile anzeigen
 
Michaela
Forum-Century

Forum-Century


Beiträge: 239
Anmeldedatum: 12.07.07
Wohnort: ---
Version: bis 2007b
     Beitrag Verfasst am: 17.04.2008, 22:16     Titel:
  Antworten mit Zitat      
Eventuell tuts auch octave. Habe damit schon länger nicht mehr gearbeitet, aber zur erstellung von skripten sollte es tun. Graphische Ausgabe oder GUIs wird aber schwierig, da octave für graphische dinge gnuplot verwendet..
_________________

---------------------------------------------------------------
Leider habe ich daheim zwar Internet aber kein Matlab - daher sind alle Syntaxbeispiele circa Angaben.....
Private Nachricht senden Benutzer-Profile anzeigen
 
Redhead
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 14.04.08
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 08.05.2008, 22:54     Titel:
  Antworten mit Zitat      
Hallo liebe Mitdiskutierende

Die Problemstellung, welche ich vor einiger Zeit zur Diskussion gestellt habe, ist nun fast gelöst. Es fehlen mir aber noch einige Verbindungsstücke und ich bringe mein Programm nicht zum laufen. Ich habe den Verdacht, dass mit der Variablentransformierung nach double ein Fehler vorliegen kann. Könnt ihr mir evtl. weiterhelfen?

Des weiteren möchte ich eine Funktion zur Interpolationsmethode inverse Distanz in meine Interpolationsfuntion (pv) integrieren, finde aber nicht die richtige Initiation, damit am Ende das Verknüpfen von drei Funktionen aufgeht. Bitte nicht erschrecken, die Kommentare sind in Französisch, da das Projekt in dieser Sprache zu erfüllen ist.

Einen Arbeitsschritt habe ich noch nicht erfüllt, nämlich das Verknüpfn des finalen DHM`s (nach der Wahl der Auflösung und der Interpolation) mit den Koordinaten.

Ein zugehöriges Text-File mit Höhenangaben und Koordinaten kann unter dem folgenden Link heruntergeladen werden:

http://rapidshare.com/files/1135323....._aragon_2007_utm.asc.html

Vielen Dank für Eure Zahlreichen Rückmeldungen, ich freue mich auf euer kritisches Feedback.

invdistgrid.m
 Beschreibung:
Dies ist die Funktion, welche ich gerne in meiner Interpolationsfunktion aufrufen möchte, aber nicht weiss, wie die notwendigen Parameter in der ursprünglichen Interpolationsfunktion pv aufzurufen sind.

Download
 Dateiname:  invdistgrid.m
 Dateigröße:  2.33 KB
 Heruntergeladen:  653 mal
pv.m
 Beschreibung:
Dies ist die Interplationsfunktion

Download
 Dateiname:  pv.m
 Dateigröße:  633 Bytes
 Heruntergeladen:  711 mal
test_corrige.m
 Beschreibung:
Dies ist die DHM-Funktion

Download
 Dateiname:  test_corrige.m
 Dateigröße:  2.83 KB
 Heruntergeladen:  639 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Neues Thema eröffnen Neue Antwort erstellen



Einstellungen und Berechtigungen
Beiträge der letzten Zeit anzeigen:

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 | goMatlab RSS Button 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.