[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.&nbsp; I have stumbled across a few 
inconsistencies.</FONT></SPAN></DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2></FONT></SPAN>&nbsp;</DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>1. 
SegmentationLevelSetImageFilters do not have the FeatureImage in the inputs 
array.&nbsp; 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>&nbsp;</DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>2. The "sign" of the seed 
images is inconsistent between the SegmentationLevelSetImageFilters and the 
ShapeDetectionLevelSetFilter.&nbsp; 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>&nbsp;</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>&nbsp;</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.&nbsp; For instance, the Segmentation* versions 
take&nbsp;a feature image that is converted to a speed function.&nbsp; The 
Shape* versions take an "edge potential image".&nbsp; 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>&nbsp;</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).&nbsp; 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>&nbsp;</DIV>
<DIV><SPAN class=733323418-11102002><FONT size=2>Are&nbsp;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>&nbsp;</DIV>
<DIV class=Section1>
<P class=MsoNormal>&nbsp;<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>&nbsp; typedef 
itk::Image&lt;float,2&gt; FloatImage;<BR>&nbsp; typedef 
itk::FastMarchingImageFilter&lt;FloatImage&gt; 
FastMarcherType;</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>&nbsp; 
FastMarcherType::Pointer marcher = FastMarcherType::New();<BR>&nbsp; <BR>&nbsp; 
// setup trial points<BR>&nbsp; typedef FastMarcherType::NodeType 
NodeType;<BR>&nbsp; typedef FastMarcherType::NodeContainer 
NodeContainer;</FONT></SPAN></P>
<P class=MsoNormal><FONT size=2><SPAN 
class=733323418-11102002>&nbsp;&nbsp;</SPAN><SPAN 
class=733323418-11102002>NodeContainer::Pointer trialPoints = 
NodeContainer::New();</SPAN></FONT></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>&nbsp; NodeType 
node;</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>&nbsp; 
</FONT></SPAN><SPAN class=733323418-11102002><FONT size=2>FloatImage::IndexType 
index0 = {{150,245}};<BR>&nbsp;&nbsp;<BR>&nbsp; node.SetValue( 0.0 );<BR>&nbsp; 
node.SetIndex( index0 );<BR>&nbsp; trialPoints-&gt;InsertElement(0, 
node);</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>&nbsp; 
marcher-&gt;SetTrialPoints( trialPoints );<BR>&nbsp; <BR>&nbsp; // specify the 
size of the output image<BR>&nbsp; FloatImage::SizeType size = 
{{512,512}};<BR>&nbsp; marcher-&gt;SetOutputSize( size );</FONT></SPAN></P>
<P class=MsoNormal><SPAN class=733323418-11102002><FONT size=2>&nbsp; // Make 
the inside of circle of radius 8 negative or positive?<BR>&nbsp; 
itk::ShiftScaleImageFilter&lt;FloatImage, FloatImage&gt;::Pointer 
shiftScale<BR>&nbsp;&nbsp;&nbsp; = itk::ShiftScaleImageFilter&lt;FloatImage, 
FloatImage&gt;::New();<BR>&nbsp; 
shiftScale-&gt;SetInput(marcher-&gt;GetOutput());<BR>&nbsp; 
shiftScale-&gt;SetShift( -8.0 );<BR>&nbsp; shiftScale-&gt;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 &amp; 
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>&nbsp;<?xml:namespace prefix = o ns = 
"urn:schemas-microsoft-com:office:office" /><o:p></o:p></P></DIV>
<DIV>&nbsp;</DIV></BODY></HTML>

------_=_NextPart_001_01C27157.8365D064--