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

Auswertung unter eigenen Variablennamen speichern

 

mpg2013

Gast


Beiträge: ---
Anmeldedatum: ---
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 11.04.2014, 19:07     Titel: Auswertung unter eigenen Variablennamen speichern
  Antworten mit Zitat      
Hallo zusammen,

kurz vorweg, ich bin absoluter Anfänger in Bezug auf Matlab und gerade ein wenig am Verzweifeln. Crying or Very sad Embarassed Habe heute den ganzen Tag die Dokumentation und die Foren gewälzt, aber ich bekomme es einfach nicht hin.
Ich möchte über etwa 200 Bilder Texturparameter in einer Grauwertmatrix berechnen und dies per Batch automatisieren. Die Bilder werden mit ihren Dateinamen als Variablennamen geladen (hier nicht enthalten) und sollen dann über vier verschiedene Winkelangaben (je eine Wertetabelle mit verschiedenen Parametern) ausgewertet werden. Dies geschieht durch Nutzung eines fertigen Skriptes.


Code:

%Einlesen Variablennamen

data=who('T*')
data2=cellstr(data)
td = numel(data2)

%Parameter für GLCM

vv = input('Bitte Verschiebungsvektor d angeben: ')
nl = input('Grauwertstufen angeben (256, 8, 2) ')

% Generierung der Verschiebungsvektoren für alle vier Winkel

offsets0 = [zeros(vv,1) (1:vv)']
offsets90=[(-vv:-1)' zeros(vv,1)]
offsets135=[(-vv:-1)' (-vv:-1)']
offsets45=[-(1:vv)' (1:vv)']

%Berechnung GLCM und Parameter über alle Variablen

for k=1:td

%Variablenaufruf für graycomatrix

var_d = eval([data2{k}])

%Erstellen der GLCM für alle vier Winkel über das angegebene Offset

GLCM_0= graycomatrix(var_d,'Offset',offsets0,'Numlevels',nl , 'Symmetric',true);
GLCM_45= graycomatrix(var_d,'Offset',offsets45,'Numlevels',nl , 'Symmetric',true);
GLCM_90= graycomatrix(var_d,'Offset',offsets90,'Numlevels',nl , 'Symmetric',true);
GLCM_135= graycomatrix(var_d,'Offset',offsets135,'Numlevels',nl , 'Symmetric',true);

%Auswertung der GLCM nach Parametern von GLCM_Features1

stats_0 = GLCM_Features1(GLCM_0,0)
m=0

stats_45 = GLCM_Features1(GLCM_45,0)

stats_90 = GLCM_Features1(GLCM_90,0)

stats_135 = GLCM_Features1(GLCM_135,0)

 


Die entstehenden Variablen stats_0, stats_45, stats_90 und stats_135 sollen mit dem entsprechenden Variablennamen data2{k} kombiniert abgelegt werden.
Ich habe verschiedenes probiert, bekomme diese Umbenennung aber einfach nicht hin.

Vielleicht kann mir hier jemand weiterhelfen.

Danke


Harald
Forum-Meister

Forum-Meister


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

selbst wenn du es hinbekommst, ist es keine gute Idee. Du wärst anschließend gezwungen, mit EVAL zu arbeiten, und davon wird in diversen Beiträgen abgeraten.

Alternative wären beispielsweise Strukturen. Für die Abspeicherung in .mat-Dateien könnte man auch die Datei so benennen.

Grüße,
Harald
Private Nachricht senden Benutzer-Profile anzeigen
 
Sirius3
Forum-Guru

Forum-Guru


Beiträge: 441
Anmeldedatum: 12.11.11
Wohnort: ---
Version: ---
     Beitrag Verfasst am: 12.04.2014, 10:30     Titel:
  Antworten mit Zitat      
Hallo mpg2013,

wie in vielen anderen Forumsbeiträgen kann man auch Dir nur davon abraten, variable Informationen in Variablennamen abzuspeichern. Dafür gibt es in Matlab struct und cell. Allein schon, dass die Bilder als Variablen im Workspace liegen und per "who" ermittelt werden ist schon ein riesiges Problem, was Wartbarkeit, Testbarkeit, Verständlichkeit usw. anbelangt.
Ich habe Dir mal den Code mit vielen Kommentaren umgeschrieben, um Dir zu zeigen, was alles, wie und warum besser gelöst werden könnte:

Code:
% Einlesen Variablennamen
% % data=who('T*')
% % data2=cellstr(data)
% % td = numel(data2)
% das ist schonmal sehr boese
% damit handelst Du Dir nicht nachvollziehbare Fehler ein,
% wenn irgendwann einmal zufällig eine Variable mit großem T
% definiert wird.
% besser Bilder gleich in ein struct einlesen:

names_of_pictures = { ... } % wo immer die auch herkommen

pictures = struct()
for k = 1:numel(names_of_pictures)
    pictures(k).name = names_of_pictures{k};
    % hier musst Du halt die passende Funktion aufrufen:
    pictures(k).values = load_picture(names_of_pictures{k});
end;



% Parameter für GLCM
vv = input('Bitte Verschiebungsvektor d angeben: ')
nl = input('Grauwertstufen angeben (256, 8, 2) ')

% Generierung der Verschiebungsvektoren für alle vier Winkel
% Variable Anteile in Variablennamen zu stecken ist keine gute Idee
% Hier sind die Winkel in einer extra Variable und die Offsets in
% einer Matrix. Damit kann man auf einfache Weise Schleifen benutzen
% muss also nicht Code kopieren, Vorteile:
% Aenderungen nur in einer Zeile, statt in 4
% mehr Winkel einfach durch mehr offsets, statt an vielen Stellen Zeilen kopieren zu muessen
% es wird klarer was gemacht wird, weil alles nur einmal gemacht wird
WINKEL = [0, 45, 90, 135];
offsets = {
  [zeros(vv,1) (1:vv)'],
  [-(1:vv)' (1:vv)'],
  [(-vv:-1)' zeros(vv,1)],
  [(-vv:-1)' (-vv:-1)'],
};

% Berechnung GLCM und Parameter über alle Variablen
for k = 1:numel(pictures)
    % Variablenaufruf für graycomatrix
    % statt eval kann jetzt direkt auf die Bild-Werte zugegriffen werden
    var_d = pictures(k).values;

    % fuer alle Winkel machen wir das gleiche:
    stats = cell();
    for m = 1:numel(offsets)
        % Erstellen der GLCM über das angegebene Offset
        glcm = graycomatrix(var_d, 'Offset',offsets{m}, 'Numlevels',nl, 'Symmetric',true);
        % Auswertung der GLCM nach Parametern von GLCM_Features1
        stats{m} = GLCM_Features1(glcm, 0);
    end;
    % die stats sind jetzt auch in einer Liste und konnen einfach
    % als weiteres Feld an die pcitures-Struktur angehaengt werden
    pictures(k).stats = stats;
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.