FW: [Insight-users] watershed -- Repeated with different results (history dependent?)
Atwood, Robert C
r.atwood at imperial.ac.uk
Mon, 19 Apr 2004 20:03:43 +0100
This is a multi-part message in MIME format.
------_=_NextPart_001_01C42641.08C04CDE
Content-Type: text/plain;
charset="us-ascii"
Content-Transfer-Encoding: quoted-printable
(posting to the list as well...)=20
-----Original Message-----
From: Atwood, Robert C=20
Sent: 19 April 2004 19:18
To: 'Joshua Cates'
Subject: RE: [Insight-users] watershed -- Repeated with different
results (history dependent?)
Josh:
I'll start with a code snippet, as it will hopefully be less obfuscated
with unrelated issues. I have omitted the sections setting up the
parameters for the other filters (threshold, diffusion, scaling,...)
since these are not changed so I don't think they are related to the
problem. If this is not sufficient then I'll send the code. There are
three main bits included below, setting up the looping parameters,
setting up the ITK pipeline, then the actual loop. Note that the
watershed is updated once prior to setting up the image slicer (as in
the example for extracting a slice)
The images attatched are an example, *loop.png was obtained in the loop,
*only.png was obtained with only one pass through the loop. One blob is
divided almost across the middle in the 'only' case=20
I have generally tried looping on threshold OR looping on level , not
both.=20
The threshold does not seem to affect my results very much.
I was observing this behaviour on a different input as well (before I
added the Danielsson distance map and the filter in to the pipeline) I
maybe able to create a simpler program that repeats the behaviour
without the input/filtering stage (Unless the reson for the problem is
immediately obvious)=20
Thanks,
Robert
... define the ITK classes needed ...=20
"scalar type" is float pixels, "Labeled type" is unsigned long int
pixels , I have defined 2- and 3- dimensional versions of each to try
some filters on just a slice . In this instance, I am looking extracting
the 2.d slice only after the watershed filter.
/* ctrl is a structure I use to read in the parameters from a file*/
..... import the data and read the control file .......
..... set up parameters for the pre filters ........
/* set up the exploratory loops if requested */
/* */
/***********************************************************************
**********************************/
i=3Dctrl->wshd_level;
j=3Dctrl->wshd_thr;
/* set up equally spaced values for each parameter */
wstart =3D ctrl->wtop;
wend =3D ctrl->wbot;
wstep =3D (wstart -wend)/NLOOP;
tstart =3D ctrl->tbot;
tend =3D ctrl->ttop;
tstep =3D (tend - tstart)/NLOOP;
printf("wstart %f wend %f wstep %f\n",wstart,wend,wstep);
printf("tstart %f tend %f tstep %f\n",tstart,tend,tstep);
/* cause the loop to execute only once with the chosen value if *loop
control is FALSE */
/* it may take a very long time if both loops are selected! */ if
(ctrl->wloop){
istart =3D 0;
iend =3D NLOOP;
}else{
istart =3D i;
iend =3D i; =20
}
if (ctrl->tloop){
jstart =3D 0;
jend =3D NLOOP;
}else{
jstart =3D j;
jend =3D j; =20
}
/***********************************************************************
**********************************/
/* set up the ITK pipeline */
/* threshold the input image to get the open area as a binary image*/
scalthresh->SetInput(importFilter->GetOutput());
scalthresh->Update();
/* set up a filter to invert the image (so that big distance from a
boundary is a low value) */
/* as needed by the watershed filter */
/* set the 'maximum' to the maximum possible distance in the image */
dmapslice->InputIsBinaryOn();
dmapvol->InputIsBinaryOn();
=20
/* pipe line for the volume filter */
dmapvol->SetInput(scalthresh->GetOutput());
rescaler->SetInput(dmapvol->GetOutput());
labsccast->SetInput(rescaler->GetOutput());
prefilter->SetInput(labsccast->GetOutput());
watershed->SetInput(prefilter->GetOutput());
lwriter->SetInput(watershed->GetOutput());
=20
level =3D wstart;/* tried some different things here */=20
printf("setting watershed level %f\n",level);
watershed->SetLevel( level );
thresh =3D tstart ;
printf("setting watershed threshold %f\n",thresh);
watershed->SetThreshold(thresh);
/* set up a slice */
/* need to have a watershed output first? */
printf("Updating initial watershed ...\n");
watershed->Update();
sliceNumber =3D 57;=20
inputRegion =3D watershed->GetOutput()->GetLargestPossibleRegion();
inputRegionSize =3D inputRegion.GetSize();
inputRegionIndex =3D inputRegion.GetIndex();=20
inputRegionSize[2] =3D 0;
inputRegionIndex[2] =3D sliceNumber;=20
inputRegion.SetSize(inputRegionSize);
inputRegion.SetIndex(inputRegionIndex);
slicer->SetExtractionRegion(inputRegion);
colormapperslice->SetInput(slicer->GetOutput());
slicewriter->SetInput(colormapperslice->GetOutput());
/* add slicer to the pipe line */
slicer->SetInput ( watershed->GetOutput());
/*
/***********************************************************************
**********************************/
/* loop for the threshold parameter */
for (j=3Djstart;j<=3Djend;j++){
thresh =3D tstart + (tstep * (float)(j)) ;
printf("setting watershed threshold %f\n",thresh);
watershed->SetThreshold(thresh);
/* loop for the level parameter */
for(i=3Distart;i<=3Diend;i++){
/* level should decrement if looping, instead of increment */
/* according to the itk guide, this avoids redoing the
watersheds*/
/* therefore much faster */
level =3D wstart - (wstep * (float)(i)) ;
printf("setting watershed level %f\n",level);
watershed->SetLevel( level );
=20
snprintf(slicename,255,"lab_d_l%03i_t%03i_%s",i,j,ctrl->outfile);
printf("Iteration %i %i : l=3D%f t=3D%f\n",i,j,level,thresh);
/* set up the slice writer */
=09
snprintf(slicename,255,"slice_d_%03i_l%03i_t%03i_%s.png",sliceNumber,i,j
,ctrl->outfile);
printf("watershed slice file will be %s \n",slicename);
slicewriter->SetFileName(slicename);
/* process the slice */
try
{
slicewriter->Update();
}
catch( itk::ExceptionObject & exp )=20
{
std::cerr << "Exception caught 01 !" << std::endl;
std::cerr << exp << std::endl;
}
}/* end level loop*/
}/* end thresh loop */
-----Original Message-----
From: Joshua Cates [mailto:cates at sci.utah.edu]=20
Sent: 19 April 2004 18:10
To: Atwood, Robert C
Cc: ITK Users (E-Mail)
Subject: Re: [Insight-users] watershed -- Repeated with different
results (history dependent?)
Hi,
Can you send us code (or pseudocode) that implements the loop you
describe? It would help in understanding what the problem might be.
Thanks,
Josh.
On Mon, 19 Apr 2004, Atwood, Robert C wrote:
>=20
> Hi,
>=20
> If I use the watershed in a loop, to get a series of segmentations ;
> then choose one of the level values and run a single filter, I do not=20
> seem to obtain the same results as I did within the loop for the same=20
> parameters (level and threshold) (Also I get this behaviour if I do=20
> not change the threshold at all i.e. it is related to the level=20
> setting)
>=20
>=20
> I am guessing that this has something to do with the caching of the
> initial watershed regions as described in the user guide p359:
>=20
>=20
> "The relabeler object at the end of the
> mini-pipeline uses the hierarchy and the initial segmentation to
> produce an output image at any scale below the user-specified maximum.
> Data objects are cached in the mini-pipeline so that
> changing watershed depths only requires a (fast) relabeling of the
basic
> segmentation."
>=20
> In order to make efficient use this behaviour, I structured a loop so
> that the "level" is progressively decreased, so the first update of=20
> the watershed filter uses the highest value of the "level" desired.=20
> However,runnign the routine again with a single value chosen from=20
> among those tested does not result in the same output. I also tried=20
> updating the watershed once with the highest 'level' value, then=20
> changing the value to the target value. Any hints?
>=20
> Thanks
> Robert
> _______________________________________________
> Insight-users mailing list
> Insight-users at itk.org=20
> http://www.itk.org/mailman/listinfo/insight-users
>=20
------_=_NextPart_001_01C42641.08C04CDE
Content-Type: image/png;
name="slice_d_057_l081_t035_nb199_8b_w_only.png"
Content-Transfer-Encoding: base64
Content-Description: slice_d_057_l081_t035_nb199_8b_w_only.png
Content-Disposition: attachment;
filename="slice_d_057_l081_t035_nb199_8b_w_only.png"
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
------_=_NextPart_001_01C42641.08C04CDE
Content-Type: image/png;
name="slice_d_057_l081_t035_nb199_8b_w_loop.png"
Content-Transfer-Encoding: base64
Content-Description: slice_d_057_l081_t035_nb199_8b_w_loop.png
Content-Disposition: attachment;
filename="slice_d_057_l081_t035_nb199_8b_w_loop.png"
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
------_=_NextPart_001_01C42641.08C04CDE--