11
{$IFNDEF Unix} Windows,{$ENDIF}
12
Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
13
StdCtrls, Buttons,define_types;
16
TFilterROIform = class(TForm)
18
FilterROIBtn: TSpeedButton;
20
Filter2NIfTIBtn: TSpeedButton;
22
MinROIfilt: TSpinEdit;
23
MaxROIfilt: TSpinEdit;
24
procedure MinROIfiltChange(Sender: TObject);
25
procedure FilterROIBtnClick(Sender: TObject);
27
procedure FormClose(Sender: TObject; var Action: TCloseAction);
29
procedure FormClose(Sender: TObject);
32
procedure FormShow(Sender: TObject);
33
procedure Filter2NIfTIBtnClick(Sender: TObject);
35
{ Private declarations }
37
{ Public declarations }
41
FilterROIform: TFilterROIform;
44
uses nifti_img_view,nifti_img;
50
procedure TFilterROIform.MinROIfiltChange(Sender: TObject);
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;
59
procedure TFilterROIform.FilterROIBtnClick(Sender: TObject);
60
var lBGBuffer,lVOIBuffer:ByteP;
61
lInc,lMin,lMax,lBufferItems,lVOIvoxelsAfter,lVOIvoxelsBefore: integer;
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.');
68
if gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems <> lBufferItems then begin
69
showmessage('Error: VOI dimensions do not match background image.');
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
77
lMin := round(MinROIFilt.value);
78
lMax := round(MaxROIFilt.value);
79
if lMin > lMax then begin //swap
84
if lBufferItems < 1 then
85
showmessage('Error: no background image open to filter.')
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;
97
for lInc := 1 to lBufferItems do
98
if (lVOIBuffer^[lInc] > 0) then
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);
110
procedure TFilterROIform.FormClose(Sender: TObject; var Action: TCloseAction);
112
procedure TFilterROIform.FormClose(Sender: TObject);
115
FilterLUT (gBGImg, gMRIcroOverlay[kBGOverlayNum], -1,-1); //lLUT: 0=gray,1=red,2=green,3=blue
116
ImgForm.RefreshImagesTimer.enabled := true;
119
procedure TFilterROIform.FormShow(Sender: TObject);
122
for lInc := 0 to 255 do
123
gBGImg.BackupLUT[lInc]:= gMRIcroOverlay[kBGOverlayNum].LUT[lInc];
124
MinROIfiltChange(nil);
127
procedure TFilterROIform.Filter2NIfTIBtnClick(Sender: TObject);
128
var lFilteredBuffer:ByteP;
129
lInc,lMin,lMax,lBufferItems: integer;
131
lBufferItems := gMRIcroOverlay[kBGOverlayNum].ScrnBufferItems;
132
lMin := round(MinROIFilt.value);
133
lMax := round(MaxROIFilt.value);
134
if lMin > lMax then begin //swap
139
if lBufferItems < 1 then
140
showmessage('Error: no background image open to filter.')
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);