[Insight-users] Coupled level set segmentation

Nils H. Busch nilsb at cbs.mpg.de
Wed Jan 26 06:34:40 EST 2005


Hi,

I am going to implement a coupled level set segmentation filter as
described by zheng or goldenberg in itk. A coupled level set segmentation
usually constraints the propagation of one level set in relation to
another level set by multiplicating the propagation by a penalty distance
function to effectively force the two level sets to stay within a certain
distance.

Before I start out, I have a few questions about the way the level set
filters and functions interact in itk.

As far as I have understood the itk code, FiniteDifferenceImageFilter
contains in its GenerateData method the main solver iteration loop where
CalculateChange and ApplyUpdate are called. Sub-classes need to override
these two methods (as done in SparseFieldLEvelSetImageFilter or
NarrowBandLevelSetImageFilter). There, their respective FiniteDifference
or LevelSetFuntion::ComputeUpdate is called.
SegmentationLevelSetImageFilter additionally calls GenerateSpeedImage in
its GenerateData method.
GenerateSpeedImage calls SegmentationLevelSetFunction::CalculateSpeedImage
which sub-classes override.

The actual level set equation is computed in
LevelSetFunction::ComputeUpdate  or in sub-classes of it. ComputeUpdate
calls PropagationSpeed which sets the speed image. To have a meaningful
segmentation, concrete level set function sub-classes need to implement
CalculateSpeedImage. PropagationSpeed then uses this speed image.

Is it correct to say CalculateSpeedImage in general computes the static
part of the propagation term ?
Is it correct to incorporate the penalty distance factor in the
PropagationSpeed method as it is time-dependent ?

For a coupled level set segmentation two level sets have to be evolved at
the same time. This, I think, requires a change to
FiniteDifferenceImageFilter::GenerateData to solve two finite difference
equations at one time step.
As I would like the change to the existing code to be the least intrusive,
I would rather sub-class classes higher in the derivation hierachy like at
least SparseFieldLevelSetImageFilter, but I am not sure, if this can be
done. Otherwise a whole new solver hierachy needed to be created with a
lot of code duplication. I also would not want to touch the sparse field
numerical update scheme if not really necessary.

If one would go for a whole new hierachy of coupled level set solvers, it
would make more sense to implement them as the simplest case of
multi-phase solvers, more work even :-( .

Is it feasible to simply use two SegmentationLevelSetImageFilters with an
additional external level set image and set the number of iterations to
one, update each of them, set the external (changed) level set images
again and do this cycle over and over until convergence or is this too
time and memory  consumptive ?

If anyone has ideas, suggestions or even  experience implementing coupled
level set segmentation in itk, I would appreciate to hear them.

Thanks.

-- 
  Nils H. Busch


More information about the Insight-users mailing list