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

Figure als axes anzeigen lassen

 

Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2020, 13:27     Titel: Figure als axes anzeigen lassen
  Antworten mit Zitat      
Moin in die Runde,

ich schreibe gerade für meine Abschlussarbeit ein GUI und bin etwas ratlos. Zunächst lade ich ein gespeichertes Bild in mein GUI mit dem folgenden Code:

Code:

         [tmp_file, tmp_path] = uigetfile({'*.png;*.jpg;*.bmp'}, 'Image files', 'select Image as Mask' )
         app.Mask = imread(fullfile(tmp_path, tmp_file));
         image(app.Mask);
         axis off
         pbaspect([1 1 1])
         h1=figure(1);
         set(gcf, 'Visible', 'off');

         imagesc(app.PlotPreview_4,app.Mask)
         colormap(app.PlotPreview_4,'gray');
         caxis(app.PlotPreview_4,[0 255]);
 


Dieses Bild möchte ich nun Fouriertransformieren mittels einer Variante des IFTA. Die Fouriertransformierte soll dann in einem anderen Axes angezeigt werden. Dafür ist dieser Code:

Code:

            N = 512;
            A = im2double(rgb2gray(app.Mask));
            A = padarray(A,[N-150 N-150],'post');
            B = zeros(N,N);
            B(129,129) = 1000;

            A1 = ifftshift(ifft2(A));
            B1 = ifftshift(ifft2(B));
            D1 = A1+B1;
            M = abs(D1).^2-abs(A1).^2-abs(B1).^2;
            [X,Y] = meshgrid(linspace(-100,100,N),linspace(-100,100,N));
         
            app.Mask = M;
           
            figure('Name','app.Mask')
            h = pcolor(app.Mask);
            set(h,'EdgeColor','none')
            colormap(gray)
            set(gca,'Visible', 'off')
            set(gca,'LooseInset',get(gca,'TightInset'))
           
            imagesc(app.PlotPreview_3, app.Mask)
            colormap(app.PlotPreview_3,'gray');
            caxis(app.PlotPreview_3,[0 255]);
 


Diesen habe ich aus einem Paper über besagte IFTA Alternative. Die letzten drei Zeilen sollen mir dann diese Maske in dem Plot-Fenster anzeigen. Leider wird mir die Fouriertransformierte allerdings nur als Figure ausgegeben und in dem PlotPreview-Fenster ist nur ein schwarzes Bild zu sehen. Wie bekomme ich das Bild aus dem Figure in die axes-Umgebung? Kann mir da jemand weiterhelfen?

Tut mir super Leid, wenn ich hier programmiertechnischen Quatsch oder so mache. Ich habe viel Code von meinem Betreuer übernommen und ohne mich mit Matlab richtig auszukennen einfach mal losgelegt. Ich freue mich über jede Hilfe, die ich von euch erhalte. Danke schonmal.

Mit besten Grüße
Jan

P.S. Ich hoffe, dass der Code richtig angezeigt wird.


Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2020, 14:17     Titel:
  Antworten mit Zitat      
Hallo,

mir ist nicht klar, welche Zeilen nun das Problem darstellen.
Generell würde ich in App Designer bei jedem Graphik-Befehl das Axes angeben, in dem sie ausgeführt werden sollen.
Der figure-Befehl erzeugt ein separates Fenster. Wenn du kein separates Fenster willst, dann solltest du das weglassen.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2020, 15:24     Titel:
  Antworten mit Zitat      
Hallo Harald,

danke für deine Antwort. Wenn ich den figure-Befehl herauslasse, dann wird mir das figure nicht mehr angezeigt, aber in dem vorgesehenen plot-Fenster im GUI, ist nur eine schwarze Fläche. Gibt es einen Code, um das Bild aus dem externen Fenster explizit in solch ein plot-Figure einzubetten?

Lieben Gruß
Jan
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2020, 15:38     Titel:
  Antworten mit Zitat      
Hallo,

bitte schreib doch, welche Zeilen konkret das Problem darstellen.

