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

mehrere Bilder einlesen mit dynamischem Variablennamen

 

eminence
Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 13:14     Titel: mehrere Bilder einlesen mit dynamischem Variablennamen
  Antworten mit Zitat      
Moin,
ich hab die Suche schon bemüht, finde aber keine Lösung.
Ich möchte eine Anzahl Bilder im DICOM Format einlesen und sie jeweils ihrem Dateinamen nach benennen. an Letzterem scheitere ich bisher.
Hier mein bisheriger Ansatz:
Code:

path=('/Users/Michael/Desktop/interactive/');
cd(path);
filenames=dir('*.dcm');

c = struct2cell(filenames);
m = numel(filenames);              

for k=1:m
    d = cell2str(c(1,k));
    f = fullfile(path, d(3:18));
    dynamische_variable = dicomread(f);
end
 
Private Nachricht senden Benutzer-Profile anzeigen


denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.12.2010, 14:15     Titel:
  Antworten mit Zitat      
Hallo

besser wäre es ein Struct

Code:

% das Wort path ist reserviert.  
dcm_path = ('/Users/Michael/Desktop/interactive/');
filenames  = dir(fullfile(dcm_path, '*.dcm'));

filenames = {filenames.name};
m = numel(filenames);              
bilder=[];
for k=1:m
    d = filenames{k};
    f = fullfile(dcm_path , d);
    dynamische_variable = d(3:18);
    bilder.(dynamische_variable) = dicomread(f);
end
 


sonst wenn es unbedingt variablen sein müssen, muss du EVAL verwenden

Code:

% das Wort path ist reserviert.  
dcm_path = ('/Users/Michael/Desktop/interactive/');
filenames  = dir(fullfile(dcm_path, '*.dcm'));

filenames = {filenames.name};
m = numel(filenames);              

for k=1:m
    d = filenames{k};
    f = fullfile(dcm_path , d);
    dynamische_variable = d(3:18);
    eval(sprintf('%s = dicomread(f);',dynamische_variable));
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
eminence
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 14:44     Titel:
  Antworten mit Zitat      
Vielen Dank schon mal.
wenn ich deine 1. Variante ausprobieren bekomme ich diesen Fehlertext, den ich so nicht ganz nachvollziehen kann:

??? Invalid field name: 'IM-0001-0001'.

Error in ==> test3 at 15
bilder.(dynamische_variable) = dicomread(f);
Private Nachricht senden Benutzer-Profile anzeigen
 
denny
Supporter

Supporter



Beiträge: 3.853
Anmeldedatum: 14.02.08
Wohnort: Ulm
Version: R2012b
     Beitrag Verfasst am: 15.12.2010, 14:59     Titel:
  Antworten mit Zitat      
eminence hat Folgendes geschrieben:
Vielen Dank schon mal.
wenn ich deine 1. Variante ausprobieren bekomme ich diesen Fehlertext, den ich so nicht ganz nachvollziehen kann:

??? Invalid field name: 'IM-0001-0001'.

Error in ==> test3 at 15
bilder.(dynamische_variable) = dicomread(f);


Variablen und Felder dürfen kein Minuszeichen im Namen enthalten,
weil Minuszeichen ein Operator ist. Ist aber in jeder Programmiersprache so.
Was nun? Vielleicht Minuszeichen durch Unterstrich-Zeichen ersetzen?

so:

Code:

dcm_path = ('/Users/Michael/Desktop/interactive/');
filenames  = dir(fullfile(dcm_path, '*.dcm'));

filenames = {filenames.name};
m = numel(filenames);              
bilder=[];
for k=1:m
    d = filenames{k};
    f = fullfile(dcm_path , d);
    dynamische_variable = regexprep(d(3:18),'-','_');
    bilder.(dynamische_variable) = dicomread(f);
end
 
Private Nachricht senden Benutzer-Profile anzeigen
 
eminence
Themenstarter

Forum-Newbie

Forum-Newbie


Beiträge: 9
Anmeldedatum: 15.12.10
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 15.12.2010, 15:19     Titel:
  Antworten mit Zitat      
perfecto.. vielen Dank für die äußerst schnelle kompetente Hilfe.
Private Nachricht senden Benutzer-Profile anzeigen
 
frederus
Forum-Newbie

Forum-Newbie


Beiträge: 1
Anmeldedatum: 10.01.12
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 16.01.2012, 00:38     Titel:
  Antworten mit Zitat      
Hallo erstmal!!

ich wollte deinen Code missbrauchen um in Matlab einige kleine Bilder im png-Format einzulesen und später als Autos zu benutzen.

Leider kriege ich keine Fehlermeldung und in dem Stuct autos befinden sich keine unterstructs mit den Bildern.


Code:
png_path = ('/Racer/Autos/');
filenames  = dir(fullfile(png_path, '*.png'));

filenames = {filenames.name};
m = numel(filenames);              
autos=[];
for k=1:m
    d = filenames{k};
    f = fullfile(png_path , d);
    dynamische_variable = regexprep(d(3:18),'-','_');
    autos.(dynamische_variable) = imread(f);
end


Vielen Dank im Voraus für Rückmeldungen

frederus
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: 16.01.2012, 09:58     Titel:
  Antworten mit Zitat      
Hallo frederus,

Da der Code in Ordnung zu sein scheint, würde ich den Debugger verwenden, um heraus zu finden, ob überhaupt irgendein File gefunden wird. Einfach einen Breakpoint in die erste Zeile setzen und Zeile für Zeile den Code durchlaufen lassen.

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.