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

« back to all changes in this revision

Viewing changes to ROIfilt.pas

  • Committer: Bazaar Package Importer
  • Author(s): Michael Hanke
  • Date: 2010-07-29 22:07:43 UTC
  • Revision ID: james.westby@ubuntu.com-20100729220743-q621ts2zj806gu0n
Tags: upstream-0.20100725.1~dfsg.1
ImportĀ upstreamĀ versionĀ 0.20100725.1~dfsg.1

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
unit ROIfilt;
 
2
 
 
3
interface
 
4
 
 
5
uses
 
6
 {$IFNDEF FPC}
 
7
   RXSpin,
 
8
 {$ELSE}
 
9
 Spin,LResources,
 
10
 {$ENDIF}
 
11
 {$IFNDEF Unix} Windows,{$ENDIF}
 
12
  Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
 
13
  StdCtrls,  Buttons,define_types;
 
14
 
 
15
type
 
16
  TFilterROIform = class(TForm)
 
17
    Label42: TLabel;
 
18
    FilterROIBtn: TSpeedButton;
 
19
    Label43: TLabel;
 
20
    Filter2NIfTIBtn: TSpeedButton;
 
21
    FiltROILabel: TLabel;
 
22
    MinROIfilt: TSpinEdit;
 
23
    MaxROIfilt: TSpinEdit;
 
24
    procedure MinROIfiltChange(Sender: TObject);
 
25
    procedure FilterROIBtnClick(Sender: TObject);
 
26
  {$IFNDEF FPC}
 
27
  procedure FormClose(Sender: TObject; var Action: TCloseAction);
 
28
 {$ELSE}
 
29
    procedure FormClose(Sender: TObject);
 
30
 {$ENDIF}
 
31
 
 
32
    procedure FormShow(Sender: TObject);
 
33
    procedure Filter2NIfTIBtnClick(Sender: TObject);
 
34
  private
 
35
    { Private declarations }
 
36
  public
 
37
    { Public declarations }
 
38
  end;
 
39
 
 
40
var
 
41
  FilterROIform: TFilterROIform;
 
42
 
 
43
implementation
 
44
uses nifti_img_view,nifti_img;
 
45
 
 
46
 {$IFNDEF FPC}
 
47
{$R *.DFM}
 
48
 {$ENDIF}
 
49
 
 
50
procedure TFilterROIform.MinROIfiltChange(Sender: TObject);
 
51
begin
 
52
        if gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems < 1 then exit;
 
53
        FilterLUT (gBGImg, gMRIcroOverlay[kBGOverlayNum], round(MinROIFilt.Value),round(MaxROIfilt.value)); //lLUT: 0=gray,1=red,2=green,3=blue
 
54
        FiltROILabel.caption := 'Calibrated range: '+realtostr(Scrn2ScaledIntensity (gMRIcroOverlay[kBGOverlayNum],MinROIfilt.value),3)
 
55
                +'...'+realtostr(Scrn2ScaledIntensity (gMRIcroOverlay[kBGOverlayNum],MaxROIfilt.value),3);
 
56
        ImgForm.RefreshImagesTimer.enabled := true;
 
57
end;
 
58
 
 
59
procedure TFilterROIform.FilterROIBtnClick(Sender: TObject);
 
60
var     lBGBuffer,lVOIBuffer:ByteP;
 
61
        lInc,lMin,lMax,lBufferItems,lVOIvoxelsAfter,lVOIvoxelsBefore: integer;
 
62
begin
 
63
  lBufferItems := gMRIcroOverlay[kVOIOverlayNum].ScrnBufferItems;
 
64
  if lBufferItems < 1 then begin
 
65
                showmessage('You need to open up a VOI (Draw/Open) in order to apply an intensity filter to the VOI.');
 
66
                exit;
 
67
  end;
 
68
  if gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems <> lBufferItems then begin
 
69
                showmessage('Error: VOI dimensions do not match background image.');
 
70
                exit;
 
71
  end;
 
72
  CreateUndoVol;
 
