<div dir="ltr">I have a couple of filters for binary morphology that are quite fast - they are separable and based on morphology using parabolic structuring functions. There are two repositories - one for general parabolic operations and one for specialised operations on label images. The general one contains classes for binary operations and distance transforms.<div>
<br></div><div>The limitations and/or restrictions of the classes used on binary images are 1) Spherical structuring elements (SE) or ellipses aligned with axes - no other shapes possible 2) the binary image has to be 1/0 valued, not 255/0, for example. </div>
<div><br></div><div>Repositories are:</div><div><br></div><div><a href="https://github.com/richardbeare/parabolicMorphology.git">https://github.com/richardbeare/parabolicMorphology.git</a><br></div><div><br></div><div><a href="https://github.com/richardbeare/LabelErodeDilate.git">https://github.com/richardbeare/LabelErodeDilate.git</a><br>
</div><div><br></div><div>and the insight journal article about the second one is</div><div>







<table cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="middle" class="">
<p class=""><span class=""><a href="http://hdl.handle.net/10380/3399"><b>http://hdl.handle.net/10380/3399</b></a></span></p>
</td>
</tr>
</tbody>
</table></div><div><br></div><div class="gmail_extra">Also note that the greyscale morphology operations in ITK are multithreaded, and there is a range of tradeoffs with speed vs structuring element type. They all work on binary images too, without the 1/0 restriction.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">For general flat structuring elements there is the option of this &quot;HIST&quot; algorithm, which uses a sliding window and will give you complexity of about O(m^(n-1)), where m is the radius of the SE and n is the image dimension. This is faster than the naive approach for all but the tiniest SE. </div>
<div class="gmail_extra"><br></div><div class="gmail_extra">Then there are the Box and Poly structuring elements. These use operations along lines, probably similar to the approach Brad mentioned, and construct different shaped SEs by repeated application. The Box does rectangles/cubes, which are exact. The Poly approximates circles in 2D and attempts to approximate spheres in 3D, but it isn&#39;t great at that.</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">So in summary, if you are definitely interested in the binary case, and are after spheres or ellipses, go with the parabolic stuff. If you need a specific shape that isn&#39;t a sphere or rectangle, try the grayscale morphology histogram methods. In principle these can be made more efficient for the binary case if you really need the speed.<br>
<br><div class="gmail_quote">On Wed, Sep 4, 2013 at 12:15 AM, Bradley Lowekamp <span dir="ltr">&lt;<a href="mailto:blowekamp@mail.nih.gov" target="_blank">blowekamp@mail.nih.gov</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hello,<br>
<br>
Here are some things you can try.<br>
<br>
1) Use the current filter but separate it by decomposing the structuring element. run it 3-times with 1-D lines in each direction.<br>
2) If your image is just 0s and 1s you can try the grayscale algorithms.<br>
<br>
Plug: exploring the performance difference between your current method and the two above is something that SimpleITK in python would be very quick at doing.<br>
<br>
3) A while ago I prototyped a parallel and more optimized algorithm for dilation and closing of 1-D lines. So it only works with Flat structuring elements. I haven&#39;t had a chance to get back to it to polish it up. So I am not sure what the state is, but I was able to use it on my data set and get something like 100X speed up between the parallelization and the different algorithm.<br>

<br>
Here is my ITK external module where I did the work:<br>
<a href="https://github.com/blowekamp/itkBinaryMorphologyPerformance" target="_blank">https://github.com/blowekamp/itkBinaryMorphologyPerformance</a><br>
I&#39;d write a test a verify the results before I used it.<br>
<br>
Good luck and let us know what works for you,<br>
Brad<br>
<div><div class="h5"><br>
On Sep 3, 2013, at 9:59 AM, Jose Ignacio Prieto &lt;<a href="mailto:joseignacio.prieto@gmail.com">joseignacio.prieto@gmail.com</a>&gt; wrote:<br>
<br>
&gt; Hi, I need your advice for a dilate filter I am using. I have cine 3d images (3d+time) loaded as a 4d matrix on itk. They are 25 phases of heart MRI images. So my matrix dimensions are 128,128,65,25. Following the &quot;connected threshold&quot; example, I apply a CurvatureFlowImageFilter for smoothing and then ConnectedThreshold for segmenting the heart and aorta. Then I use Binary dilate over the mask to close the holes (for example between the vessels).<br>

&gt; The question is that the dilate operation takes too much time (around 6 min) and I have noticed that is single-threaded. As the structuring elemente I was using binary ball and now I changed to a FlatStructuringElement(box) to speed up (as I could read in a forum), but it takes the same time. Given that kind of image, what variation could I make to have a fast dilation? What about gpu based methods? I have noticed that the radius 8 ball is the problematic, when I try 4 or 2 pixel radius it works much faster.<br>

&gt; Thank you very much.<br>
&gt;<br>
&gt; --<br>
&gt; José Ignacio Prieto<br>
&gt; celular(nuevo): 94348182<br>
</div></div>&gt; _____________________________________<br>
&gt; Powered by <a href="http://www.kitware.com" target="_blank">www.kitware.com</a><br>
&gt;<br>
&gt; Visit other Kitware open-source projects at<br>
&gt; <a href="http://www.kitware.com/opensource/opensource.html" target="_blank">http://www.kitware.com/opensource/opensource.html</a><br>
&gt;<br>
&gt; Kitware offers ITK Training Courses, for more information visit:<br>
&gt; <a href="http://www.kitware.com/products/protraining.php" target="_blank">http://www.kitware.com/products/protraining.php</a><br>
&gt;<br>
&gt; Please keep messages on-topic and check the ITK FAQ at:<br>
&gt; <a href="http://www.itk.org/Wiki/ITK_FAQ" target="_blank">http://www.itk.org/Wiki/ITK_FAQ</a><br>
&gt;<br>
&gt; Follow this link to subscribe/unsubscribe:<br>
&gt; <a href="http://www.itk.org/mailman/listinfo/insight-users" target="_blank">http://www.itk.org/mailman/listinfo/insight-users</a><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.php" target="_blank">http://www.kitware.com/products/protraining.php</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></div></div>