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

ginput -Skallierung ändern-

 

jofa
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 11.02.11
Wohnort: Darmstadt
Version: R20011a
     Beitrag Verfasst am: 30.08.2011, 17:08     Titel: ginput -Skallierung ändern-
  Antworten mit Zitat      
Hallo zusammen,
ich weiss, dass das Thema schon geposted wurde, leider muss ich dennoch fragen.

Habe ein kleines Programm welches Graphiken einliest, leider schaffe ich es nicht die Werte umzuskalieren.

Hier mein Code:
Code:

figure;
image(g);
axis off;
%--------------------------------------------------
% Show the important part of the picture only
%--------------------------------------------------
fprintf('%s\n','Pick the important part of the picture.')
fprintf('%s\n','Press mouse button in upper left corner')
fprintf('%s\n','followed by lower right corner.')
[ax,ay] = ginput(2);
axis([ax(1) ax(2) ay(1) ay(2)]);

%--------------------------------------------------
% Transform the y-axis of the coordinate system into forces.
%--------------------------------------------------
for k = 1:2    
    fprintf('\n%s %d\n','Pick y value',k)
    [a(k) yt(k)] = ginput(1);
    fprintf('\n%s\n','Input corresponding y-value')
    yval(k) = input('');
end

%--------------------------------------------------
% Transform the x-axis of the coordinate system into pp-lift
%--------------------------------------------------
for k = 1:2    
    fprintf('\n%s %d\n','Pick x value',k)
    [xt(k) b(k)] = ginput(1);
    fprintf('\n%s\n','Input corresponding x-value')
    xval(k) = input('');
end

% ????
set(gca,'AlimMode','manual')
axis([xval(1) xval(2) yval(1) yval(2)]);


%--------------------------------------------------
% Read in points from the graph
%--------------------------------------------------
fprintf('\n%s\n','Pick points on the graph, end by pressing enter.')
[dx,dy] = ginput;
 


Durch set(gca'') dachte ich es realisieren zu können, aber irgendwie habe ich einen Denkfehler.
Danke für die Hife!
Gruß jofa
Private Nachricht senden Benutzer-Profile anzeigen


jofa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 11.02.11
Wohnort: Darmstadt
Version: R20011a
     Beitrag Verfasst am: 31.08.2011, 13:10     Titel:
  Antworten mit Zitat      
Hallo zusammen,

habe die Frage zu kompliziert gestellt, glaube ich.
Habe einen graphischen Verlauf als .jpg oder .bmp vorliegen. Möchte nun die Punkte über ginput() einlesen und die Koordinaten möchte ich abändern und denen im Bild anpassen. Leider bekomme ich die Koodinaten des figures, also Werte die mit dem Bild logischerweise nichts zutun haben.

Wie kann ich die Skalierung anpassen?
habe es über:
Code:

set(gca,'AlimMode','manual')
axis([xval(1) xval(2) yval(1) yval(2)]);
 


probiert. Leider bekomme ich dann den Ausschnitt des Figures gezeigt Sad
Jemand eine Idee, wie ich vin diesem Schlacuh runter komme???

Danke jofa
Private Nachricht senden Benutzer-Profile anzeigen
 
eupho
Forum-Meister

Forum-Meister


Beiträge: 777
Anmeldedatum: 07.01.09
Wohnort: Marburg
Version: R2009b
     Beitrag Verfasst am: 31.08.2011, 13:24     Titel:
  Antworten mit Zitat      
Also ich habe es immer noch nicht verstanden (falls das was helfen sollte). Vielleicht bringst du einfach mal ein Beispiel mit Zufallszahlen und nur dem Code, der relevant ist.
Private Nachricht senden Benutzer-Profile anzeigen
 
jofa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 11.02.11
Wohnort: Darmstadt
Version: R20011a
     Beitrag Verfasst am: 31.08.2011, 13:46     Titel:
  Antworten mit Zitat      
Hallo Guru,

danke für Deine Antwort!

Ich habe nun eine Beispieldatei in Anhang.

Diese möchte ich im groben raster auslesen.

Mein Ansatz ist der, dass ich über ginput() mir Punkte erzeuge, was soweit auch klappt.
Diese Punkte würde ich gerne auf die Koordinaten transformieren, wie sie auch in der eingelsenen Datei sind.
axis([1 12 0 160])
wobei x(1) = 1: der erste Tage ist und x(2) = 12 der 12te Tag
y(1) = 0 0€/MWh und y(2) = 160 €/MWh

Denn die Punkte die mir ginput() zurück gibt, sind natürlich ganz anders, vermute die x,y Koordinaten des figures!?!

Würde gerne die y-Achse und x-Achse so umskalieren, dass sie mit dem des Bildes übereinstimmt!

Hoffe nun ist es klarer!

Danke, Gruß jofa

Strompreise.JPG
 Beschreibung:

