<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<META NAME="Generator" CONTENT="MS Exchange Server version 6.5.6944.0">
<TITLE>RE: [Insight-users] Connected component statistics</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/rtf format -->

<P><FONT SIZE=2 FACE="Courier New">Hi Jim/Richard,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">I like the idea of using std::map&lt;itk::CommponentStatistics&gt; type storage. The first entry of the map (the Key) could be the component label index.&nbsp; It would probably be desirable to assign label for each of the connected components in descending order of their size (as it is done in the current filter).</FONT></P>

<P><FONT SIZE=2 FACE="Courier New">Sayan</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">&gt; Date: Tue, 19 Jul 2005 09:18:11 -0400</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; From: &quot;Miller, James V (Research)&quot; &lt;millerjv@crd.ge.com&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Subject: RE: [Insight-users] Connected component statistics</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; To: &lt;Richard.Beare@ieee.org&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Cc: insight-users@itk.org, Karthik Krishnan</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;Karthik.Krishnan@kitware.com&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Message-ID:</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;FA26BEF1EA775E4584FB34B91E14A1C403F34F82@SCHMLVEM01.e2k.ad.ge.com&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Content-Type: text/plain;&nbsp;&nbsp;&nbsp;&nbsp; charset=&quot;iso-8859-1&quot;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Richard, </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; A one pass algorithm is what I would want ITK to have to compute these</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; statististics for all components.&nbsp; Glad to hear you were already thinking</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; along those lines.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; As for a representation, I would start with an approach like the RelabelComponentImageFilter</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; and LabelStatisticsImageFilter.&nbsp; After these filters run, you can query the filter for </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; the statistics of interest for a given component.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; If this information needs to flow through the pipeline, then a separate data structure, </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; say a std::map&lt;itk::ComponentStatistics&gt; could be used and wrapped with a DataObjectDecorator</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; to add a DataObject API to the std::map.&nbsp; We would still have to create an itk::ComponentStatistics</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; class (or some other named class) to store the statistics for a given component.</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">&gt; Jim</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">&gt; &gt; -----Original Message-----</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; From: Richard Beare [</FONT><A HREF="mailto:richard.beare@gmail.com"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">mailto:richard.beare@gmail.com</FONT></U></A><FONT SIZE=2 FACE="Courier New">]</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Sent: Monday, July 18, 2005 7:37 PM</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; To: Miller, James V (Research)</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Cc: Gaetan Lehmann; Karthik Krishnan; insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Subject: Re: [Insight-users] Connected component statistics</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Hi everyone,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; It seems that there are a few starting points around already. The</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; measures we computed in my previous job could all be done in a single</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; pass and consolidated at the end. I think that most of them have</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; already been covered in the discussion.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; The only thing I'm not sure about now is an ITK specific question -</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; how should the statistics be represented. The previous function of</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; this type that I used produced a table of statistics as output, with</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; one row for each connected component. This table was easily</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; represented as an image. I suspect that this approach wouldn't be</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; appropriate in ITK, but I'm not sure what the right mechanism is,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; since I'm still learning my way around.</FONT>
</P>