73
  (*case MessageDlg('Unable to undo this operation. You should save a backup copy prior to this (Draw/Save). Are you sure you wish to filter your VOI?', mtConfirmation,
 
74
                [mbYes, mbCancel], 0) of
 
75
                id_Cancel: exit;
 
76
  end; //case *)
 
77
  lMin := round(MinROIFilt.value);
 
78
  lMax := round(MaxROIFilt.value);
 
79
  if lMin > lMax then begin //swap
 
80
        lInc := lMin;
 
81
        lMin := lMax;
 
82
        lMax := lInc;
 
83
  end; //swap
 
84
  if lBufferItems < 1 then
 
85
        showmessage('Error: no background image open to filter.')
 
86
  else begin
 
87
        lBGBuffer := gMRIcroOverlay[kBGOverlayNum].ScrnBuffer;
 
88
        lVOIBuffer := gMRIcroOverlay[kVOIOverlayNum].ScrnBuffer;
 
89
        lVOIvoxelsBefore := 0;
 
90
        for lInc := 1 to lBufferItems do
 
91
                if (lVOIBuffer^[lInc] > 0) then
 
92
                        inc(lVOIvoxelsBefore);
 
93
        for lInc := 1 to lBufferItems do
 
94
                if (lBGBuffer^[lInc] < lMin) or (lBGBuffer^[lInc] > lMax) then
 
95
                        lVOIBuffer^[lInc] := 0;
 
96
        lVOIvoxelsAfter := 0;
 
97
        for lInc := 1 to lBufferItems do
 
98
                if (lVOIBuffer^[lInc] > 0) then
 
99
                        inc(lVOIvoxelsAfter);
 
100
        showmessage('VOI voxels prior to filter = '+inttostr(lVOIvoxelsBefore)+kCR
 
101
                + 'VOI voxels after filter = '+inttostr(lVOIvoxelsAfter));
 
102
        gBGImg.VOIchanged := true;
 
103
        //Save8BitAsVOIorNIFTI(lFilteredBuffer,lBufferItems);
 
104
  end; //BGimage open
 
105
  FilterROIForm.Close;
 
106
//nn
 
107
end;
 
108
 
 
109
 {$IFNDEF FPC}
 
110
procedure TFilterROIform.FormClose(Sender: TObject; var Action: TCloseAction);
 
111
 {$ELSE}
 
112
procedure TFilterROIform.FormClose(Sender: TObject);
 
113
 {$ENDIF}
 
114
begin
 
115
        FilterLUT (gBGImg, gMRIcroOverlay[kBGOverlayNum], -1,-1); //lLUT: 0=gray,1=red,2=green,3=blue
 
116
        ImgForm.RefreshImagesTimer.enabled := true;
 
117
end;
 
118
 
 
119
procedure TFilterROIform.FormShow(Sender: TObject);
 
120
var lInc: integer;
 
121
begin
 
122
        for lInc := 0 to 255 do
 
123
                gBGImg.BackupLUT[lInc]:= gMRIcroOverlay[kBGOverlayNum].LUT[lInc];
 
124
        MinROIfiltChange(nil);
 
125
end;
 
126
 
 
127
procedure TFilterROIform.Filter2NIfTIBtnClick(Sender: TObject);
 
128
var     lFilteredBuffer:ByteP;
 
129
        lInc,lMin,lMax,lBufferItems: integer;
 
130
begin
 
131
  lBufferItems := gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems;
 
132
  lMin := round(MinROIFilt.value);
 
133
  lMax := round(MaxROIFilt.value);
 
134
  if lMin > lMax then begin //swap
 
135
        lInc := lMin;
 
136
        lMin := lMax;
 
137
        lMax := lInc;
 
138
  end; //swap
 
139
  if lBufferItems < 1 then
 
140
        showmessage('Error: no background image open to filter.')
 
141
  else begin
 
142
        getmem(lFilteredBuffer,lBufferItems);
 
143
        move(gMRIcroOverlay[kBGOverlayNum].ScrnBuffer^,lFilteredBuffer^,lBufferItems);
 
144
        for lInc := 1 to lBufferItems do
 
145
                if (lFilteredBuffer^[lInc] < lMin) or (lFilteredBuffer^[lInc] > lMax) then
 
146
                        lFilteredBuffer^[lInc] := 0;
 
147
        SaveAsVOIorNIFTI(lFilteredBuffer,lBufferItems,1,1,true,gMRIcroOverlay[kBGOverlayNum].NiftiHdr,'');
 
148
        //SaveAsVOIorNIFTI(lFilteredBuffer,lBufferItems,1,true,gMRIcroOverlay[kBGOverlayNum].NiftiHdr,'');
 
149
        freemem(lFilteredBuffer);
 
150
  end;
 
151
  FilterROIForm.Close;
 
152
end;
 
153
 
 
154
  {$IFDEF FPC}
 
155
initialization
 
156
  {$I ROIfilt.lrs}
 
157
{$ENDIF}
 
158
 
 
159
end.