<div dir="ltr"><font><font face="verdana,sans-serif">I read your DICTA article, as well as the IJ article.</font></font><div><font><font face="verdana,sans-serif"><br></font></font></div><div><font><font face="verdana,sans-serif">I ran your examples with my test data, using the following command line arguments: &quot;</font></font><font face="verdana, sans-serif">-r 50 </font><span style="font-family:verdana,sans-serif">-i image.mha </span><span style="font-family:verdana,sans-serif">-o out.mha&quot;.</span></div>

<div><span style="font-family:verdana,sans-serif"><br></span></div>
<div><font><font face="verdana,sans-serif">labelSetsDilate creates an artifact, when compared to others (such as WaterShed variant). </font></font><span style="font-family:verdana,sans-serif">I tried looking at the code, but it is not easy to find this bug myself. </span><span style="font-family:verdana,sans-serif">Images are attached.</span></div>

<div><span style="font-family:verdana,sans-serif"><br></span></div><div style><span style="font-family:verdana,sans-serif">Your implementation is significantly faster (I have not measured how much exactly). Lastly, thank you for sharing the code.</span></div>

</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Wed, Feb 13, 2013 at 4:34 AM, Richard Beare <span dir="ltr">&lt;<a href="mailto:richard.beare@gmail.com" target="_blank">richard.beare@gmail.com</a>&gt;</span> wrote:<br>

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">The parallel classes for this are now on InsightJournal. Article<br>
includes some comparisons - hope it helps:<br>
<br>
<a href="http://hdl.handle.net/10380/3399" target="_blank">http://hdl.handle.net/10380/3399</a><br>
<div class="HOEnZb"><div class="h5"><br>
<br>
On Tue, Feb 12, 2013 at 8:20 AM, Dženan Zukić &lt;<a href="mailto:dzenanz@gmail.com">dzenanz@gmail.com</a>&gt; wrote:<br>
&gt; Today I finally managed to try it myself, and it works. Below is<br>
&gt; implementation in ITK, if anyone needs it.<br>
&gt;<br>
&gt; typedef itk::Image&lt;unsigned char, 3&gt; VisualizingImageType;<br>
&gt; typedef itk::Image&lt;float, 3&gt; InternalImageType;<br>
&gt;<br>
&gt; //function call example<br>
&gt; std::vector&lt;VisualizingImageType::IndexType&gt; centers;<br>
&gt; for (int i=0; i&lt;vertebra.size(); i++)<br>
&gt; centers.push_back(vertebra[i]-&gt;centerIndex);<br>
&gt; VisualizingImageType::Pointer vInfluence=multilabelDilation(region, 50,<br>
&gt; centers);<br>
&gt;<br>
&gt;<br>
&gt; VisualizingImageType::Pointer multilabelDilation(itk::ImageRegion&lt;3&gt; region,<br>
&gt; float radius, std::vector&lt;VisualizingImageType::IndexType&gt; points)<br>
&gt; {<br>
&gt;     typedef<br>
&gt; itk::BinaryBallStructuringElement&lt;VisualizingImageType::PixelType,3&gt;<br>
&gt; BallType;<br>
&gt;     BallType ball;<br>
&gt;     ball.SetRadius(radius);<br>
&gt;     ball.CreateStructuringElement();<br>
&gt;     typedef itk::BinaryDilateImageFilter&lt;VisualizingImageType,<br>
&gt; VisualizingImageType, BallType&gt; growType;<br>
&gt;     growType::Pointer grow=growType::New();<br>
&gt;     grow-&gt;SetKernel(ball); //grow-&gt;SetRadius(radius);<br>
&gt;<br>
&gt;     VisualizingImageType::Pointer image=VisualizingImageType::New();<br>
&gt;     image-&gt;SetRegions(region);<br>
&gt;     image-&gt;Allocate();<br>
&gt;     image-&gt;FillBuffer(0);<br>
&gt;     for (int i=0; i&lt;points.size(); i++)<br>
&gt;         image-&gt;SetPixel(points[i], grow-&gt;GetDilateValue());<br>
&gt;<br>
&gt;     grow-&gt;SetInput(image);<br>
&gt;     grow-&gt;Update();<br>
&gt;     writeImage(grow-&gt;GetOutput(), &quot;1dilate.nrrd&quot;); //debug<br>
&gt;<br>
&gt;     typedef itk::SignedMaurerDistanceMapImageFilter&lt;VisualizingImageType,<br>
&gt; InternalImageType&gt; DistanceMapType;<br>
&gt;     DistanceMapType::Pointer dm=DistanceMapType::New();<br>
&gt;     dm-&gt;SetInput(image);<br>
&gt;     dm-&gt;SetUseImageSpacing(true);<br>
&gt;     dm-&gt;InsideIsPositiveOff();<br>
&gt;     dm-&gt;Update();<br>
&gt;     writeImage(dm-&gt;GetOutput(), &quot;2distanceMap.nrrd&quot;); //debug<br>
&gt;<br>
&gt;     for (int i=0; i&lt;points.size(); i++)<br>
&gt;         image-&gt;SetPixel(points[i], i+1); //now set index+1<br>
&gt;<br>
&gt;     typedef<br>
&gt; itk::MorphologicalWatershedFromMarkersImageFilter&lt;InternalImageType,<br>
&gt; VisualizingImageType&gt; morphoWSfMType;<br>
&gt;     morphoWSfMType::Pointer ws=morphoWSfMType::New();<br>
&gt;     ws-&gt;SetInput1(dm-&gt;GetOutput());<br>
&gt;     ws-&gt;SetInput2(image);<br>
&gt;     ws-&gt;Update();<br>
&gt;     writeImage(ws-&gt;GetOutput(), &quot;3watershed.nrrd&quot;); //debug<br>
&gt;<br>
&gt;     typedef itk::AndImageFilter&lt;VisualizingImageType&gt; AndType;<br>
&gt;     AndType::Pointer and=AndType::New();<br>
&gt;     and-&gt;SetInput1(ws-&gt;GetOutput());<br>
&gt;     and-&gt;SetInput2(grow-&gt;GetOutput());<br>
&gt;     and-&gt;Update();<br>
&gt;     writeImage(and-&gt;GetOutput(), &quot;4multiplied.nrrd&quot;); //debug<br>
&gt;<br>
&gt;     return and-&gt;GetOutput();<br>
&gt; }<br>
&gt;<br>
&gt;<br>
&gt; On Fri, Feb 8, 2013 at 11:36 AM, Bradley Lowekamp &lt;<a href="mailto:blowekamp@mail.nih.gov">blowekamp@mail.nih.gov</a>&gt;<br>
&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Unfortunately, my helpful e-mail was too big to make it to the list. So<br>
&gt;&gt; here is the important bit, which defines a function in Python with<br>
&gt;&gt; SimpleITK:<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; def MultilabelDilation(img,<br>
&gt;&gt; radius=1,kernel=sitk.BinaryDilateImageFilter.Ball):<br>
&gt;&gt;<br>
&gt;&gt;     distImg = sitk.SignedMaurerDistanceMap(img != 0,<br>
&gt;&gt; insideIsPositive=False, squaredDistance=False, useImageSpacing=False)<br>
&gt;&gt;<br>
&gt;&gt;     dilatImg = sitk.BinaryDilate(img!=0, radius, kernel)<br>
&gt;&gt;<br>
&gt;&gt;     wsImg = sitk.MorphologicalWatershedFromMarkers(distImg, img)<br>
&gt;&gt;<br>
&gt;&gt;     return dilatImg*wsImg<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Feb 8, 2013, at 9:42 AM, Dženan Zukić &lt;<a href="mailto:dzenanz@gmail.com">dzenanz@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Thanks for the interest and the provided code Brad. Hopefully I will get<br>
&gt;&gt; to work today to try it out myself :D (Blizzard warning in Boston, where I<br>
&gt;&gt; am for a couple months)<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
</div></div></blockquote></div><br></div>