[Insight-developers] Level set inconsistencies
Miller, James V (Research)
millerjv@crd.ge.com
Fri, 11 Oct 2002 14:53:40 -0400
This message is in MIME format. Since your mail reader does not understand
this format, some or all of this message may not be legible.
------_=_NextPart_001_01C27157.8365D064
Content-Type: text/plain;
charset="iso-8859-1"
I have trying out a few of the level set methods in ITK. I have stumbled across a few
inconsistencies.
1. SegmentationLevelSetImageFilters do not have the FeatureImage in the inputs array. So you cannot
simply connect a reader's output to the feature image input without calling
UpdateLargestPossibleRegion on the reader first.
2. The "sign" of the seed images is inconsistent between the SegmentationLevelSetImageFilters and the
ShapeDetectionLevelSetFilter. In the former, inside the seed region is positive, for the latter it
is negative.
3. For the GeodesicActiveContourImageFilter, can the DerivativeImage be a single image of covariant
vectors like the EdgePotentialImageFilter takes? Or does it takes a series of images, one for each
directional derivative?
4. I haven't dug through this yet, but it seems like I pass different information the
SegmentationLevelSetImageFilters than to the ShapeDetectionLevelSetFilters. For instance, the
Segmentation* versions take a feature image that is converted to a speed function. The Shape*
versions take an "edge potential image". It seems like there may be cases where we are passing the
same information to the two filters but they we are using different terminology. In other cases, one
of these superclasses is very general and may take more that one type of feature image (intensity,
derivative, laplacian, etc.).
It would be nice if we could build a series of tests or examples that show each of the versions of
these algorithms operating on the same data (so a user can see quickly how to set each one up and
compare the differences both in terms of results and what has to be provided to the user). We would
need one such test/example for the use of level sets for segmentation and one such test/example suite
for the use of level sets in image enhancement.
Are the SegmentationLevelSetImageFilters restricted to a single connected seed region? Or can I
specify
multiple seed regions?
I am using code like the following for constructing the seed images
typedef itk::Image<float,2> FloatImage;
typedef itk::FastMarchingImageFilter<FloatImage> FastMarcherType;
FastMarcherType::Pointer marcher = FastMarcherType::New();
// setup trial points
typedef FastMarcherType::NodeType NodeType;
typedef FastMarcherType::NodeContainer NodeContainer;
NodeContainer::Pointer trialPoints = NodeContainer::New();
NodeType node;
FloatImage::IndexType index0 = {{150,245}};
node.SetValue( 0.0 );
node.SetIndex( index0 );
trialPoints->InsertElement(0, node);
marcher->SetTrialPoints( trialPoints );
// specify the size of the output image
FloatImage::SizeType size = {{512,512}};
marcher->SetOutputSize( size );
// Make the inside of circle of radius 8 negative or positive?
itk::ShiftScaleImageFilter<FloatImage, FloatImage>::Pointer shiftScale
= itk::ShiftScaleImageFilter<FloatImage, FloatImage>::New();
shiftScale->SetInput(marcher->GetOutput());
shiftScale->SetShift( -8.0 );
shiftScale->SetScale( -1.0 );
Jim Miller
_____________________________________
Visualization & Computer Vision
GE Research
Bldg. KW, Room C218B
P.O. Box 8, Schenectady NY 12301
millerjv@research.ge.com <mailto:millerjv@research.ge.com>
james.miller@research.ge.com
(518) 387-4005, Dial Comm: 8*833-4005,
Cell: (518) 505-7065, Fax: (518) 387-6981
<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />
------_=_NextPart_001_01C27157.8365D064
Content-Type: text/html;
charset="iso-8859-1"
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML><HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META content="MSHTML 6.00.2715.400" name=GENERATOR></HEAD>
<BODY>
<DIV><SPAN class=733323418-11102002><FONT size=2>I have trying out a few of the
level set methods in ITK. I have stumbled across a few
inconsistencies.</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>1.
SegmentationLevelSetImageFilters do not have the FeatureImage in the inputs
array. So you cannot simply connect a reader's output to the feature image
input without calling UpdateLargestPossibleRegion on the reader
first.</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>2. The "sign" of the seed
images is inconsistent between the SegmentationLevelSetImageFilters and the
ShapeDetectionLevelSetFilter. In the former, inside the seed region is
positive, for the latter it is negative.</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>3. For the
GeodesicActiveContourImageFilter, can the DerivativeImage be a single image of
covariant vectors like the EdgePotentialImageFilter takes? Or does it takes a
series of images, one for each directional derivative?</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>4. I haven't dug through this
yet, but it seems like I pass different information the
SegmentationLevelSetImageFilters than to the
ShapeDetectionLevelSetFilters. For instance, the Segmentation* versions
take a feature image that is converted to a speed function. The
Shape* versions take an "edge potential image". It seems like there may be
cases where we are passing the same information to the two filters but they we
are using different terminology. In other cases, one of these superclasses is
very general and may take more that one type of feature image (intensity,
derivative, laplacian, etc.).</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>It would be nice if we could
build a series of tests or examples that show each of the versions of these
algorithms operating on the same data (so a user can see quickly how to set each
one up and compare the differences both in terms of results and what has to be
provided to the user). We would need one such test/example for the use of
level sets for segmentation and one such test/example suite for the use of level
sets in image enhancement.</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>Are the
SegmentationLevelSetImageFilters restricted to a single connected seed region?
Or can I specify </FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>multiple seed
regions?</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN> </DIV>
<DIV class=Section1>
<P class=MsoNormal> <SPAN class=733323418-11102002><FONT size=2>I am using
code like the following for constructing the seed images</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2> typedef
itk::Image<float,2> FloatImage;<BR> typedef
itk::FastMarchingImageFilter<FloatImage>
FastMarcherType;</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>
FastMarcherType::Pointer marcher = FastMarcherType::New();<BR> <BR>
// setup trial points<BR> typedef FastMarcherType::NodeType
NodeType;<BR> typedef FastMarcherType::NodeContainer
NodeContainer;</FONT></SPAN></P>
<P class=MsoNormal><FONT size=2><SPAN
class=733323418-11102002> </SPAN><SPAN
class=733323418-11102002>NodeContainer::Pointer trialPoints =
NodeContainer::New();</SPAN></FONT></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2> NodeType
node;</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>
</FONT></SPAN><SPAN class=733323418-11102002><FONT size=2>FloatImage::IndexType
index0 = {{150,245}};<BR> <BR> node.SetValue( 0.0 );<BR>
node.SetIndex( index0 );<BR> trialPoints->InsertElement(0,
node);</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>
marcher->SetTrialPoints( trialPoints );<BR> <BR> // specify the
size of the output image<BR> FloatImage::SizeType size =
{{512,512}};<BR> marcher->SetOutputSize( size );</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2> // Make
the inside of circle of radius 8 negative or positive?<BR>
itk::ShiftScaleImageFilter<FloatImage, FloatImage>::Pointer
shiftScale<BR> = itk::ShiftScaleImageFilter<FloatImage,
FloatImage>::New();<BR>
shiftScale->SetInput(marcher->GetOutput());<BR>
shiftScale->SetShift( -8.0 );<BR> shiftScale->SetScale( -1.0
);<BR></FONT></SPAN></P>
<P style="MARGIN: 0in 0in 0pt"><B><SPAN
style="COLOR: navy; FONT-FAMILY: 'Comic Sans MS'">Jim Miller</SPAN></B>
<BR><B><I><SPAN
style="FONT-SIZE: 10pt; COLOR: red; FONT-FAMILY: Arial">_____________________________________</SPAN></I></B><BR><EM><SPAN
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Arial">Visualization &
Computer Vision</SPAN></EM><I><SPAN
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Arial"><BR><EM>GE
Research</EM><BR><EM>Bldg. KW, Room C218B</EM><BR><EM>P.O. Box 8, Schenectady NY
12301</EM><BR><BR></SPAN></I><EM><U><SPAN
style="FONT-SIZE: 7.5pt; COLOR: blue"><A
href="mailto:millerjv@research.ge.com">millerjv@research.ge.com</A></SPAN></U></EM></P>
<P style="MARGIN: 0in 0in 0pt"><EM><U><SPAN
style="FONT-SIZE: 7.5pt; COLOR: blue">james.miller@research.ge.com</SPAN></U></EM><BR><I><SPAN
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Arial">(518) 387-4005, Dial
Comm: 8*833-4005, </SPAN></I><BR><I><SPAN
style="FONT-SIZE: 7.5pt; COLOR: black; FONT-FAMILY: Arial">Cell: (518) 505-7065,
Fax: (518) 387-6981</SPAN></I> </P>
<P class=MsoNormal> <?xml:namespace prefix = o ns =
"urn:schemas-microsoft-com:office:office" /><o:p></o:p></P></DIV>
<DIV> </DIV></BODY></HTML>
------_=_NextPart_001_01C27157.8365D064--