Zitat:
Gibt es einen Code, um das Bild aus dem externen Fenster explizit in solch ein plot-Figure einzubetten?

Nicht dass ich wüsste. Man kann höchstens die darin enthaltenen Objekte kopieren (copyobj). Das sollte aber keinen Unterschied in der Darstellung machen im Vergleich zur direkten Erstellung des Plots in App Designer.

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2020, 15:48     Titel:
  Antworten mit Zitat      
Moin Harald,

ich bekomme keine Fehlermeldung, wenn ich das Programm laufen lasse. Was mich wundert ist, dass in dem Plot-Feld des GUI nicht das Selbe angezeigt wird, wie in dem externen figure.

Wenn ich ein Bild auswähle, wird mir dieses korrekt angezeigt und die Fouriertransformierte auf Knopfdruck im externen figure. Wenn ich nun erneut den Befehl zur Transormation gebe, bekomme ich einen Fehler beim Befehl
Code:


Dieser Fehler lautet:
Error using rgb2gray>parse_inputs (line 80)
MAP must be a m x 3 array.

Error in rgb2gray (line 52)
isRGB = parse_inputs(X);

Kannst du damit was anfangen?

Besten Gruß
Jan
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2020, 15:52     Titel:
  Antworten mit Zitat      
Und noch eine Frage... Wie meinst du das, das hinter jedem Grafik-Befehl die Axes mit angegeben werden soll. Wie muss ich das machen?
Und sorry, wenn ich so dumme Fragen stelle, aber ich bin wirklich etwas aufgeschmissen...
 
Harald
Forum-Meister

Forum-Meister


Beiträge: 24.448
Anmeldedatum: 26.03.09
Wohnort: Nähe München
Version: ab 2017b
     Beitrag Verfasst am: 18.10.2020, 16:25     Titel:
  Antworten mit Zitat      
Hallo,

die Befehle
Code:
set(gca,'Visible', 'off')
set(gca,'LooseInset',get(gca,'TightInset'))

beziehen sich auf das momentane Axes. Das ist ungut, stattdessen würde ich z.B. app.plotPreview verwenden oder worauf auch immer das angewendet werden soll.

Zitat:
Was mich wundert ist, dass in dem Plot-Feld des GUI nicht das Selbe angezeigt wird, wie in dem externen figure.

Das wundert mich auch, und ich weiß immer noch nicht, bei welchem Befehl es nun eigentlich hakt. Das müsstest du mir schon schreiben, ich kann es ja schlecht ausprobieren ohne App, Daten etc. Wenn du dir nicht sicher bist, wo das Problem ist, dann geh das im Debugging-Modus Schritt für Schritt durch.

Zitat:
Wenn ich nun erneut den Befehl zur Transormation gebe, bekomme ich einen Fehler

Wenn MATLAB zweimal dieselben Anweisungen bekommt, macht es auch zweimal dasselbe. Was ändert sich also in der Zwischenzeit? Wird insbesondere app.Mask überschrieben?

Grüße,
Harald
_________________

1.) Ask MATLAB Documentation
2.) Search gomatlab.de, google.de or MATLAB Answers
3.) Ask Technical Support of MathWorks
4.) Go mad, your problem is unsolvable ;)
Private Nachricht senden Benutzer-Profile anzeigen
 
Gast



Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 18.10.2020, 16:32     Titel:
  Antworten mit Zitat      
Hallo Harald,

mittlerweile habe ich den Fehler gefunden. Das schwarze Bild in den Axes war schon richtig, jedoch musste ich statt imagesc ein pcolor verwenden. Dann hat es hingehauen.

Die set(...)-Befehle werde ich gleich nochmal auf das plotPreview beziehen. Das ist ein guter Tipp.

Der Fehler entstand tatsächlich wohl durch solch eine Überschreibung, aber mittlerweile taucht er auch nicht mehr auf.

Hab also vielen, vielen Dank für deine Hilfe! Ich bin ganz begeistert, dass es jetzt funktioniert!

Lieben Gruß und einen schönen Sonntag noch!
Jan
 
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.