Hi Neal,<br><br>I am not sure if this is the problem, but can you insert and then try:<br><br>converter-&gt;SetBackgroundValue(0);<br>converter-&gt;Update();<br><br>Kishore<br><br><br><div class="gmail_quote">On Thu, Mar 11, 2010 at 11:27 AM, Neal R. Harvey <span dir="ltr">&lt;<a href="mailto:harve@lanl.gov">harve@lanl.gov</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">I am still struggling with getting the information I need about the various regions (objects) that<br>

I obtain from a segmentation.<br>
I am using ITK&#39;s watershed code to segment an image.<br>
Then, I want to calculate various attributes of each of the regions found in the segmentation.<br>
For attribute calculation, I am trying to use the ShapeLabelMapFilter, etc. as described in<br>
Lehmann&#39;s paper, entitled &quot;Label Object Representation and Manipulation with ITK&quot;.<br>
Richard Beare offered some hints last time and I have been trying to use that, together with the<br>
information in the paper referred to above.<br>
<br>
Below is the snippet of code that I wrote that starts at the point where I have obtained a<br>
segmentation from the watershed algorithm. The code compiles with no problem.<br>
What I would expect that, if this was doing what I was hoping it would do, I would see<br>
the same number of objects being reported from the ShapeLabelMapFilter as the number<br>
of regions that is getting reported from the watershed segmentation. However, I get the<br>
number of objects reported from the ShapeLabelMapFilter as zero.<br>
<br>
Can anyone suggest a fix or has any idea as to what I am doing wrong?<br>
<br>
On a slightly different, but related (i.e. it isn&#39;t a problem at the moment, as the problem<br>
described above is not allowing the calculation of the object attributes, as it doesn&#39;t<br>
think there are any object), is if I include calls to GetFeretDiameter() or GetEquivalentRadius()<br>
the code won&#39;t even compile!<br>
<br>
 WatershedFilter-&gt;SetLevel( watershedLevel );<br>
 WatershedFilter-&gt;SetThreshold( watershedThreshold );<br>
 WatershedFilter-&gt;SetInput( TemporaryImage );<br>
 WatershedFilter-&gt;Update();<br>
<br>
 // The output of the watershed is an image of unsigned long int<br>
<br>
 typedef unsigned long       WatershedPixelType;<br>
<br>
 typedef itk::Image&lt; WatershedPixelType, Dimension &gt;     WatershedImageType;<br>
<br>
 WatershedImageType::Pointer WatershedImage = WatershedFilter-&gt;GetOutput();<br>
<br>
 //  Below we instantiate the MinimumMaximumImageCalculator class<br>
<br>
 typedef itk::MinimumMaximumImageFilter&lt; WatershedImageType &gt; MinimumMaximumWatershedImageFilterType;<br>
<br>
 // A MinimumMaximumWatershedImageFilter object is constructed<br>
<br>
 MinimumMaximumWatershedImageFilterType::Pointer MinimumMaximumWatershedImageFilter = MinimumMaximumWatershedImageFilterType::New();<br>
<br>
 MinimumMaximumWatershedImageFilter-&gt;SetInput( WatershedImage );<br>
<br>
 MinimumMaximumWatershedImageFilter-&gt;Update();<br>
<br>
 WatershedPixelType outputMinVal = MinimumMaximumWatershedImageFilter-&gt;GetMinimum();<br>
 WatershedPixelType outputMaxVal = MinimumMaximumWatershedImageFilter-&gt;GetMaximum();<br>
<br>
 std::cerr &lt;&lt; &quot;Minimum Value from Segmented Image = &quot; &lt;&lt; (int)outputMinVal &lt;&lt; std::endl;<br>
 std::cerr &lt;&lt; &quot;Maximum Value from Segmented Image = &quot; &lt;&lt; (int)outputMaxVal &lt;&lt; std::endl;<br>
<br>
 // OK So, now we have a labeled image output from the watershed<br>
 // We now want to calculate various characteristics of the objects in the<br>
 // labeled image<br>
<br>
 typedef unsigned long LabelType;<br>
 typedef itk::ShapeLabelObject&lt; LabelType, Dimension &gt; LabelObjectType;<br>
 typedef itk::LabelMap&lt; LabelObjectType &gt; LabelMapType;<br>
<br>
 // First we need to convert the output from the watershed filter to a<br>
 // collection of label objects<br>
<br>
 typedef itk::LabelImageToShapeLabelMapFilter&lt; WatershedImageType, LabelMapType &gt; ConverterType;<br>
 ConverterType::Pointer converter = ConverterType::New();<br>
 converter-&gt;SetInput( WatershedImage );<br>
<br>
 // Then, can we evaluate the attributes with the dedicated filtr: ShapeLabelMapFilter?<br>
 typedef itk::ShapeLabelMapFilter&lt; LabelMapType &gt; ShapeFilterType;<br>
 ShapeFilterType::Pointer shape = ShapeFilterType::New();<br>
 shape-&gt;SetInput( converter-&gt;GetOutput() );<br>
<br>
 shape-&gt;Update();<br>
<br>
 LabelMapType::Pointer labelMap = converter-&gt;GetOutput();<br>
<br>
 unsigned int NumberOfLabelObjects = labelMap-&gt;GetNumberOfLabelObjects();<br>
<br>
 std::cout &lt;&lt; &quot;labelMap-&gt;GetNumberOfLabelObjects() = &quot; &lt;&lt; NumberOfLabelObjects &lt;&lt; std::endl;<br>
<br>
 if (NumberOfLabelObjects &lt; 1) {<br>
<br>
   std::cerr &lt;&lt; &quot;Number of Label Objects is incorrect&quot; &lt;&lt; std::endl;<br>
<br>
   return EXIT_FAILURE;<br>
<br>
 } else {<br>
<br>
   for (unsigned int label = 1; label &lt;= NumberOfLabelObjects; label++) {<br>
     const LabelObjectType * labelObject = labelMap-&gt;GetLabelObject( label );<br>
<br>
     //&quot;; FeretDiameter = &quot; &lt;&lt; labelObject-&gt;GetFeretDiameter() &lt;&lt; &quot;; EquivalentRadius = &quot; &lt;&lt; labelObject-&gt;GetEquivalentRadius()  &lt;&lt;<br>
<br>
     std::cout &lt;&lt; &quot;Label #: &quot; &lt;&lt; label &lt;&lt; &quot;; Size = &quot; &lt;&lt; labelObject-&gt;GetSize() &lt;&lt; &quot;; Perimeter = &quot; &lt;&lt; labelObject-&gt;GetPerimeter() &lt;&lt; std::endl;<br>

         return EXIT_SUCCESS;<br>
<br>
   }<br>
<br>
 }<br>
_____________________________________<br>
Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
<br>
Visit other Kitware open-source projects at<br>
<a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
<br>
Kitware offers ITK Training Courses, for more information visit:<br>
<a href="http://www.kitware.com/products/protraining.html" target="_blank">http://www.kitware.com/products/protraining.html</a><br>
<br>
Please keep messages on-topic and check the ITK FAQ at:<br>
<a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
<br>
Follow this link to subscribe/unsubscribe:<br>
<a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><br>
</blockquote></div><br>