Verfasst am: 11.04.2014, 19:07
Titel: Auswertung unter eigenen Variablennamen speichern
Hallo zusammen,
kurz vorweg, ich bin absoluter Anfänger in Bezug auf Matlab und gerade ein wenig am Verzweifeln. 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.
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.
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.
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;
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
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.