10
uses nifti_img, nifti_img_view, dialogs, nifti_hdr_view, text,sysutils,classes, fdr;
12
function VOIVol (lOverlayNum: integer): integer;
17
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems < 1 then
19
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
22
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
23
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
29
function VOIMean (lOverlayNum: integer): double;
31
lSum,lInten,lVol: double;
35
lVol := VOIVol(lOverlayNum);
39
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
40
//Next line - only voxels that are part of VOI
41
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then begin
42
lInten := RawBGIntensity(lInc);
43
lSum := lSum + lInten;
51
function LesionVol (lOverlayNum: integer): integer;
54
begin //proc ShowDescript
56
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
59
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
60
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
66
function LesionFrac (lOverlayNum: integer): double;
68
lMaxSum,lLesionSum,lInten: double;
70
begin //proc ShowDescript
72
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
76
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
77
lInten := RawBGIntensity(lInc);
78
lMaxSum := lInten + lMaxSum;
79
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
80
lLesionSum := lLesionSum + lInten;
84
//result := lLesionSum / lMaxSum;
88
function VOIMeanFrac10pct (lOverlayNum: integer; lMax: boolean): double;
89
//if lMax is true, return top 10pct, if false return bottom
92
lVox,lInc,l10pct: integer;
94
begin //proc ShowDescript
96
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
98
//first - count number of voxels in ROI
100
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do
101
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
106
getmem(lRA,lVox * sizeof(single));
108
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do
109
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then begin
111
lRA^[lVox] := RawBGIntensity(lInc);
114
l10pct := round(lVox / 10);
119
if not lMax then begin //lower 10pct
120
for lInc := 1 to l10pct do
121
lSum := lSum + lRA^[lInc]
122
end else begin //top 10pct
123
for lInc := (lVox-l10pct+1) to lVox do
124
lSum := lSum + lRA^[lInc];
126
result := lSum / l10pct;
131
(*procedure BatchVOI;
133
lInc,lNumberofFiles: integer;
135
lStrings : TStringList;
137
if gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems < 1 then begin
138
showmessage('Please load a background image for rescaling.');
141
for lInc := 1 to (knMaxOverlay-1) do
142
FreeImgMemory(gMRIcroOverlay[lInc]);
143
ImgForm.UpdateLayerMenu;
145
if not OpenDialogExecute(kImgFilter,'Select PMaps',true) then exit;
146
lNumberofFiles:= HdrForm.OpenHdrDlg.Files.Count;
147
if lNumberofFiles < 1 then
149
lStrings := TStringList.Create;
150
lStrings.AddStrings(HdrForm.OpenHdrDlg.Files);
151
if not OpenDialogExecute(kImgFilter,'Select images you wish to analyze',true) then exit;
152
lNumberofFiles:= HdrForm.OpenHdrDlg.Files.Count;
153
if lNumberofFiles < 1 then
155
TextForm.Memo1.Lines.Clear;
156
TextForm.Memo1.lines.add('Background =,'+gMRIcroOverlay[kBGOverlayNum].hdrfilename);
157
for lInc:= 1 to lNumberofFiles do begin
158
lFilename := HdrForm.OpenHdrDlg.Files[lInc-1];
159
ImgForm.OverlayOpenCore ( lFilename, 2);
161
TextForm.Memo1.lines.add(lfilename+','{+ inttostr(LesionVol(2))+','}+ floattostr(LesionFrac(2)) );
162
//ImgForm.ShowDescriptive(2,true);
164
FreeImgMemory(gMRIcroOverlay[2]);
165
ImgForm.UpdateLayerMenu;
166
//SaveDialog1.Filename := ExtractFileDirWithPathDelim(HdrForm.OpenHdrDlg.Files[0])+'desc.csv';
168
//ImgForm.SaveDialog1.Filename := ExtractFileDirWithPathDelim(gMRIcroOverlay[lOverlayNum].HdrFileName)+'desc.csv';
173
lNumberofP,lP,lInc,lNumberofFiles,lLoop: integer;
174
lFilename,lStr:string;
175
lStrings : TStringList;
178
for lInc := 1 to (knMaxOverlay-1) do
179
FreeImgMemory(gMRIcroOverlay[lInc]);
180
ImgForm.UpdateLayerMenu;
182
if not OpenDialogExecute(kImgFilter,'Select background images (stat maps)',true) then exit;
183
lNumberofP:= HdrForm.OpenHdrDlg.Files.Count;
184
if lNumberofP < 1 then
186
lStrings := TStringList.Create;
187
lStrings.AddStrings(HdrForm.OpenHdrDlg.Files);
189
if not OpenDialogExecute(kImgFilter,'Select overlay images (ROIs)',true) then exit;
190
lNumberofFiles:= HdrForm.OpenHdrDlg.Files.Count;
191
if lNumberofFiles < 1 then
193
TextForm.Memo1.Lines.Clear;
194
for lLoop := 1 to 3 do begin
196
lStr := 'min10pct_Filename,Vol'
198
lStr := 'max10pct_Filename,Vol'
201
for lP := 1 to lNumberofP do
202
lStr := lStr + ','+Parsefilename(extractfilename(lStrings.Strings[lP-1]));
203
TextForm.Memo1.lines.add(lStr);
204
for lInc:= 1 to lNumberofFiles do begin
205
ImgForm.StatusLabel.Caption := inttostr(lInc)+'/'+inttostr(lNumberofFiles);
207
lStr := Parsefilename(extractfilename(HdrForm.OpenHdrDlg.Files[lInc-1]));
208
for lP := 1 to lNumberofP do begin
209
lFilename := lStrings.Strings[lP-1];
210
ImgForm.OpenAndDisplayImg(lFilename,True);
211
lFilename := HdrForm.OpenHdrDlg.Files[lInc-1];
212
ImgForm.OverlayOpenCore ( lFilename, 2);
214
lStr := lStr + ','+ inttostr(VOIVol(2) );
216
lStr := lStr + ','+ floattostr(VOIMeanFrac10Pct(2,false))
217
else if lLoop = 2 then
218
lStr := lStr + ','+ floattostr(VOIMeanFrac10Pct(2,true))
220
lStr := lStr + ','+ floattostr(VOIMean(2));
222
TextForm.Memo1.lines.add(lStr );
225
FreeImgMemory(gMRIcroOverlay[2]);
226
ImgForm.UpdateLayerMenu;
227
//SaveDialog1.Filename := ExtractFileDirWithPathDelim(HdrForm.OpenHdrDlg.Files[0])+'desc.csv';
229
//ImgForm.SaveDialog1.Filename := ExtractFileDirWithPathDelim(gMRIcroOverlay[lOverlayNum].HdrFileName)+'desc.csv';
5
{$IFNDEF UNIX} Windows,
7
lclintf,LCLType,LResources,BaseUnix,
16
//lclintf,LResources,{$IFNDEF Unix} Controls, {$ELSE}BaseUnix, LCLType,{$ENDIF}
17
nifti_img, nifti_img_view, dialogs, nifti_hdr_view, text,sysutils,classes, fdr,batchstatselect;
19
(*function LesionFrac (lOverlayNum: integer): double;
21
lLesionSum,lInten: double;
25
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems < 1 then
27
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
30
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
31
lInten := RawBGIntensity(lInc);
32
if gMRIcroOverlay[lOverlayNum].ScrnBuffer[lInc] > 0 then
33
lLesionSum := lLesionSum + lInten;
38
function VOIVol (lOverlayNum: integer): integer;
43
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems < 1 then
45
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
48
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
49
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
55
function VOIMean (lOverlayNum: integer): double;
57
lSum,lInten,lVol: double;
61
lVol := VOIVol(lOverlayNum);
65
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin
66
lInten := RawBGIntensity(lInc);
67
//Next line - only voxels that are part of VOI
68
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
69
lSum := lSum + lInten;
74
function VOIMeanFrac10pct (lOverlayNum: integer; lMax: boolean): double;
75
//if lMax is true, return top 10pct, if false return bottom
78
lVox,lInc,l10pct: integer;
80
begin //proc ShowDescript
82
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems < 1 then
84
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then
86
//first - count number of voxels in ROI
88
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do
89
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then
94
getmem(lRA,lVox * sizeof(single));
96
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do
97
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then begin
99
lRA^[lVox] := RawBGIntensity(lInc);
102
l10pct := round(lVox / 10);
106
if not lMax then begin //lower 10pct
107
for lInc := 1 to l10pct do
108
lSum := lSum + lRA^[lInc]
109
end else begin //top 10pct
110
for lInc := (lVox-l10pct+1) to lVox do
111
lSum := lSum + lRA^[lInc];
113
result := lSum / l10pct;
119
lNumberofP,lP,lInc,lNumberofFiles,lLoop: integer;
120
lFilename,lStr:string;
121
lBGStrings : TStrings;
124
for lInc := 1 to (knMaxOverlay-1) do
125
FreeImgMemory(gMRIcroOverlay[lInc]);
126
ImgForm.UpdateLayerMenu;
127
lBGStrings := TStringList.Create;
128
if (ssShift in KeyDataToShiftState(vk_Shift)) then begin
129
GetFilesInDir(ExtractFileDir(HdrForm.OpenHdrDlg.Filename),lBGStrings)
131
if not OpenDialogExecute(kImgFilter,'Select background images (stat maps)',true) then
133
lBGStrings.AddStrings(HdrForm.OpenHdrDlg.Files);
135
lNumberofP:= lBGStrings.Count;
136
if lNumberofP < 1 then begin
142
if not OpenDialogExecute(kImgFilter,'Select overlay images (ROIs)',true) then exit;
143
lNumberofFiles:= HdrForm.OpenHdrDlg.Files.Count;
144
if lNumberofFiles < 1 then
146
TextForm.MemoT.Lines.Clear;
147
lStr := 'Function'+kTextSep+'VOIname'+kTextSep+'VOIvol';
148
for lP := 1 to lNumberofP do
149
lStr := lStr + kTextSep+(lBGStrings.Strings[lP-1]);
150
TextForm.MemoT.lines.add(lStr);
151
for lLoop := 1 to 3 do begin
153
lStr := 'min10pct'+kSep+'Filename+'kSep+'Vol'
155
lStr := 'max10pct'+Filename+'kSep+'Vol'
157
lStr := 'mean'+Filename+kSep'Vol';}
159
for lInc:= 1 to lNumberofFiles do begin
160
ImgForm.StatusLabel.Caption := inttostr(lInc)+'/'+inttostr(lNumberofFiles);
168
lStr := lStr +kTextSep+ (HdrForm.OpenHdrDlg.Files[lInc-1]);
169
for lP := 1 to lNumberofP do begin
170
lFilename := lBGStrings.Strings[lP-1];
171
ImgForm.OpenAndDisplayImg(lFilename,True);
172
lFilename := HdrForm.OpenHdrDlg.Files[lInc-1];
173
ImgForm.OverlayOpenCore ( lFilename, 2);
175
lStr := lStr + kTextSep+ inttostr(VOIVol(2) );
177
lStr := lStr + kTextSep+ floattostr(VOIMeanFrac10Pct(2,false))
178
else if lLoop = 2 then
179
lStr := lStr + kTextSep+ floattostr(VOIMeanFrac10Pct(2,true))
181
lStr := lStr + kTextSep+ floattostr(VOIMean(2));
183
TextForm.MemoT.lines.add(lStr );
186
FreeImgMemory(gMRIcroOverlay[2]);
187
ImgForm.UpdateLayerMenu;
188
//SaveDialog1.Filename := ExtractFileDirWithPathDelim(HdrForm.OpenHdrDlg.Files[0])+'desc.csv';
190
//ImgForm.SaveDialog1.Filename := ExtractFileDirWithPathDelim(gMRIcroOverlay[lOverlayNum].HdrFileName)+'desc.csv';