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

Bild einlesen und anzeigen lassen

 

steve
Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.09.2007, 10:07     Titel: Bild einlesen und anzeigen lassen
  Antworten mit Zitat      
Hallo zusammen,
ich fange grade an mich ein bisschen in die GUI-Programmierung einzuarbeiten und habe schon ein kleines Problem:
Ich möchte ein Bild einlesen und anzeigen lassen.
Dazu habe ich mir axes definiert
Code:
% Axes for Original Image
axes_img_org = axes('Visible','on',...
                    'Units','Pixels',...
                    'Position',[685,490,590,420]);

und will dann in der Callback-Funktion das eingelesene Bild anzeigen lassen:
Code:
[FileName,PathName] = uigetfile('*.JPG','Select Original Image');
    img_org = imread(FileName);
    axes(axes_img_org)
    imshow(img_org);
    axis off;


Matlab sagt mir aber dann folgendes
Code:
??? Undefined function or variable 'axes_img_org'.

Error in ==> GUI_test>img_load at 87
    axes(axes_img_org)

??? Error while evaluating uicontrol Callback


Ich vermute, dass ich die Variable 'axes_org_img' an die Funktion übergeben muss - nur wie?

Zur besseren Übersicht habe ich das m.-file mit angehängt.

Vielen Dank schon mal
Alex

test.m
 Beschreibung:

Download
 Dateiname:  test.m
 Dateigröße:  2.55 KB
 Heruntergeladen:  1477 mal

_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen


steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 06.09.2007, 12:41     Titel:
  Antworten mit Zitat      
Ich habs hinbekommen Smile
Ich habe jetzt den Variablennamen auf 'p.axes_org_img' geändert und damit dem Vektor p zugeordnet. Damit funktioniert die Übergabe an die Funktion.
Code:

% Axes for Original Image
p.axes_img_org = axes('Visible','on',...
                    'Units','Pixels',...
                    'Position',[685,490,590,420]);

und
Code:
[FileName,PathName] = uigetfile('*.JPG','Select Original Image');
    img_org = imread(FileName);
    axes(p.axes_img_org)
    imshow(img_org);
    axis off;


Gruß
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 10.09.2007, 14:20     Titel:
  Antworten mit Zitat      
Ich habe hier doch nochmal eine Frage zu:
Ich habe ein GUI geschrieben, in der ich drei Axes definiere. Im ersten soll das Orginal-Bild dargestellt werden (klappt), im zweiten soll ein Histogramm ausgegeben werden (klappt auch), im dritten soll ein weiteres Bild ausgegeben werden, welches sich aus dem Orginalbild ergibt (klappt nicht wirklich).
Das Histogramm und das 2. Bild werden in einer separaten Funktion berechnet und übergeben.
Das Histogramm wird auch an die Stelle gesetzt, wo ich es haben will, das 2. Bild wird allerdings in einer separaten figure geöffnet und das GUI gleichzeitig geschlossen.
Hier die zugehörigen Code-Auszüge:
1. Axes-Definition:
Code:
% Axes for Hisogram        
p.axes_hist = axes('Visible','on',...
                   'Units','Pixels',...
                   'Position',[685,25,590,420]);
% Axes for outlined grayscaled image
p.axes_out = axes('Visible','on',...
                  'Units','Pixels',...
                  'Position',[25,25,590,420]);

2. Übergabe innerhalb der Callback-Funktion:
Code:
axes(p.axes_hist),imhist(hist);
 
    axes(p.axes_out)
    imshow(BWout);
    axis off;


Ich hoffe es kennt jemand mein Problem und kann mir helfen.

Vielen Dank
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.09.2007, 11:23     Titel:
  Antworten mit Zitat      
Ich gehe mal davon aus, das ihr mit meiner Frage nichts anfangen könnt.
Darum stelle ich hier mal das Paket zur Verfügung.
Als Image '1.jpg' laden und als Blank '2.jpg'.

Ich hoffe der Fehler lässt sich reproduzieren.

Gruß
Alex

GUI_test.m.zip
 Beschreibung:

Download
 Dateiname:  GUI_test.m.zip
 Dateigröße:  22.56 KB
 Heruntergeladen:  1385 mal

_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 13.09.2007, 14:07     Titel:
  Antworten mit Zitat      
Hallo Alex (oder steve),

