source: an2_roi_stats.m @ 63

Last change on this file since 63 was 45, checked in by tjniskan, 11 years ago
  • Changed a small thing in license notices

M an2_export_gui.m
M an2_cellsprintf.m
M an2_getfilefilter.m
M an2_calc_wait.m
M an2_smiswrite.m
M misclib/spectrsum.m
M misclib/shiftind.m
M misclib/nifti4dto3d.m
M misclib/nifti3dto4d.m
M misclib/dcm_info.m
M misclib/addicon.m
M misclib/makelcmraw.m
M an2_check_file_exist.m
M an2_iseven.m
M an2_cellwrite.m
M an2_wbar.m
M an2_rot3d.m
M an2_readfdf.m
M an2_revision.m
M an2_viewprocpar.m
M an2_checkcthdr.m
M an2_readprocpar.m
M an2_fitmaps.m
M an2_read_nifti.m
M an2_data_read.m
M an2_smisread.m
M an2_resviewer.m
M an2_maptool.m
M aedes.m
M an2_helpabout.m
M an2_res2table.m
M an2_copy_roi.m
M plugins/save_roi_as_mask.m
M plugins/write_difference_images.m
M plugins/plot_profile.m
M plugins/calculate_t2_map.m
M plugins/calculate_t1r_map.m
M plugins/view_kspace.m
M plugins/copy_data_to_workspace.m
M plugins/take_snapshot.m
M an2_inputdlg.m
M an2_roi_copy_gui.m
M an2_readctdata.m
M an2_readfid.m
M an2_readfidprefs.m
M an2_readtab.m
M an2_check_updates.m
M an2_killfigs.m
M an2_roi_stats.m
M an2_saveres.m
M an2_rotateflip.m
M an2_juigetfiles.m
M an2_gui_defaults.m
M an2_editstack.m
M an2_errordump.m
M an2_update.m
M an2_write_nifti.m

