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

2 Bilder aus timer function in GUI anzeigen

 

totti32
Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 16.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 12:39     Titel: 2 Bilder aus timer function in GUI anzeigen
  Antworten mit Zitat      
Hallo allerseits,

ich möchte ein Bild, was ich mit einer Webcam aufnehme und auch live anzeige, per snapshot bearbeiten, dieses dann bearbeiten und danach dann das editierte bild mit dem originalen bild überlagern, sodass man die detetierten konturen kontrollieren kann.
Dazu führe ich mit meiner pushbutton_callback function eine timer function aus, die da lautet:
Code:
t = timer('ExecutionMode', 'fixedRate','TimerFcn',{@imageAquisition,handles},'Period',handles.Period,'StartDelay',handles.StartDelay,'TasksToExecute',handles.TasksToExecute,'StopFcn',{@stopTimer,handles},'ErrorFcn',{@ErrorFcn,handles});    
start(t);



Mit Hilfe dieser timer function führe ich in regelmässigen Abständen den unten aufgeführten Code aus.
Nun habe ich aber das Problem, das die beiden gewünschten Bilder () nicht in der auf der GUI plazierten axes1 dargestellt werden, sondern sich stattdessen eine neue figure öffnet. Kann mir jmd vielleicht weiterhelfen. Danke!!

Code:
function imageAquisition(obj, event, handles)

global Duration
global Results

closepreview;
set(handles.editProcessStep,'string','Image Processing');

%% compute the running time of the test
time=(Duration-1)*handles.Period+handles.StartDelay;

%% get the image


% to preview the video again (at the end of this loop)
vid=handles.vid;
video=handles.video;


im(:,:,:,Duration)= getsnapshot(vid);   %handles.vid is just replaced by vid


%% Store Image and create filename

TestDuration=int2str(time);
number = date;                                
A=datevec(number);
B=int2str(A(1,1));
C=int2str(A(1,2));
D=int2str(A(1,3));
Comment=handles.Comment;



filename = [B,'_',C,'_',D,'_','Permeabilitaets_Berechnung','_',Comment,'_',TestDuration,'.jpg'];
imwrite(im(:,:,:,Duration),filename);                                                               %stores image in work folder
set(handles.editProcessStep,'string','Storing Image');




%% image processing

% starting with:background subtraction
% To create a more uniform background, subtract the background image,
% background, from the original image, im(:,:,:,Duration), this is prodeded
% due to enhancement of the wanted edge

background=im(:,:,:,1);
I2=im(:,:,:,Duration)-background;


% next step: the edge detection

Image = rgb2gray(I2);             % converts the coloured image to gray image


H = fspecial('gaussian',3,100);   % low pass filter, to get rid of the high frequencies like the fibre matter
I = imfilter(Image,H,'replicate');

thresh=0.99;    
sigma=5;
EdgeImage=edge(I,'canny',thresh,sigma); %canny algotrthm for edge detection


edited_filename=['edit','_',B,'_',C,'_',D,'_','Permeabilitaets_Berechnung','_',Comment,'_',TestDuration,'.jpg'];
imwrite(EdgeImage,edited_filename);


% last step: displaying the edge by overlaying edge_image and real image: using transparency to superimpose images

bg = im(:,:,:,Duration);  %defines the background image
im = EdgeImage;
imAlphaData = 0.5;          %value for the transperancy



% Now set up axes that overlay the background with the image
axes('Tag','axes2');
h_axes = findobj('tag', 'axes2');

igb2=imagesc(bg, 'Parent', h_axes);

hold on
% Overlay the image, and set the transparency previously calculated

iim2=imagesc(im, 'Parent', h_axes);

set(iim2,'AlphaData',imAlphaData);
title(handles.axes2,'detected edge and fitted ellipse');[code][/code]
Private Nachricht senden Benutzer-Profile anzeigen


Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 12:54     Titel: Re: 2 Bilder aus timer function in GUI anzeigen
  Antworten mit Zitat      
Hallo totti32,

Ich kann in Deinem Code keine Stelle finden, in der Matlab versucht etwas in ein AXES-Object "axes1" zu plotten. Der Ausdruck "axes1" taucht gar nicht auf! Statt dessen wird per:
Code:
axes('Tag','axes2');

ein neues AXES-Object erstellt, das den Tag "axes2" trägt.

Kannst Du bitte näher angeben, in welcher Zeile Du das Zeichnen in das "axes1"-Objekt erwartest?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
totti32
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 16.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 13:11     Titel:
  Antworten mit Zitat      
ooh sorry, habe mich verschrieben. Will das ganze natürlich in "axes2" darstellen lassen!
hast du ne idee?
bedankt
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 15:52     Titel:
  Antworten mit Zitat      
Hallo totti32,

Code:
axes('Tag','axes2');
h_axes = findobj('tag', 'axes2');

Dies erstellt Dir ein neues AXES Objekt. Wenn nun z.B. die Handle-Visibility der GUI-Figure auf "Callback" oder "off" steht, wird dieses AXES-Objekt in einer neuen Figure erstellt.