Download
 Dateiname:  Strompreise.JPG
 Dateigröße:  179.61 KB
 Heruntergeladen:  654 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Hubertus
Forum-Meister

Forum-Meister


Beiträge: 1.034
Anmeldedatum: 08.01.09
Wohnort: Hamburg
Version: ---
     Beitrag Verfasst am: 31.08.2011, 14:23     Titel:
  Antworten mit Zitat      
Moin,

auch ich kann im Moment nicht erkennen, wo Dein Problem ist - aber vielleicht hat das auch nichts zu sagen. Ginput liefert Dir Bildkoordinaten zurück, die auch mit dem Bild übereinstimmen. Mache mal folgendes Beispiel:

Code:
I=imread('cameraman.tif');
figure; imshow(I)
[x,y]=ginput(4);  % Reihenfolge siehe unten
M=poly2mask(x,y,size(I,1),size(I,2));
Imasked=uint8(M).*I;
figure; imshow(Imasked)


Reihenfolge:
Zuerst obere linke Ecke - dann untere linke Ecke;
Untere rechte Ecke und zuletzt obere rechte Ecke (gegen den Uhrzeiger)

Wenn Du einen schönen, sauberen Ausschnitt haben möchtest (ist freihändig etwas schwierig) dann kannst Du Dir x und y ausgeben lassen und ggf. korrigieren.

Viele Grüße

Hubertus
Private Nachricht senden Benutzer-Profile anzeigen
 
jofa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 11.02.11
Wohnort: Darmstadt
Version: R20011a
     Beitrag Verfasst am: 31.08.2011, 16:20     Titel:
  Antworten mit Zitat      
Hallo Hubertus,

danke auch dir für Deine Antwort.

Ich möchte definieren, dass die x-Achse von 0-160 geht und die y-Achse von 1 -12. So würden neue koordinaten für die Punkte entstehen, die ich mir mit ginput() einlese.

Hätte zu Deiner Lösung noch eine Frage.
Das umgehen der Image Processing Toolbox ist mir für imshow() mit image() möglich.
Mir erschließt sich nicht ganz wofür ich poly2mask() brauche.

Wie gesagt, möchte eine Image in eine x-Achse und y-Achse legen, wobei ich die Skalierung der Achsen an einem Punkt über input() eingeben muss, oder? Dann möchte ich aus diesem defnierten Koordinatenkreuz, mit dem Graph, dass Bild abtasten mit ginput() um so in den von definierten Achsen Punkte zu erhalten, sodass ich aus dem .jpg digitale Werte bekomme zum weiterverarbeiten.

Danke für die Hilfe!
VG jofa
Private Nachricht senden Benutzer-Profile anzeigen
 
jofa
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 11.02.11
Wohnort: Darmstadt
Version: R20011a
     Beitrag Verfasst am: 02.09.2011, 13:08     Titel:
  Antworten mit Zitat      
Hallo zusammen,

für die, die es interessiert da ich schon sehr viel von diesem Forum lernen konnte!Mein Problem war, dass ich dem einzulesenden Graphen seine Skallierung zuteilen möchte.
ginput() liefert Koordinaten des figures => lineare transformation x0 -> x1 und y0 -> y1
habe es im groben mit polyfit und polyval umgesetzt.
Meine Lösung sieht nun so aus:
Code:

typ = 'PNG';
bild = sprintf('%s%s',pathname,filename);
g = imread(bild,typ);

% ploten des Bildes
figure;
image(g);
axis off;

% Ausschneiden des wichtigen Teils
fprintf('%s\n','Auswahl des wichtigen Bereichs.')
fprintf('%s\n','Erstens linke obere Ecke')
fprintf('%s\n','anschließend untere rechte Ecke.')
[ax,ay] = ginput(2);
axis([ax(1) ax(2) ay(1) ay(2)]);

% y-Achsen Skalierung einlesen
for k=1:2
    fprintf('\n%s\n',['Enter input y1(' num2str(k) ')'],k)
    [b(k), y0(k)] = ginput(1);
    y1(k) = input('');
end
py = polyfit(y0, y1,1);
% x-Achsen Skalierung einlesen
for k=1:2
    fprintf('\n%s\n',['Eingabe input x1(' num2str(k) ')'],k)
    [x0(k), b(k)] = ginput(1);
    x1(k) = input('');
end

% Erstellen der Koeffizienten zur linearen Transformation
px = polyfit(x0,x1,1);
%Transformation der eingelesenen Wert
[tmpx, tmpy] = ginput();
x = polyval(px, tmpx);
y = polyval(py, tmpy);

% plot des eingelsenen Graphen
figure
plot(x,y,'k.-');

% Speichern der Werte
[outputfil,outpath] = uiputfile('*.txt','Save output data as');
s = sprintf('%s%s',outpath,outputfil);
fid = fopen(s,'wt');
fprintf(fid,'%f\t%f\n',0,0);
 


Viele Grüße und auf bald!
jofa
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 - 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.