[Insight-users] SparseFieldLevelSetImageFilter Boundary Conditions
Brady McCary
brady.mccary+ITK at gmail.com
Fri Feb 6 11:53:19 EST 2009
insight-users,
As an update to this thread, I have observed the following. To make
this description clear, remember that the level set method has a
concept of two regions: INSIDE and OUTSIDE. In ITK, the INSIDE
corresponds to negative values and OUTSIDE corresponds to positive
values. By the boundary pixels, I mean the pixels corresponding to the
boundary of a rectangular grid.
Then as for the boundary condition, this is what I have noticed. If
the initialization of the level set is such that boundary pixels are
OUTSIDE and evolution of the level set is such that in the final state
of the level set would be that boundary pixels are INSIDE, then in
many cases (but not all cases) the zero level set will propagate to
the boundary pixels, extending the INSIDE of the level set to
boundary, but the boundary pixels will remain OUTSIDE. Due to the
dynamics in my problem, it is clear that this is not appropriate.
So then to continue my speculation about what is causing this, perhaps:
1. I am abusing the boundary condition.
2. There is an assumption somewhere in ITK that INSIDE values will
only be in the interior of the image.
3. There is an assumption somewhere in ITK that the boundary pixels
will remain constant.
4. There is an assumption somewhere in ITK that the boundary pixels
will not change sign.
I am continuing to search for the root of the problem. Any light or
hints would be greatly appreciated.
Brady
On Thu, Feb 5, 2009 at 2:34 AM, Luca Antiga <luca.antiga at gmail.com> wrote:
> Hi Brady,
> I've been also doing some testing using different level set functions with
> different solvers.
> I must say I have never seen your artifact. However, I've seen a slightly
> different behavior
> between sparse field and parallel sparse field, and the funny thing is that
> the
> parallel version seems to do a slightly better job. I'm trying to track down
> this one as well.
> I'd be interested in knowing if your artifact is still there if you use the
> parallel sparse field.
> Bye for now
>
> Luca
>
>
> On Feb 5, 2009, at 2:46 AM, Brady McCary wrote:
>
>> insight-users,
>>
>> I have implemented some particular level set methods for segmentation.
>> Right now, the underlying class I am using is
>> SparseFieldLevelSetImageFilter. There appear to be some artifacts on
>> the boundary of the image. In particular, it appears that some (but
>> not all) boundary pixels are receiving strange updates. In particular,
>> the output of the filter (i.e., the level set) has values that are the
>> background value (-3 in this case) adjacent to foreground vales (3 in
>> this case) and no narrow band between. My understanding is that this
>> is contrary to the sparse field algorithm, so I am inclined to think
>> one of the following:
>>
>> 1. I am making some abuse of the boundary condition.
>> 2. There is a bug in the sparse field implementation concerning the
>> boundary condition.
>>
>> I have posted the output as a sequence of images in an archive so you
>> can see what I am talking about. Most files in this archive have
>> evident names and all images are in nifti format. Files named
>> phi_NNNN.nii are the level set at iteration NNNN.
>>
>> http://www.utdallas.edu/~bcm052000/mpr021_Slice_1.png.test.tar.bz2
>>
>> Please let me know if you need more information, because I want this
>> anomaly resolved and I am willing to hunt this down if it happens to
>> be bug in ITK. For the time being, I am going to modify the
>> NarrowBandLevelSetImageFilter and DenseFiniteDifferenceImageFilter
>> implementations to include the CalculateUpdateValue which is present
>> in the sparse field implementation (because in this method I am
>> performing a necessary computation). I will then test my
>> LevelSetFunction in these FDSs to see if similar boundary artifacts
>> appear.
>>
>> As a small aside, I have been digging in the internals of ITK much as
>> of late, especially the FDSH. It might be beneficial in the long-term
>> for FiniteDifferenceImageFilter to implement CalculateUpdateValue (as
>> it currently appears in SparseFieldLevelSetImageFilter) so all
>> subclasses can have easy access to it.
>>
>> Brady
>> _______________________________________________
>> Insight-users mailing list
>> Insight-users at itk.org
>> http://www.itk.org/mailman/listinfo/insight-users
>
>
>
More information about the Insight-users
mailing list