~ubuntu-branches/ubuntu/utopic/mricron/utopic

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.