|
Robin |

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2010, 11:40
Titel: Line plot from figure
|
 |
Hallo leute, ich bin noch ein MatLab Anfänger und hoffe, dass ihr mir Ratschläger geben könnte.
Und zwar, ich habe hier eine 512*512 Datei. Aus der Datei kann ich dann eine 2D Figure plotten. Es ist sehr mühsam, dass immer erst durch "plot(data(m:n,j:k))" die entsprechende Linie an einer von mir interresierter Stelle geplottet werden könnte, da muss man beim Plotten immer die genaue Koordinaten festlegen. Gibt es ein kürzerer Weg, dies zu erreichen? Meine Vorstellung ist, ich kann auf der Figure willkürlich eine Linie ziehen, und dann durch Drücken eines Knopes wie z.B. "Plot" die gewünschte Line Profil automatisch dargestellt wird.
Kann hier jemand mir helfen?
|
|
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.07.2010, 17:05
Titel: Re: Line plot from figure
|
 |
|
 |
|
Hallo Robin,
> eine 512*512 Datei
Ich gehe davon aus, dass Du eine Datei meinst, die ein [512x512] double Array enthält.
> Aus der Datei kann ich dann eine 2D Figure plotten. Es ist sehr mühsam, dass immer erst durch "plot(data(m:n,j:k))" die entsprechende Linie an einer von mir interresierter Stelle geplottet werden könnte, da muss man beim Plotten immer die genaue Koordinaten festlegen.
Das ist mir völlig unklar. "data(m:n, j:k)" ist eine Matrix. Wieso zeichnet dies "die entsprechende Linie"?
Wärest Du denn mit ungenauen Koordinaten zufriedener?
> Gibt es ein kürzerer Weg, dies zu erreichen?
Das sieht doch ausgesprochen kompakt aus.
> Meine Vorstellung ist, ich kann auf der Figure willkürlich eine Linie ziehen, und dann durch Drücken eines Knopes wie z.B. "Plot" die gewünschte Line Profil automatisch dargestellt wird.
Auf welcher Figure? Du kannst sehr einfach eine Linie auf einer Axes ziehen (z.B. mit den Tools in der Figure Toolbar). Aber welches ist dann "die gewünschte Linie Profil"?
Bitte beschreibe Dein Problem nochmal genauer.
Gruß, Jan
|
|
|
Robin |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 11.07.2010, 17:57
Titel:
|
 |
Hallo Jan,
Dank für deine schnelle Antwort. Tut mir leid, dass ich falsch formuliert habe. Also, hier nochmal.
Ich habe ein [512*512] double array und wollte ein Linie Profil zwischen 2 beliebige Punkte auf den Figure plotten. Mit den Tools in der Toolbar kann ich ja eine Linie auf den Figure ziehen, aber ich bekomme keine Informationen über diese Linie, oder?
Gruß
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 11.07.2010, 18:40
Titel:
|
 |
Hallo Robin,
nein, das Line-Tool aus der Toolbar gibt Dir keine Werte zurück.
Aber die die ButtonDownFcn des Axes Objektes kann den esrten Punkte definieren, und danach mittels der WindowsButtonDownFcn den 2. Punkt ermitteln.
Um die ButtonDownFcn der Axes nicht zu verdecken, muss übrigens der HitTest aller Grafik-Objekte auf "off" gesetzt werden.
"data(m:n, j:k)" sieht aber eher so aus, als wolltest Du einen rechteckigen Ausschnitt haben, und keine Linie. Dann wäre DRAGRECT oder RBBOX eine gute Methode.
Wenn Du wirklich eine Linie brauchst, kann ich gerne einen entsprechenden Code dazu posten.
Gruß Jan
|
|
|
Robin |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 08:08
Titel:
|
 |
|
 |
