1
by Michael Hanke
Import upstream version 0.20100725.1~dfsg.1 |
1 |
unit imgutil; |
2 |
{$H+}
|
|
3 |
interface
|
|
4 |
||
5 |
function UnscaledMean (lOverlayNum: integer): double; |
|
6 |
function ScaledMean (lOverlayNum: integer): double; |
|
7 |
procedure BatchChangeInterceptSoVOIEqualsZero; |
|
8 |
||
9 |
||
10 |
implementation
|
|
11 |
uses text,nifti_hdr,nifti_hdr_view,define_types,nifti_img, nifti_img_view; |
|
12 |
||
13 |
||
14 |
function UnscaledMean (lOverlayNum: integer): double; |
|
15 |
//kVOIOverlayNum
|
|
16 |
var
|
|
17 |
lROIVol,lInc: integer; |
|
18 |
lROISum: double; |
|
19 |
begin //proc ShowDescript |
|
20 |
result := 0; |
|
21 |
if gMRIcroOverlay[lOverlayNum].ScrnBufferItems <> gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems then |
|
22 |
exit; |
|
23 |
lROIVol := 0; |
|
24 |
lROISum := 0; |
|
25 |
for lInc := 1 to gMRIcroOverlay[lOverlayNum].ScrnBufferItems do begin |
|
26 |
if gMRIcroOverlay[lOverlayNum].ScrnBuffer^[lInc] > 0 then begin |
|
27 |
lROISum := lROISum + RawBGIntensity(lInc); |
|
28 |
inc(lROIVol); |
|
29 |
end; |
|
30 |
end; //for each voxel |
|
31 |
if lROIVol > 0 then |
|
32 |
result := lROISum/lROIVol; |
|
33 |
end; |
|
34 |
||
35 |
function ScaledMean (lOverlayNum: integer): double; |
|
36 |
begin
|
|
37 |
result := UnscaledMean(lOverlayNum); |
|
38 |
result := Raw2ScaledIntensity (gMRIcroOverlay[kBGOverlayNum],result); |
|
39 |
end; |
|
40 |
||
41 |
procedure BatchChangeInterceptSoVOIEqualsZero; |
|
42 |
var
|
|
43 |
lInc,lNumberofFiles,lMinClusterSz: integer; |
|
44 |
lZeroHdr : TNIfTIHdr; |
|
45 |
lFilename,lVOIname:string; |
|
46 |
lPref: boolean; |
|
47 |
lMean: double; |
|
48 |
begin
|
|
49 |
for lInc := 1 to (knMaxOverlay-1) do |
|
50 |
FreeImgMemory(gMRIcroOverlay[lInc]); |
|
51 |
ImgForm.UpdateLayerMenu; |
|
52 |
||
53 |
if not OpenDialogExecute(kImgPlusVOIFilter,'Select volume of interest',false) then exit; |
|
54 |
lVOIName := HdrForm.OpenHdrDlg.FileName; |
|
55 |
if not OpenDialogExecute(kImgFilter,'Select perfusion images',true) then exit; |
|
56 |
lNumberofFiles:= HdrForm.OpenHdrDlg.Files.Count; |
|
57 |
if lNumberofFiles < 1 then |
|
58 |
exit; |
|
1.1.1
by Michael Hanke
Import upstream version 0.20100820.1~dfsg.1 |
59 |
TextForm.MemoT.Lines.Clear; |
1
by Michael Hanke
Import upstream version 0.20100725.1~dfsg.1 |
60 |
lPref := gBGImg.ResliceOnLoad; |
61 |
gBGImg.ResliceOnLoad := false; |
|
62 |
for lInc:= 1 to lNumberofFiles do begin |
|
63 |
lFilename := HdrForm.OpenHdrDlg.Files[lInc-1]; |
|
64 |
ImgForm.OpenAndDisplayImg(lFilename,false); |
|
65 |
ImgForm.OverlayOpenCore ( lVOIname, kVOIOverlayNum); |
|
66 |
lMean := UnscaledMean(kVOIOverlayNum); |
|
67 |
lZeroHdr := gMRIcroOverlay[kBGOverlayNum].NIFTIhdr; |
|
68 |
if lZeroHdr.scl_slope <> 1 then |
|
1.1.1
by Michael Hanke
Import upstream version 0.20100820.1~dfsg.1 |
69 |
TextForm.MemoT.Lines.Add(lFilename+' Scale slope is not 1, please contact Chris Rorden ') |
1
by Michael Hanke
Import upstream version 0.20100725.1~dfsg.1 |
70 |
else if lMean <> 0 then begin |
1.1.1
by Michael Hanke
Import upstream version 0.20100820.1~dfsg.1 |
71 |
TextForm.MemoT.Lines.Add(lFilename+kTextSep+realtostr(lMean,5)); |
1
by Michael Hanke
Import upstream version 0.20100725.1~dfsg.1 |
72 |
lZeroHdr.scl_inter := lZeroHdr.scl_inter - lMean; |
73 |
lFilename := changefileprefix(lFilename,'z'); |
|
74 |
SaveAsVOIorNIFTIcore (lFilename, gMRIcroOverlay[kBGOverlayNum].ImgBuffer,gMRIcroOverlay[kBGOverlayNum].ImgBufferItems,gMRIcroOverlay[kBGOverlayNum].ImgBufferBPP,1,lZeroHdr) |
|
75 |
end else |
|
1.1.1
by Michael Hanke
Import upstream version 0.20100820.1~dfsg.1 |
76 |
TextForm.MemoT.Lines.Add(lFilename+' UNCHANGED (mean of VOI is already zero) '); |
1
by Michael Hanke
Import upstream version 0.20100725.1~dfsg.1 |
77 |
|
78 |
//FindClustersText(gMRIcroOverlay[kBGOverlayNum], lThresh,lMinClusterSz);
|
|
79 |
end;//lLoop |
|
80 |
gBGImg.ResliceOnLoad := lPref; |
|
81 |
TextForm.Show; |
|
82 |
end; |
|
83 |
||
84 |
||
85 |
end. |