Ich vermute aber, im "handles"-Struct befindet sich auf der Handle des GUI-Figure-Objekts. Den kannst Du dann als Parent des AXES-Objekts angeben:
Code:
h_axes = axes('Tag', 'axes2', 'Parent', handles.gui_handle);

Wie das entsprechende Feld im "handles"-Struct heißt, weiß ich nicht.
Die obige Zeile ist übrigens effizienter als per FINDOBJ nach dem Handle suchen zu lassen. Vorallem vermeidet es den Fehler, der auftritt wenn irgendein anderes Objekt mit dem Tag "axes2" existiert, z.B. in einer zweiten Intanz des GUIs.

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
totti32
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 16.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 09.11.2010, 17:58     Titel:
  Antworten mit Zitat      
Hallo Jan,

also wenn ich deinen verbesserungsvorschlag so in den Code integriere:
Code:

h_axes = axes('tag', 'axes2','Parent',handles.gui_permeability);
 
igb2=imagesc(bg, 'Parent' , h_axes);

hold on
% Overlay the image, and set the transparency previously calculated

iim2=imagesc(im, 'Parent', h_axes);

set(iim2,'AlphaData',imAlphaData);
title(handles.axes2,'detected edge and fitted ellipse');


wobei "gui_permeability" der Tag meiner GUI ist in der sich auch "axes2" befindet, wird das Bild direkt in die GUI - also in einem Rahmen in gui_permeability - dargestellt. Kann es vielleicht sein, dass dadurch das ich das ganze mit guide geschrieben habe, irgendwelche Auswirkungen nun auftreten.

Ich bin für jede Hilfe dankbar!
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 09.11.2010, 21:17     Titel:
  Antworten mit Zitat      
Hallo totti32,
Zitat:
... wobei "gui_permeability" der Tag meiner GUI ist in der sich auch "axes2" befindet, wird das Bild direkt in die GUI - also in einem Rahmen in gui_permeability - dargestellt.

Was bedeutet "in der sich auch 'axes2' befindet"? Du erstellst da Objekt mit dem Tag "axes2" doch erst hier!

Wie unterscheidet sich nun das Ergebnis von dem, was Du erreichen möchtest?

Gruß, Jan
Private Nachricht senden Benutzer-Profile anzeigen
 
totti32
Themenstarter

Forum-Anfänger

Forum-Anfänger


Beiträge: 13
Anmeldedatum: 16.09.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 10.11.2010, 12:20     Titel:
  Antworten mit Zitat      
Moin moin,

ich habe die GUI mit guide erstellt und doch somit auch mit dessen Hilfe das Objekt mit dem Tag "axes2" schon bereits auf der GUI platziert. Mit der Codezeile:
Code:
axes('Tag','axes2');

sage ich doch dann, dass dies die axes ist, die als nächstes zum plotten bzw. zum Anzeigen meiner gewünschten Daten verwendet werden soll. Daher verstehe ich nicht, warum nun die Darstellung nicht in diesem axes erfolgt.
Um das ganze zu verdeutlichen hänge ich mal 2 screenshots von meiner GUI, in der man auch meine angesprochene "axes2" sieht; und zum anderen ein Bild vom momentanen Zusatand. Zusehen ist dabei in dem Bild "momentaner Zustand bei Ausführung der pushbutton_callback", dass das graue Bild (ist nur ein Testbild) nicht wie gewünscht in der axes mit dem Tag "axes2" dargestellt wird.

Hoffe mein Problem wird dadurch klarer.

momentaner Zustand bei Ausführung der pushbutton_callback.jpg
 Beschreibung:

Download
 Dateiname:  momentaner Zustand bei Ausführung der pushbutton_callback.jpg
 Dateigröße:  117.06 KB
 Heruntergeladen:  412 mal
GUIPermeability.jpg
 Beschreibung:

Download
 Dateiname:  GUIPermeability.jpg
 Dateigröße:  150.07 KB
 Heruntergeladen:  426 mal
Private Nachricht senden Benutzer-Profile anzeigen
 
Jan S
Moderator

Moderator


Beiträge: 11.057
Anmeldedatum: 08.07.10
Wohnort: Heidelberg
Version: 2009a, 2016b
     Beitrag Verfasst am: 10.11.2010, 20:33     Titel:
  Antworten mit Zitat      
Hallo totti32,
Zitat:
Mit der Codezeile:
Code:
axes('Tag','axes2');

sage ich doch dann, dass dies die axes ist, die als nächstes zum plotten bzw. zum Anzeigen meiner gewünschten Daten verwendet werden soll.

Nein. Die Zeile erstellt ein neues AXES-Objekt mit dem Tag "axes2".

Ich nehme an, Du meinst:
Code:
axes(handles.axes2);

Siehe "help axes".
Es ist aber immer sicherer, das Parent-Objekt direkt zu definieren. In Deinem Beispiel also:
Code:

igb2=imagesc(bg, 'Parent' , handles.axes2);
hold('on');
iim2=imagesc(im, 'Parent', handles.axes2);
set(iim2,'AlphaData',imAlphaData);
title(handles.axes2,'detected edge and fitted ellipse');

Also den AXES ind FINDOBJ Befehl ganz weglassen!

Gruß, Jan
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.