[Insight-users] Issue with BinaryErodeImageFilter

Robert Tamburo robert.tamburo at gmail.com
Wed Sep 12 16:42:04 EDT 2007


Hi Dan,

> To perform erosion in a slice-by-slice manner,
> you simply set one of the sizes in your structuring element to zero,
> eg. Size=[1,1,0].
Worked like a charm!

> Alternatively, if eventually you want to apply other
> filters on a slice-by-slice basis, you could employ the
> SliceBySliceImageFilter which Gaetan submitted to the Insight Journal:
>    http://insight-journal.org/dspace/handle/1926/368
Nice filter. I had just finished writing a sizeable chunk of code to  
do that. Oops.

Thanks again,
Robert

On Sep 12, 2007, at 3:11 PM, Dan Mueller wrote:

> Hi Robert,
>
> I had a look at your data, it seems to be highly anisotropic (the
> out-of-plane resolution is much bigger than the in-plane resolution,
> Spacing=[1.87500, 1.87500, 7.00000]). In this case perhaps 3-D erosion
> is not really suitable. To perform erosion in a slice-by-slice manner,
> you simply set one of the sizes in your structuring element to zero,
> eg. Size=[1,1,0]. Alternatively, if eventually you want to apply other
> filters on a slice-by-slice basis, you could employ the
> SliceBySliceImageFilter which Gaetan submitted to the Insight Journal:
>    http://insight-journal.org/dspace/handle/1926/368
>
> In terms of boundary conditions, the BinaryErodeImageFilter uses a
> ConstantBoundaryCondition with pixels outside set to zero:
>    see Code/BasicFilters/itkBinaryMorphologyImageFilter.txx, line  
> 201-204
>
> Welcome to the world of open-source, where you can peer directly into
> the guts of the code to see how the algorithm is implemented!
>
> HTH
>
> Cheers, Dan
>
> On 13/09/2007, Robert Tamburo <robert.tamburo at gmail.com> wrote:
>> Hi Gaëtan and Dan,
>>
>> Thanks for the replies.  I've uploaded the code and data to http://
>> www.tamburo.us/temp/erosion_files/erosion.zip
>>
>> Dan, that does make some sense. I forgot that the structure element
>> was a sphere and not a disc. I suppose that I was expecting a slice
>> by slice erosion in the volume. Is there currently a way to do this?
>> I tried using a 2D structure element, but received an awful error.
>>
>> How are boundary conditions handled? In the case that I removed the
>> blank slices, what is being used as the "previous slice"? What
>> accounts for the seemingly repeated first slice in the output image?
>>
>> Thanks again,
>> Robert
>>
>>
>> On Sep 11, 2007, at 6:29 PM, Dan Mueller wrote:
>>
>>> Hi Robert,
>>>
>>> From your description, it appears the erode filter is working
>>> correctly. If slice 0 and 18 are blank in your input image, after
>>> eroding with a structuring element [1,1,1] I would expect slice 1  
>>> and
>>> 17 to also be blank in the output. Remember, the erode filter takes
>>> the minimum value of all those under the element; for slices 1  
>>> and 17
>>> the element will include pixels from slice 0 (and 2) and slice 18  
>>> (and
>>> 16), which are blank (ie. the minimum). I don't think the
>>> corresponding slice index is being moved, but simply the erosion has
>>> been applied changing the shape for all given slices.
>>>
>>> As Gaetan said, providing the source code would be very helpful.  
>>> Also,
>>> perhaps you could upload your original 3-D dataset to the URL so we
>>> can confirm nothing funny is happening.
>>>
>>> Anyway, hope this helps.
>>>
>>> Cheers, Dan
>>>
>>> On 12/09/2007, Gaëtan Lehmann <gaetan.lehmann at jouy.inra.fr> wrote:
>>>>
>>>> Hi Robert,
>>>>
>>>> Le 11 sept. 07 à 23:48, Robert Tamburo a écrit :
>>>>
>>>>> Hi all,
>>>>>
>>>>> I'm trying to use the erosion filter on a 3D binary image. I'm
>>>>> using the itkBinaryErodeImageFilter with an
>>>>> itkBinaryBallStructuringElement in the same way that is
>>>>> demonstrated in the SoftwareGuide. The input image has a total of
>>>>> 19 slices with the first and last slices being blank (black,
>>>>> background). In the output image the first 2 and last 2 slices end
>>>>> up being blank... two slices of data are missing.  Moreover, an
>>>>> obviously corresponding slice no longer has the same index.
>>>>>
>>>>> I tried a couple of things to try and understand what was
>>>>> happening. First, I tried padding the image with additional blank
>>>>> slices. I added 1, 2, and 3 additional slices and got the same
>>>>> results.  Then I tried removing the blank slices. No blank slices
>>>>> were introduced. However, the index problem is still an issue.
>>>>> I've created a temp web page with some screen captures to better
>>>>> illustrate the problem. The URL is: http://www.tamburo.us/temp/
>>>>> erosion.htm
>>>>>
>>>>> The results are confusing to me and not what I expected. Any
>>>>> clarification on these issues would be greatly appreciated. Source
>>>>> code and images can be made available if needed.
>>>>
>>>> The source code would be really useful. If you can send it, I'll  
>>>> look
>>>> at that problem tomorrow.
>>>> In the mean time, here are some possible cause of the problem:
>>>>   - be sure to call the CreateStructuringElement() method on the
>>>> BinaryBallStructuringElement
>>>>   - try with ITK cvs - it include a fix for a bug in ITK 3.2 which
>>>> highly slow down the filter. The speed may not the only effect of
>>>> that bug...
>>>>
>>>>>
>>>>> Regards,
>>>>> Robert
>>>>>
>>>>> P. S. I'm using a MacBook Pro with ITK version 3.2.0 and gcc  
>>>>> 4.0.1.
>>>>
>>>> I'm doing the same - works great for me :-)
>>>>
>>>>> P. P. S. The documentation in the header for the erosion filter is
>>>>> incorrect in that it describes dilation.
>>>>
>>>> I'll fix that (I must be the one who made that mistake). Thanks for
>>>> the report!
>>>>
>>>> Regards,
>>>>
>>>> Gaëtan



More information about the Insight-users mailing list