|
Morgen Jan,
"data(m:n,j:k)" ist nicht was ich brauche. Ich habe es falsch geschrieben. Eigentlich brauche ich "data(x,j:k)" oder "data(m:n,y)" oder sogar beliebige Linien zwischen 2 punkte (m:n) und (j:k).
Es ist sehr nett von dir, wenn du so einem code mir postest. Da ich mache momentan meine Diplomarbeit, aus zeitlichem Grund kann ich nicht tief ins MATLAB hineintauchen. Und als ein Anfänger ist es noch zu kompliziert für mich.
Ich beschreibe meine Aufgabe noch mal, dann kannst du besser wissen, was ich brauche. Also, ich mache AFM scannen auf Proben. Durch jeder Scan bekomme ich 2 Bilder, ein Bild für Topographie und das andere zeigt die Potentialverteilung auf den Probenoberfläche. Es ist weniger überzeugend, wenn ich nur diese beide Bilder vergleiche, da winzige Änderungen könnten durch nicht optimale Kontrasteinstellung versteckt werden. Daher ist so ein "Line Profil" für mich wichtig. Dann kann ich über die Stellen, die mir interessieren, willkürlich eine Linie ziehen (beliebig lang, in beliebiger Richtung, durch beliebige Anfang- und Endpunkt, wie LineTools in Toolbox) und gleichzeitig Topographie und Potentialverteilung über diese Linie ausgeben. Sonst muss ich jedes mal zuerst ein vektorausschnitt aus Datenmatrix finden und plotten.Es ist mir zu aufwendig, da es gibt einfach zu viele Stellen, die ich sehen würde und ich habe viele Bilder zu untersuchen.
Viele Grüße
Robin
|
|
|
Hubertus |

Forum-Meister
|
 |
Beiträge: 1.034
|
 |
|
 |
Anmeldedatum: 08.01.09
|
 |
|
 |
Wohnort: Hamburg
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 08:25
Titel:
|
 |
Moin, Moin,
auch auf die Gefahr hin, dass ich Dein Anliegen vielleicht falsch interpretiere,
hier ein Lösungsvorschlag:
Du mußt nur die Werte ändern. plot[0 265] zeigt die Linie einer 265 Pixel breiten Matrix - von "0" an.[100 100] gibt eine parallele Linie an. Du kannst mit dieser Funktion auch schräge plotten und auch nur über 2 Pixel.
Viele Grüße
Hubertus
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 11:30
Titel:
|
 |
Hallo Robin,
die Auswahl zweier Punkte mit der Maus geht sehr einfach mit GINPUT. Ich dachte zuerst an eine viel komplexere Methode mit der ButtonDownFcn der Axes oder WindowButtonDown/Up Funktionen der Figure. Das ist aber whl gar nicht nötig.
NUn hast Du zwei X und zwei Y Werte. Die Frage ist nun noch, wie Du die Werte entlang der Linie von [X(1), Y(1)] zu [X(2), Y(2)] berechnest. Hast Du dafür schon eine Lösung? Es ist nicht trivial zu entscheiden, wieviele Pixel diese Linie haben soll und welcher Wert genommen wird, wenn sich die Linie genau zwischen zwei Orginal-Pixeln befindet.
Hast Du die Image-Processing-Toolbox? Die kann nämlich ein Bild drehen. Dann könntest Du das Bild so drehen, dass die asugewählte Linie horizontal ist (oder vertikal), und dann die Werte einfach durch auslesen der Zeile/Spalte des neuen Bildes erhalten - die Interpolationsarbeit hätte IMROTATE für Dich erledigt.
Gruss Jan
|
|
|
Robin |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 11:37
Titel:
|
 |
