Christoph Budziszewski commited on 2009-04-02 16:26:51
Zeige 7 geänderte Dateien mit 23 Einfügungen und 139 Löschungen.
git-svn-id: https://svn.discofish.de/MATLAB/spmtoolbox/SVMCrossVal@171 83ab2cfd-5345-466c-8aeb-2b2739fb922d
... | ... |
@@ -1,55 +0,0 @@ |
1 |
-function coordinateStruct = computeCoordinates(imageStruct) |
|
2 |
-%imageStruct.(someName).images |
|
3 |
-%imageStruct.(someName).roiImages |
|
4 |
-coordinateStruct = struct; |
|
5 |
- |
|
6 |
-subjectCellList = fieldnames(imageStruct); |
|
7 |
- |
|
8 |
-for subject = 1:length(subjectCellList) |
|
9 |
- subjectFieldName = cell2mat(subjectCellList(subject)); |
|
10 |
- % ROI Image Coordinates |
|
11 |
- V = imageStruct.(subjectFieldName).images; |
|
12 |
- Vm = imageStruct.(subjectFieldName).roiImages; |
|
13 |
- coordinateStruct.(subjectFieldName) = ... |
|
14 |
- computeRoiImageCoordinates(V,Vm); |
|
15 |
- % Parsed Voxel Definitions |
|
16 |
- coordinateStruct.(subjectFieldName) = ... |
|
17 |
- appendManualVoxelCoordinates(coordinateStruct.(subjectFieldName),V); |
|
18 |
- |
|
19 |
-end |
|
20 |
-end |
|
21 |
- |
|
22 |
-function coordinates = appendManualVoxelCoordinates(coordinateStruct,V) |
|
23 |
- coordinates =coordinateStruct; |
|
24 |
-end |
|
25 |
- |
|
26 |
-function coordinates = computeRoiImageCoordinates(V,Vm) |
|
27 |
- nVolImage = length(V); |
|
28 |
- nRoiImage = length(Vm); |
|
29 |
- |
|
30 |
- coordinates = cell(nVolImage,1); |
|
31 |
- |
|
32 |
- for iVolImage = 1:nVolImage |
|
33 |
- coordinates{iVolImage} = []; |
|
34 |
- for jRoiImage = 1:nRoiImage |
|
35 |
- [x,y,z] = computeCoordinateVector(V(iVolImage),Vm(jRoiImage)); |
|
36 |
- coordinates{iVolImage} = [coordinates{iVolImage}; x, y, z]; |
|
37 |
- end |
|
38 |
- end |
|
39 |
-end |
|
40 |
- |
|
41 |
-function [x,y,z] = computeCoordinateVector(VolumeImage,RoiImage) |
|
42 |
- x = []; y = []; z = []; |
|
43 |
- [x1 y1] = ndgrid(1:VolumeImage.dim(1),1:VolumeImage.dim(2)); |
|
44 |
- for p = 1:VolumeImage.dim(3) % resample mask RoiImage in space of VolumeImage |
|
45 |
- B = spm_matrix([0 0 -p 0 0 0 1 1 1]); |
|
46 |
- M = inv(B*inv(VolumeImage.mat)*RoiImage.mat); |
|
47 |
- msk = find(spm_slice_vol(RoiImage,M,VolumeImage.dim(1:2),0)); |
|
48 |
- if ~isempty(msk) |
|
49 |
- z1 = p*ones(size(msk(:))); |
|
50 |
- x = [x; x1(msk(:))]; |
|
51 |
- y = [y; y1(msk(:))]; |
|
52 |
- z = [z; z1]; |
|
53 |
- end; |
|
54 |
- end; |
|
55 |
-end |
... | ... |
@@ -1,40 +0,0 @@ |
1 |
-function decode = fbs_calculateDecodePerformance(header,psth,svmopts) |
|
2 |
- |
|
3 |
-RANDOMIZE_DATAPOINTS = header.svmrnd; |
|
4 |
- |
|
5 |
-timeline = header.timeline; |
|
6 |
-timeline.frameShiftStart = header.frameShift.frameShiftStart; |
|
7 |
-timeline.frameShiftEnd = header.frameShift.frameShiftEnd; |
|
8 |
-timeline.decodeDuration = header.frameShift.decodeDuration; |
|
9 |
- |
|
10 |
-timeLineStart = timeline.frameShiftStart; |
|
11 |
-timeLineEnd = timeline.frameShiftEnd; |
|
12 |
- |
|
13 |
-timePointArgs.pst = psth; |
|
14 |
-timePointArgs.labelMap = LabelMap(header.classDef.labelCells,header.classDef.conditionCells); |
|
15 |
-timePointArgs.eventList = header.classDef.eventMatrix; |
|
16 |
- |
|
17 |
-timePointMatrix = buildTimePointMatrix(timeline,timePointArgs); |
|
18 |
- |
|
19 |
-decodePerformance = []; |
|
20 |
-for index = 1:timeLineEnd-timeLineStart+1 |
|
21 |
- |
|
22 |
- svmdata = timePointMatrix{index}(:,2:size(timePointMatrix{index},2)); |
|
23 |
- svmlabel = timePointMatrix{index}(:,1); |
|
24 |
- |
|
25 |
- if RANDOMIZE_DATAPOINTS |
|
26 |
- rndindex = randperm(length(svmlabel)); |
|
27 |
- svmdata = svmdata(rndindex,:); |
|
28 |
- svmlabel = svmlabel(rndindex); |
|
29 |
- end |
|
30 |
- |
|
31 |
- decodePerformance = [decodePerformance; svm_single_crossval(svmlabel,svmdata,svmopts)]; |
|
32 |
- |
|
33 |
- |
|
34 |
-end |
|
35 |
- |
|
36 |
-decode = decodePerformance; |
|
37 |
-end |
|
38 |
- |
|
39 |
- |
|
40 |
- |
... | ... |
@@ -1,20 +0,0 @@ |
1 |
-function voxellist = generateVoxelList(center, radius) |
|
2 |
-% cx = ROICenter(1); |
|
3 |
-% cy = ROICenter(2); |
|
4 |
-% cz = ROICenter(3); |
|
5 |
- |
|
6 |
- voxellist = []; |
|
7 |
- |
|
8 |
- cx = center(1); |
|
9 |
- cy = center(2); |
|
10 |
- cz = center(3); |
|
11 |
- |
|
12 |
- for z=cz-radius+1:cz+radius-1 |
|
13 |
- for y=(cy-radius+1):(cy+radius-1) |
|
14 |
- for x=(cx-radius+1):(cx+radius-1) |
|
15 |
- voxellist = [voxellist [x;y;z]]; |
|
16 |
- end |
|
17 |
- end |
|
18 |
- end |
|
19 |
- |
|
20 |
-end |
|
21 | 0 |
\ No newline at end of file |
... | ... |
@@ -1,6 +1,9 @@ |
1 | 1 |
function output = runFBSImageMaskMode(header,subjectdata,fbsargs) |
2 | 2 |
addpath('NIFTI_20090325'); |
3 | 3 |
|
4 |
+savePath = fullfile('output',sprintf('%s',date)) |
|
5 |
+mkdir(savePath); |
|
6 |
+ |
|
4 | 7 |
args = header.args; |
5 | 8 |
|
6 | 9 |
subjects = subjectdata; |
... | ... |
@@ -108,16 +111,24 @@ for s = 1:nSubjects |
108 | 111 |
|
109 | 112 |
% tmp = spm_imatrix(V(kImage).mat); % |
110 | 113 |
% vdim = tmp(7:9); % Voxel-Size |
111 |
- vdim = [3,3,3.5]; |
|
114 |
+ |
|
115 |
+ |
|
112 | 116 |
|
113 | 117 |
mask_image = load_nii(subjects{s}.roiFile.fname); |
114 | 118 |
|
119 |
+ vdim = mask_image.hdr.dime.pixdim(2:4); |
|
120 |
+ if mask_image.hdr.dime.pixdim(1) == 1 |
|
121 |
+ vdim = vdim .* [-1 1 1]; |
|
122 |
+ end |
|
123 |
+ |
|
124 |
+ display(sprintf('starting timesliceing')); |
|
125 |
+ |
|
115 | 126 |
for timeShift = 1:timeLineEnd-timeLineStart+1 |
116 | 127 |
% center timepoint && relative shift |
117 | 128 |
frameStart = floor(-globalStart+1+timeShift - 0.5*decodeDuration); |
118 | 129 |
frameEnd = min(ceil(frameStart+decodeDuration + 0.5*decodeDuration),-globalStart+globalEnd); |
119 | 130 |
|
120 |
- img3D = zeros(size(mask_image)); %output image |
|
131 |
+ img3D = zeros(size(mask_image)); %output image prepare |
|
121 | 132 |
|
122 | 133 |
for iVoxel = 1:nVoxel % linear structure avoids 3D-Loop. |
123 | 134 |
% get surrounding coordinate-IDs within radius |
... | ... |
@@ -151,21 +162,23 @@ for s = 1:nSubjects |
151 | 162 |
x = coord(1); |
152 | 163 |
y = coord(2); |
153 | 164 |
z = coord(3); |
154 |
- img3D(x,y,z) = decode/100; %damn percentage |
|
155 |
-% mask_image.img(x,y,z) = decode/100; |
|
165 |
+ |
|
166 |
+ img3D(x,y,z) = ((decode/100)-0.5)*2; % range [-1:1] |
|
156 | 167 |
|
157 | 168 |
end %for each voxel |
158 | 169 |
|
159 |
- nii = make_nii(img3D,vdim,mask_image.hdr.hist.originator(1:3),16,'decode performance'); %default origin |
|
160 |
- save_nii(nii,fullfile('output',sprintf('TESTFILE%g',timeShift))); |
|
161 |
-% save_nii(mask_image,sprintf('MTESTFILE%g',timeShift)); |
|
170 |
+ nii = make_nii(img3D,vdim,mask_image.hdr.hist.originator(1:3),16,sprintf('decode performance, time relative to onset: %g to %g sec',frameStart,frameEnd)); |
|
171 |
+ save_nii(nii,fullfile(savePath,sprintf('%s-%03g',subjects{s}.name,timeShift))); |
|
162 | 172 |
|
163 | 173 |
end %for each timeslice |
164 | 174 |
display('rastering done'); |
165 |
- elapsed{s}.decode = toc; |
|
166 | 175 |
|
167 |
- clear pst; %save memory! |
|
176 |
+ elapsed{s}.decode = toc; |
|
168 | 177 |
assignin('base','timing',elapsed); |
178 |
+ |
|
179 |
+ %save memory! |
|
180 |
+ clear pst; |
|
181 |
+ clear mask_image; |
|
169 | 182 |
end |
170 | 183 |
|
171 | 184 |
end |
... | ... |
@@ -14,7 +14,7 @@ DEFAULT.voxelstring = 'M1 l + 3 \nM1 r + 3\n'; |
14 | 14 |
DEFAULT.svmoptstring = '-s 0 -t 0 -c 1'; |
15 | 15 |
DEFAULT.svmnfold = '6'; |
16 | 16 |
DEFAULT.svmrnd = 1; |
17 |
-DEFAULT.searchlightradius = 0; |
|
17 |
+DEFAULT.searchlightradius = 3; |
|
18 | 18 |
|
19 | 19 |
|
20 | 20 |
DEFAULT.wd = fullfile('d:','Analyze','Choice','24pilot'); |
21 | 21 |