for i =1:length(ProbNum) path= strcat('Z:\Probanden Pool\Prob',num2str(ProbNum(i)),'\T1map\wrsProb',num2str(ProbNum(i)),'_T1.img');
T1 = spm_vol(path);% Einlesen von SPM-Files
Das Problem ist, dass ich es nicht schaffe, die eingelesene Bilder um 90° zu rotieren. Ich habe es mit allen möglichen varianten versucht. Klappt einfach nicht.
Die Bilder sind MRT-Gehirnaufnahmen und müssen anschließend noch gemittelt werden.
Hier die eingelesenen Bildgrößen. 192x256x50. 50 stellt die Slicezahl dar.
Bei rot90 gibt es ein Fehlermeldung "A must be a 2-D matrix".
Ich verstehe das Problem zwar aber leider keine Lösung.
Ich wäre dankbar wenn ihr mir Tipps gibt.
_________________
for i =1:length(ProbNum) path= strcat('Z:\Probanden Pool\Prob',num2str(ProbNum(i)),'\T1map\wrsProb',num2str(ProbNum(i)),'_T1.img');
T1 = spm_vol(path);% Einlesen von SPM-Files
mapT1 = spm_read_vols(T1)% Einlesen von SPM-Files
und jeweils die einzelnen Bilder wieder in einer 3D Matrix abspeichern.
Es istr auch moeglich den gesamten Datensatz zu drehen, jedoch ist dies programiertechnich etwas aufwendiger und bei groesseren Matrizen extrem rechenaufwendig. Ich spreche hierbei aus Erfahrung, da ich genau dies im Zuge eines Projektes getan habe. Ich war jedoch in der gluecklichen Lage ueber eine Workstation zu verfuegen mit 64 Kernen + sehr viel Arbeitsspeicher. An allen "normalen" PC's kam nach wenigen Sekunden sofort: "OUT OF MEMORY". Falls es dich jedoch interessiert schau dir folgende Befehle an:
Danke dir Sco. Es hat geklappt. Sorry wegen dem neuen Post. Ich bin unerfahren und neu hier.
Nun hätte ich aber noch ein kleines Problem. Ich glaube du kennst hiermit gut aus. Deswegen würde ich dich nocht etwas Fragen. Mein Datenpalette besteht aus Probandenaufnahmen die für die quantitative MRT benutzt werden. Nun müssen diese Aufnahmen gemitttelt werden. Daraus ergibt sich dann gemittelte quantitative MRT Aufnahmen (so genannte mean_q-Atlanten) die dann mit anderen Atlanten wie median-Atlanten vergliechen werden.
Für die Mittelung habe ich bereits M = mean(A)
M = mean(A,dim) und B = mean2(A) versucht anzuwenden. Leider hatte ich aber nicht das richtige Ergebnis. Ich habe auch versucht ein zweites for-Schleife zu bilden und es mathematisch mit dem Formel der aritmetischen Mittelung zu lösen. War aber auch leider nicht erfolgreich.
Könntest du mir bitte noch ein Tipp geben, wie ich das noch lösen könnte?
_________________
Für die Mittelung habe ich bereits M = mean(A)
M = mean(A,dim) und B = mean2(A) versucht anzuwenden. Leider hatte ich aber nicht das richtige Ergebnis.
Dann beschreibe doch noch den Unterschied zwischen den jeweiligen Ergebnissen und dem, was Du suchst.
Du hast [192 x 256 x 50] Arrays. Welche Größe soll das Array denn nach der Mittelwertbildung haben?
Ich benötige aber ein Array der Größe [192x 256x50] nach der Mittelung. Es muss auch ein Datensatz (wieder [192X256X50]) mit Median erzeugt werden. Die werden danach verglichen.
Kleines Beispiell aus der Help-Funktion in Matlab.
Ich benötige aber ein Array der Größe [192x 256x50] nach der Mittelung. Es muss auch ein Datensatz (wieder [192X256X50]) mit Median erzeugt werden. Die werden danach verglichen.
Hallo,
da ist stimmt doch etwas vor der Mittelung und nach der Mittelung gleiche Größe?
Du willst wahrscheinlich über 50 Slides mitteln?
dann versuch doch so:
Soso. Wie kommst Du zu dieser Idee?
Der Befehl heißt "mean", das erste Argument ist das zu bearbeitende Array, das zweite Argument ist die Dimension, entlang der gemittelt werden soll. Wenn Du Dir über den Befehl "mean" unsicher bist, kannst Du ja dort nachlesen:
Hat keiner ein Idee wie es es schaffe, alle Bilder Voxelweise zu mitteln?
Es wäre schon hilfreich für Dich, wenn Du unsere Nachfragen beantworten würdest. Offenbar hat sich irgendwo ein hartnäckiges Missverständnis eingeschlichen und muss zunächst ausgeräumt werden.
Du sagst, die Original-Daten hätten die Dimension [192 x 256 x 50]. Und die gemittelten Daten sollen die gleiche Dimension haben. Das ist aber mathematisch nicht möglich! Die gemittelten Daten müssen auf alle Fälle ein kleineres Array belegen, sonst wären sie nicht gemittelt! Beispiel:
Code:
x = rand(2, 3, 4) disp(mean(x, 1))% [1 x 3 x 4] array disp(mean(x, 2))% [2 x 1 x 4] array disp(mean(x, 3))% [2 x 3] array
Im letzten Fall ist zu bemerken, dass in Matlab [a x b] und [a x b x 1] und [a x b x 1 x 1 x x... 1] genau das gleiche bedeuten. Dimensionen der Länge 1 werden am Ende einfach ignoriert oder angefügt, je nach Bedarf.
Also: Bitte erkläre noch mal, was Du genau mathematisch berechnen möchtest. "Voxelweise mitteln" reicht als Definition nicht.
Vielleicht möchtest Du die Daten per "Moving Average" filtern - das beinhaltet zwar auch einen Mittelwert, aber das ist definitiv nicht "Mitteln".
Also: Bitte erkläre noch mal, was Du genau mathematisch berechnen möchtest. "Voxelweise mitteln" reicht als Definition nicht.
Vielleicht möchtest Du die Daten per "Moving Average" filtern - das beinhaltet zwar auch einen Mittelwert, aber das ist definitiv nicht "Mitteln".
ich möchte aus ALLEN Probanden (3D Frames) Voxelweise den Median bzw. den Mittelwert bilden. D. h. dass ich zum Beispiel an der Stelle AtlasT1(31,66,30) den Mittelwert aus den Voxel, die genau an der gleichen Stelle (31,66,30) in den einzelnen Probanden T1-Karten liegen, bilden soll.
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.