<P><FONT SIZE=2 FACE="Courier New">On 7/18/05, Miller, James V (Research) &lt;millerjv@crd.ge.com&gt; wrote:</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Gaeton,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Center of gravity and bounding box could be added to the RelabelStatisticsImageFilter</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; since they are simple calculations.&nbsp; However, it is a bit of a side-effect.&nbsp; The</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; volume is calculated in the RelabelStatisticsImageFilter because it is used by the</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; filter to order the labels.&nbsp; Since it was already calculated, it made sense to allow</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; the user to access it.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; The best place for these measures and the more complicated measures would be a class</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; similar to the LabelStatisticsImageFilter. The filter should be called something like</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; LabelMomentsImageFilter (and calculate ImageMoments as well as geometric moments. Or maybe</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; something like LabelShapeImageFilter.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; I do not see any reason to use the ImageSpatialMaskObject for this task.&nbsp; Usually, you</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; would want to calculate these features for EVERY component.&nbsp; So it best to run through a</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; filter that does it.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Jim</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; -----Original Message-----</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; From: Gaetan Lehmann [</FONT><A HREF="mailto:gaetan.lehmann@jouy.inra.fr"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">mailto:gaetan.lehmann@jouy.inra.fr</FONT></U></A><FONT SIZE=2 FACE="Courier New">]</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Sent: Monday, July 18, 2005 4:57 AM</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; To: Miller, James V (Research); Karthik Krishnan; Richard.Beare@ieee.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Cc: insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Subject: Re: [Insight-users] Connected component statistics</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Hi,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; I'm also interested in basic measures such as volume, center of gravity</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; and bounding box.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; I think to work on it this week, so it should be great to define where to</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; implement methods to get those informations.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; RelabelComponentImageFilter is already able to give volume, so it should</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; be a good place to add other very simple informations like center of</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; gravity and bounding box.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; It don't seem to be the good place for more complex info such as</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; perimeter/surface... perhap's ImageMaskSpatialObject is a better place ?</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; WDYT ?</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Gaetan</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; On Fri, 15 Jul 2005 20:39:46 +0200, Miller, James V (Research)</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &lt;millerjv@crd.ge.com&gt; wrote:</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; The LabelStatisticsImageFilter will calculate statistics for each</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; component.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Currently, the LabelStatisticsImageFilter calculate mean, variance, sum,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; count,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; and histograms.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; We plan to add another filter that calculated the moments (either image</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; moments or</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; geometric moments) of each component. I have been waiting for it to be</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; completed and</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; may have to just write it myself.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Also, the RelabelComponentImageFilter allows you to query the volume of</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; a component.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Jim</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; -----Original Message-----</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; From: insight-users-bounces+millerjv=crd.ge.com@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; [</FONT><A HREF="mailto:insight-users-bounces+millerjv=crd.ge.com@itk.org]On"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">mailto:insight-users-bounces+millerjv=crd.ge.com@itk.org]On</FONT></U></A><FONT SIZE=2 FACE="Courier New"> Behalf Of</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Karthik Krishnan</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Sent: Friday, July 15, 2005 10:10 AM</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; To: Richard.Beare@ieee.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Cc: insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Subject: Re: [Insight-users] Connected component statistics</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Richard Beare wrote:</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Hi,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; I've found ConnectedComponentImageFilter and</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; RelabelConnectedImageFilter, but I haven't been able to find anything</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; that returns measures of the connected components -- e.g. area/volume,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; perimeter/surface area, centre of gravity, ellipse moments and minimum</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; enclosing rectangles.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; You could threshold the labelled image to get each connected component</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; and...</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; If you are using CVS ITK, I had put a method recently :</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; ImageMaskSpatialObject::GetAxisAlignedBoundingBoxRegion()</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; that computes the minimum axis aligned bounding box of a 3D binary image.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; ImageMomentsCalculator can help you with moments, CG etc.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; An appropriate class to add methods to compute volume, perimeter,</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; surface area etc may be theImageMaskSpatialObject class . You could</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; write them and put them back into ITK :)</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; I don't think ITK has many CAD measurement methods.</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Also, what is the recommended approach for making greyscale measures</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; of regions defined by a connected component image?</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Thanks</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Richard</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; _______________________________________________</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Insight-users mailing list</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; Insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt; </FONT><A HREF="http://www.itk.org/mailman/listinfo/insight-users"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">http://www.itk.org/mailman/listinfo/insight-users</FONT></U></A>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt;&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; _______________________________________________</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Insight-users mailing list</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT><A HREF="http://www.itk.org/mailman/listinfo/insight-users"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">http://www.itk.org/mailman/listinfo/insight-users</FONT></U></A>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; _______________________________________________</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Insight-users mailing list</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; Insight-users@itk.org</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; &gt; </FONT><A HREF="http://www.itk.org/mailman/listinfo/insight-users"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">http://www.itk.org/mailman/listinfo/insight-users</FONT></U></A>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; </FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; --</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Gaetan Lehmann &lt;gaetan.lehmann@jouy.inra.fr&gt;</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Tel: +33 1 34 65 29 66</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Biologie du Développement et de la Reproduction</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; INRA de Jouy-en-Josas (France)</FONT>

<BR><FONT SIZE=2 FACE="Courier New">&gt; Web: </FONT><A HREF="http://voxel.jouy.inra.fr"><U><FONT COLOR="#0000FF" SIZE=2 FACE="Courier New">http://voxel.jouy.inra.fr</FONT></U></A>

<BR><FONT SIZE=2 FACE="Courier New">&gt;</FONT>
</P>

</BODY>
</HTML>