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

Problem imroi

 

obidabibobo
Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 20:02     Titel: Problem imroi
  Antworten mit Zitat      
Hallo,

Ich verwende imroi in Form von imellipse/imline/imrect.
Habe einen Viewer in dem ich mir ein Bild mittels imshow einzeichne und will mehrere ROIs darüber einzeichnen. Die imroi handler speichere ich mir in einem cell-array.
Wenn ich das Bild im Hintergrund ändere (imshow) werden aber die imrois irgendwie gelöscht. Rufe ich die Handler auf steht dort deleted.

Hier ist der code in dem ich die imrois erzeuge.
Bild wird wie gesagt mit imshow angezeigt.
Code:

    axes_handle = handles.viewer;
    if regexpi(type,'imfreehand')
        h = imfreehand(axes_handle);
    elseif regexpi(type,'impoly')
        h = impoly(axes_handle,pos);
    elseif regexpi(type,'imrect')
        h = imrect(axes_handle,pos);
    elseif regexpi(type,'imellipse')
        h = imellipse(axes_handle,pos);
    end
    setColor(h,'green');
    handles.roi_info.roi_handlers{end+1} = h;
    handles.roi_info.roi_type{end+1} = type;
    handles.roi_info.roi_pos{end+1} = h.getPosition();
 


Die imroi handle gehen irgendwie beim imshow verloren.

Hat jemand eine Idee wie man das verhindern kann?
Jedes mal die imrois neu zu erstellen ist jedenfalls nicht die feine Art.
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: 23.05.2011, 20:14     Titel: Re: Problem imroi
  Antworten mit Zitat      
Hallo obidabibobo,

Es wäre praktisch, wenn Du einen möglichst kurzen Code-Abschnitt postest, der das Verhalten reproduziert.

Vielleicht hilft es weiter, wenn Du die Eigenschaft 'NextPlot' der AXES auf 'add' setzt. Das ist das gleiche wie "hold('on')".

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 21:13     Titel:
  Antworten mit Zitat      
Danke für die schnelle Antwort.
Das geht schon in die richtige Richtung, hat leider nicht geholfen.
Könnte es vielleicht etwas helfen an der 'HandleVisibility' property zu schrauben?

Hier ein minimal Beispiel:
Code:

function minimal_example(varargin)
    close all;
    h = figure('name','minimal handler example');
    [fin,pathin] = uigetfile('*.jpg');
   
    imshow(imread(fullfile(pathin,fin)));
    set(h,'nextPlot','add');
    for i = 1:3
         roi_h(i) = imellipse();
         %set(roi_h(i),'HandleVisibility','callback');
    end
   
    [fin,pathin] = uigetfile('*.jpg');
    imshow(imread(fullfile(pathin,fin)));
   
    sprintf('handles deleted: %s',mat2str(~isvalid(roi_h)))
end
 
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: 23.05.2011, 21:42     Titel:
  Antworten mit Zitat      
Hallo obidabibobo,

Wenn ich IMAGE statt IMSHOW verwende, werden die IMELLIPSE-Objekte nicht gelöscht, wenn 'NextPlot'='add' für das AXES-Objekt gesetzt wurde.

Statt ein neues Bild zu zeichnen, könnte man auch das neue Bild in die CData des existierenden IMAGE-Objekts einzusetzen.

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

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 22:11     Titel:
  Antworten mit Zitat      
Super.
Funktioniert mit dem 'CDATA' property.
Vielen Dank für die schnelle Hilfe.

Code:

function minimal_example(varargin)
    close all;
    h = figure('name','minimal handler example');
    [fin,pathin] = uigetfile('*.jpg');
   
    himage = imshow(imread(fullfile(pathin,fin)));
    for i = 1:3
         roi_h(i) = imellipse();
    end
   
    [fin,pathin] = uigetfile('*.jpg');
    set(himage,'CDATA',imread(fullfile(pathin,fin)));
   
    sprintf('handles deleted: %s',mat2str(~isvalid(roi_h)))
end
 


SOLVED!
Private Nachricht senden Benutzer-Profile anzeigen
 
obidabibobo
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 4
Anmeldedatum: 23.05.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 23.05.2011, 22:36     Titel:
  Antworten mit Zitat      
Doch noch nicht ganz gelöst.
Mir geht die Funktionalität der DisplayRange verloren.
Wenn ich imshow aufrufen funktioniert das ganz gut:
Code:
himg = image(I,[low high])


Mit dem Handler funktioniert das leider nicht mehr.
Diese Funktionalität bräuchte ich aber.

Code:

function minimal_example(varargin)
    close all;
    h = figure('name','minimal handler example');
    [fin,pathin] = uigetfile('*.jpg');
   
    himage = imshow(imread(fullfile(pathin,fin)));
    for i = 1:3
         roi_h(i) = imellipse();
    end
    set(himage,'CDATA',createMask(roi_h(1)),'DisplayRange',[0 1]);
   
    sprintf('handles deleted: %s',mat2str(~isvalid(roi_h)))
end
 
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.