Hi Hubertus,
ich habe gerade deinen Vorschlag versucht. Aber für meine Arbeit ist es immer noch zu aufwendig, da immer wieder muss ich vor dem Plotten die Koordinaten von der Anfang- und Endpunkt festlegen. Was ich wollte ist dass wenn ich z.B. ein Linien auf der Figure ziehe, kennt Matlab automatisch die Koordinaten der Anfang- sowie Endpunkt und plottet das "Line Profil" entlang der Linie. Und wenn ich z.B. die Linie mit dem Maus hin und her verschiebe oder die Linie verlängere oder verkürze oder Richtung der Linie ändere, kann das "Line Profil" immer an der aktueller Linie anpassen. Hättest du vielleicht eine geschickte Lösung dafür? Vielleicht muss ich eine Funktion schreiben oder kann Matlab selbe kann es schon?
Sonnige Grüße
Robin
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 11:56
Titel:
|
 |
Hallo Robin,
ich kenne kein "Line Profile" Tool.
Mir ist zwar nicht klar, wieso das Auswählen von zwei Punkten aufwändiger ist als das Ziehen einer Linie, aber ich sehe die größere Schwierigkeit darin, die Ausgabewerte zu bestimmen. Linien-Schubsen ist nur handwerkliche Arbeit, Werte entlang einer Linie zu bestimmen ist Wissenschaft und je nach Methode wirst Du unterschiedliche Werte erhalten! Wenn Deine Methode z.B. linear Interpoliert, bekommst Du eine zusammengesetzte monotone Fuktion. Falls Du aber einen Spline an die Daten fittest, ist diese Funktion auch differenzierbar, usw.
Zum Linien-Schubsen bräuchtest Du doch die ButtonDownFcn der Axes, aus GINPUT könntest Du die Methode zum finden der angeklickten Koordinaten verwenden. Wenn die Linie schon existiert, muss bei einem Klick entschieden werden, ob er auf die Linie oder auf einen Eckpunkt erfolgt ist.
In einem Tag Arbeit ist das zu machen.
Gruß, Jan
|
|
|
Robin |
Themenstarter

Forum-Newbie
|
 |
Beiträge: 5
|
 |
|
 |
Anmeldedatum: 11.07.10
|
 |
|
 |
Wohnort: ---
|
 |
|
 |
Version: ---
|
 |
|
|
 |
|
Verfasst am: 12.07.2010, 21:01
Titel:
|
 |
|
 |
|
Hallo Jan,
da die Topographie und Potential Bilder sehr unregelmäßig sind, und winzige Änderungen von Punkte zu Punkte können für mich wichtig sein. Problem ist, durch bloße Augen weiß ich nur, aha, die gewünschte Stellen liegen ungefähr hier, aber ich kann die exakte stelle nicht festlegen. Deshalb möchte ich versuchen mit "Linie Profil" die Stellen zu finden und sie zu charakterisieren. Denk mal, es gibt 512*512 punkte auf dem Bild. Die mögliche Kombinationen von ein Linien sind einfach zu viel, oder? Und ich habe nicht nur 512*512 Bilder sondern auch 1024*1024 Bilder!
Heute nachmittag hat mein Freund ein Open Source Programm empfohlen, der "ImageJ" heißt. Mit dem lässt sich meine Wüsche erfüllen. Ich kann einfach auf dem Bild ein Linie ziehen und bekomme sorfort das Linie Profil über die Linie. Und das Linien Profil passt automatisch an die Länge, die Position der Linie an. Es ist mir viel einfacher die Stelle zu finden. Es ist wirklich ein leistungsstarkes Software. Wenn du auch so Aufgabe über Bildbearbeitung hast, empfehle ich dir dieses Software auch.
Trotzdem, danke ich dir für deine warmherzige und geduldige Antwort!!
liebe Grüße
Xiaochen[/b]
|
|
|
Jan S |

Moderator
|
 |
Beiträge: 11.057
|
 |
|
 |
Anmeldedatum: 08.07.10
|
 |
|
 |
Wohnort: Heidelberg
|
 |
|
 |
Version: 2009a, 2016b
|
 |
|
|
 |
|
Verfasst am: 19.07.2010, 11:04
Titel:
|
 |
Hallo Robin,
hast Du IMPROFILE aus der Image Processing Toolbox versucht?
Jan
|
|
|
|
|
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.
|
|