File size: 6.1 KB
Line 
1function Res = an2_roi_stats(DATA,ROI)
2% AN2_ROI_STATS - Calculate ROI statistics
3%   
4%
5% Synopsis:
6%
7% Description:
8%
9% Examples:
10%
11% See also:
12%
13
14% This function is a part of Aedes - A graphical tool for analyzing
15% medical images
16%
17% Copyright (C) 2006 Juha-Pekka Niskanen <Juha-Pekka.Niskanen@uku.fi>
18%
19% Department of Physics, Department of Neurobiology
20% University of Kuopio, FINLAND
21%
22% This program may be used under the terms of the GNU General Public
23% License version 2.0 as published by the Free Software Foundation
24% and appearing in the file LICENSE.TXT included in the packaging of
25% this program.
26%
27% This program is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
28% WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
29
30
31Res = [];
32
33%% Check input arguments
34if nargin<2
35  error('Two input arguments are required')
36elseif nargin>2
37  error('Too many input arguments')
38end
39
40% Ensure that DATA is a cell array
41if ~iscell(DATA)
42  DATA = {DATA};
43end
44
45% if ROI is empty, return empty
46if isempty(ROI)
47  return
48end
49
50% Check if data is in mixed form
51if length(DATA)>1 || ndims(DATA{1}.FTDATA)==2
52  isDataMixed = true;
53else
54  isDataMixed = false;
55end
56
57% Generate timestamp
58DateTime = datestr(now);
59
60% Generate file info
61for ii=1:length(DATA)
62  FileInfo.DataFileName{ii} = DATA{ii}.HDR.fname;
63  FileInfo.DataPathName{ii} = DATA{ii}.HDR.fpath;
64end
65Res.DateTime = DateTime;
66Res.FileInfo = FileInfo;
67Res.Stat = [];
68
69for ii=1:length(ROI)
70 
71  if isDataMixed
72    Res.Stat(ii).FileName = {};
73  end
74 
75  for kk=1:length(DATA)
76   
77    % Statistics for mixed data type
78    if isDataMixed
79      % Get ROI data
80      data = DATA{kk}.FTDATA(ROI(ii).voxels{kk});
81      data = double(data);
82      Res.Stat(ii).FileName{kk,1} = DATA{kk}.HDR.fpath;
83      Res.Stat(ii).FileName{kk,2} = DATA{kk}.HDR.fname;
84      if kk==1
85        Res.Stat(ii).isMixed = true;
86        Res.Stat(ii).Label = ROI(ii).label;
87      end
88     
89      if isempty(data)
90        Res.Stat(ii).Mean(kk) = NaN;
91        Res.Stat(ii).Std(kk) = NaN;
92        Res.Stat(ii).Sum(kk) = NaN; 
93        Res.Stat(ii).Max(kk) = NaN;
94        Res.Stat(ii).Min(kk) = NaN;
95        Res.Stat(ii).PixelCount(kk) = 0;
96      else
97        Res.Stat(ii).Mean(kk) = mean(data);
98        Res.Stat(ii).Std(kk) = std(data);
99        Res.Stat(ii).Sum(kk) = sum(data);
100        Res.Stat(ii).Max(kk) = max(data);
101        Res.Stat(ii).Min(kk) = min(data);
102        Res.Stat(ii).PixelCount(kk) = length(data);
103      end
104       
105    else % Statistics for normal type data
106     
107      %% Overall results for current ROI
108      data=DATA{kk}.FTDATA(ROI(ii).voxels{kk});
109      data = double(data);
110      Res.Stat(ii).isMixed = false;
111      Res.Stat(ii).Label = ROI(ii).label;
112      Res.Stat(ii).Mean = mean(data);
113      Res.Stat(ii).Std = std(data);
114      Res.Stat(ii).Sum = sum(data);
115      Res.Stat(ii).Max = max(data);
116      Res.Stat(ii).Min = min(data);
117      Res.Stat(ii).PixelCount = length(data);
118     
119      %% Calculate results in X direction
120      Res.Stat(ii).XD.Mean = [];
121      Res.Stat(ii).XD.Std = [];
122      Res.Stat(ii).XD.Sum = [];
123      Res.Stat(ii).XD.Max = [];
124      Res.Stat(ii).XD.Min = [];
125      Res.Stat(ii).XD.PixelCount = [];
126     
127      for jj=1:size(ROI(ii).voxels{kk},3)
128        roix=ROI(ii).voxels{kk}(:,:,jj,:);
129        datax = DATA{kk}.FTDATA(:,:,jj,:);
130        tmpx=datax(roix);
131        tmpx = double(tmpx);
132        if isempty(tmpx)
133          Res.Stat(ii).XD.Mean(end+1) = NaN;
134          Res.Stat(ii).XD.Std(end+1) = NaN;
135          Res.Stat(ii).XD.Sum(end+1) = NaN;
136          Res.Stat(ii).XD.Max(end+1) = NaN;
137          Res.Stat(ii).XD.Min(end+1) = NaN;
138          Res.Stat(ii).XD.PixelCount(end+1) = 0;
139        else
140          Res.Stat(ii).XD.Mean(end+1) = mean(tmpx);
141          Res.Stat(ii).XD.Std(end+1) = std(tmpx);
142          Res.Stat(ii).XD.Sum(end+1) = sum(tmpx);
143          Res.Stat(ii).XD.Max(end+1) = max(tmpx);
144          Res.Stat(ii).XD.Min(end+1) = min(tmpx);
145          Res.Stat(ii).XD.PixelCount(end+1) = length(tmpx);
146        end
147      end
148     
149      %% Calculate results in Y direction
150      Res.Stat(ii).YD.Mean = [];
151      Res.Stat(ii).YD.Std = [];
152      Res.Stat(ii).YD.Sum = [];
153      Res.Stat(ii).YD.Max = [];
154      Res.Stat(ii).YD.Min = [];
155      Res.Stat(ii).YD.PixelCount = [];
156     
157      for jj=1:size(ROI(ii).voxels{kk},2)
158        roiy=ROI(ii).voxels{kk}(:,jj,:,:);
159        datay = DATA{kk}.FTDATA(:,jj,:,:);
160        tmpy=datay(roiy);
161        tmpy=double(tmpy);
162        if isempty(tmpy)
163          Res.Stat(ii).YD.Mean(end+1) = NaN;
164          Res.Stat(ii).YD.Std(end+1) = NaN;
165          Res.Stat(ii).YD.Sum(end+1) = NaN;
166          Res.Stat(ii).YD.Max(end+1) = NaN;
167          Res.Stat(ii).YD.Min(end+1) = NaN;
168          Res.Stat(ii).YD.PixelCount(end+1) = 0;
169        else
170          Res.Stat(ii).YD.Mean(end+1) = mean(tmpy);
171          Res.Stat(ii).YD.Std(end+1) = std(tmpy);
172          Res.Stat(ii).YD.Sum(end+1) = sum(tmpy);
173          Res.Stat(ii).YD.Max(end+1) = max(tmpy);
174          Res.Stat(ii).YD.Min(end+1) = min(tmpy);
175          Res.Stat(ii).YD.PixelCount(end+1) = length(tmpy);
176        end
177      end
178     
179      %% Calculate results in Z direction
180      Res.Stat(ii).ZD.Mean = [];
181      Res.Stat(ii).ZD.Std = [];
182      Res.Stat(ii).ZD.Sum = [];
183      Res.Stat(ii).ZD.Max = [];
184      Res.Stat(ii).ZD.Min = [];
185      Res.Stat(ii).ZD.PixelCount = [];
186     
187      for jj=1:size(ROI(ii).voxels{kk},1)
188        roiz=ROI(ii).voxels{kk}(jj,:,:,:);
189        dataz = DATA{kk}.FTDATA(jj,:,:,:);
190        tmpz=dataz(roiz);
191        tmpz=double(tmpz);
192        if isempty(tmpz)
193          Res.Stat(ii).ZD.Mean(end+1) = NaN;
194          Res.Stat(ii).ZD.Std(end+1) = NaN;
195          Res.Stat(ii).ZD.Sum(end+1) = NaN;
196          Res.Stat(ii).ZD.Max(end+1) = NaN;
197          Res.Stat(ii).ZD.Min(end+1) = NaN;
198          Res.Stat(ii).ZD.PixelCount(end+1) = 0;
199        else
200          Res.Stat(ii).ZD.Mean(end+1) = mean(tmpz);
201          Res.Stat(ii).ZD.Std(end+1) = std(tmpz);
202          Res.Stat(ii).ZD.Sum(end+1) = sum(tmpz);
203          Res.Stat(ii).ZD.Max(end+1) = max(tmpz);
204          Res.Stat(ii).ZD.Min(end+1) = min(tmpz);
205          Res.Stat(ii).ZD.PixelCount(end+1) = length(tmpz);
206        end
207      end
208    end
209  end
210end
211
212% - EOF -
Note: See TracBrowser for help on using the repository browser.

Powered by Trac 1.0.9.Copyright © Juha-Pekka Niskanen 2008