nur mal als Zeichen, dass deine Frage nicht übersehen wird: Ich kann das GUI leider nicht ausführen, weil mir (hier, morgen geht's vielleicht) Funktionen wie imshow und rgb2gray fehlen. Wenn ich die Zeichenbefehle durch irgendwelche anderen ersetze ("surf(peaks)", was immer geht), kann ich den Fehler nicht reproduzieren, also das dritte Bild wird richtig in der axes p.axes_out erzeugt, das GUI bleibt geöffnet.
Ich versuch's morgen noch mal mit deinem GUI.

BTW (Achtung Besserwisserei!): Sowas wie
Code:
[x,y] = size(hist_neg);
k = 0;
for i=1:x
    for j=1:y
        if BW(i,j) == 1
            k = k+1;            
            thresh(k) = hist_neg(i,j);
        end
    end
end

ist nicht schön. Probier's mal mit logischer Indizierung:
Code:
thresh=hist_neg(BW==1);

und vergleich das Ergebnis und die Laufzeit.

Herzliche Grüße
Bijick (bis morgen)
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 13.09.2007, 18:30     Titel:
  Antworten mit Zitat      
Bijick hat Folgendes geschrieben:

BTW (Achtung Besserwisserei!): Sowas wie
Code:
[x,y] = size(hist_neg);
k = 0;
for i=1:x
    for j=1:y
        if BW(i,j) == 1
            k = k+1;            
            thresh(k) = hist_neg(i,j);
        end
    end
end

ist nicht schön. Probier's mal mit logischer Indizierung:
Code:
thresh=hist_neg(BW==1);

und vergleich das Ergebnis und die Laufzeit.


Vielen Dank, das beschleunigt die Sache schon mal ein wenig Wink

Bis morgen
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 14.09.2007, 12:38     Titel:
  Antworten mit Zitat      
Hallo Alex,

ich konnte den Fehler jetzt reproduzieren und eingrenzen. Es liegt definitiv an imhist. Dabei geht irgendetwas mit den axes kaputt. Man sieht es auch daran, dass danach der Hintergrund des ganzen GUIs weiß ist, nicht nur in der p.axes_hist. Ich schau mir jetzt noch das imhist.m genauer an. Vielleicht finde ich ja was.

Bis dahin biete ich eine Umgehung mit "stem" an:
Code:
function img_analysis(source,eventdata)

    p = guidata(source);
    [hist,count,BWout] = testfile(p);
    [counts,x] = imhist(hist);
    axes(p.axes_hist);
    stem(x,counts,'MarkerSize',0);
    axis([1 255 5 600]);
   
    set(p.counts,'String',count);
   
    axes(p.axes_out)
    imshow(BWout);
    axis off;

Ist aber sicher nur die "zweitbeste" Lösung.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
Bijick
Ehrenmitglied

Ehrenmitglied



Beiträge: 914
Anmeldedatum: 18.06.07
Wohnort: Nürnberg
Version: R2006b, R2008b
     Beitrag Verfasst am: 14.09.2007, 13:55     Titel:
  Antworten mit Zitat      
Also gut, wenn Du Dich traust, im imhist.m herumzupfuschen, kann ich folgendes anbieten (Du kannst die geänderte Funktion auch unter "myimhist.m" speichern und dann anstelle von imhist aufrufen):

Um die Farbskala unter dem Histogramm richtig anzugeben, ergänzt man in Zeile 127 'Units','pixels', also
Code:
axes('Units','Pixels','Position', [pos(1) pos(2) pos(3) stripe*pos(4)]);
 


Um das "zweite" Bild in die richtige axes zu bekommen, muss man Zeile 206 auskommentieren, also
Code:
%set(gcf,'Nextplot','replace')


Ach so, ich arbeite hier mit Matlab Version 7.1.0. Und jetzt sollte ich vielleicht auch wieder mal an die Arbeit gehen... Smile Hat aber viel Spaß gemacht.

Herzliche Grüße
Bijick
_________________

>> why
Private Nachricht senden Benutzer-Profile anzeigen E-Mail senden
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 14.09.2007, 14:54     Titel:
  Antworten mit Zitat      
Vielen vielen Dank für deine Mühe!
Den ersten Tip habe ich bereits erfolgreich testen können, den zweiten werde ich nächste Woche testen!

Bis dahin (mit einem glücklichen Gesicht Smile )
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
Private Nachricht senden Benutzer-Profile anzeigen
 
steve
Themenstarter

Ehrenmitglied

Ehrenmitglied



Beiträge: 2.029
Anmeldedatum: 03.09.07
Wohnort: Wien
Version: R2024a
     Beitrag Verfasst am: 28.09.2007, 11:06     Titel:
  Antworten mit Zitat      
Bijick hat Folgendes geschrieben:
Um die Farbskala unter dem Histogramm richtig anzugeben, ergänzt man in Zeile 127 'Units','pixels', also
Code:
axes('Units','Pixels','Position', [pos(1) pos(2) pos(3) stripe*pos(4)]);
 


Um das "zweite" Bild in die richtige axes zu bekommen, muss man Zeile 206 auskommentieren, also
Code:
%set(gcf,'Nextplot','replace')



Hallo zusammen,
die beiden oben genannten Tipps habe ich nun endlich umsetzen wollen, musste aber dabei feststellen, dass ich wenn ich die imhist.m editiere und als myimhist.m in meinem Arbeitsordner abspeichere, der Aufruf der Fkt. myimhist.m zum komplett Absturz von Matlab führt.
Ich arbeite hier mit einer Netzwerk-basierten Matlab-Version. Ich vermute ich mal, dass die neue Fkt. myimhist.m in den Original-Ordner (wo sich auch imhist.m befindet) abspeichern muss, oder?

Trotzdem vielen Dank für deine Hilfe Bijick!

Grüße
Alex
_________________

>> I told me to.

____________________________________
Matlab Cheat Sheet
goMatlab-Knigge - dran gehalten?!
Schon in den FAQ gesucht?
Ist vielleicht bei den Skripten oder den Tutorials was für dich dabei?
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.