[Insight-users] Segmentation simple circular model with level sets

silvano silagliozzo at gmail.com
Mon Oct 18 04:36:43 EDT 2010


Hi Luis and ITK Staff,

It is a good think  to start the working week with a good new !!! ;)
Of course, I've tried successfully your attached code and I'll profit from
your suggestions to get good segmentations.

Thank u very much

Silvano


On Sun, Oct 17, 2010 at 4:22 PM, Luis Ibanez <luis.ibanez at kitware.com>wrote:

>
> Hi Silvano,
>
> Thanks a lot for the clear description of the problem
> that you are observing,
>
> and for providing self-contained code that makes
> very easy to reproduce your observation.
>
>
> The good news:
>
>                 You code works fine
>
> (with some small modifications)
>
>
> Essentially, the problem is that you are letting the
> level set run for too many iterations, and that the
> value of RMS tolerance for convergence is too
> high, so the shape detection level set filter doesn't
> stop by itself.
>
> This also implies that the edge image have values
> that are not close enough to zero at the boundary
> of the circle.
>
> -----
>
> The proper time to stop (for this image) is around
> iteration 65 instead of the current 1000.
>
> and
>
> a better RMS tolerance, for this image, is 0.2
> instead of the current 0.02.
>
>
> How do we get to these magic numbers ?
>
> You may wonder...    :-)
>
>
> Here it is:
>
> (The modified source code is attached)
>
>
> 1) We added a command observer and print the
>     values of RMS change for every iteration
>     of the filter.
>
> 2) We plotted this values with gnuplot, or you favorite
>     Open Source plotting program.
>     (plots also attached)
>
> 3) To make the experimentation easier we added the
>      number of iterations and the RMS tolerance values
>      to the list of command line parameters.
>
> 4) We ran
>
>  ./segment 101 10 1 1 1 10 1000 0.2 > data1000.txt
>
>     and got the plot on the attached file data1000.png
>
>   In this plot, you can see that there is an obvious dip
>   in the RMS change values, somewhere before iteration
>   100, which happens to be when the level set slowed
>   down at the edge of the circle.
>
>   Then, once the level set crosses that boundary, it
>    goes on propagating outside the circle from iterations
>    ~100 to ~200.   Then, just after 200, it peaks and
>    then drops to a noise level oscillating between 0.0
>    and 0.15 RMS change.
>
>    The behavior around 200 correspond to the period
>    of time when the circular level set touches the
>    boundary of the image, and then starts getting out
>    of the image, until when the circle is fully outside
>    of the image.
>
>    All that, tell us that we have to go back and focus
>    on the iterations just before 100.
>
>
> 5) So, we ran
>
>  ./segment 101 10 1 1 1 10 100 0.2 > data100.txt
>
>    and again, used gnuplot to generate
>    the attached plot data100.png
>
>     This plot showed us that the really interesting
>     stuff happened around iteration 65, when the
>     RMS change dropped to about 0.2.
>
>
>
> So, that gave us the hint that the proper value to use
> for RMS tolerance is 0.2 (or something close to it).
>
>
> So, finally we ran
>
>
> 6) ./segment 101 10 1 1 1 10 100 0.2 > data100b.txt
>
>     ( Note the replacement of 0.02 with 0.2)
>
>     and this time the level set stops at iteration 65
>     producing the attached plot data100b.png
>
>
> ----
>
>
> In retrospective, we could also blame the edge.nii
> image for not being close enough to zero at the
> edge of the circle.
>
> Should the edge image had real zero values,
> the level set would not have been able to cross
> it (regardless of whether we let it run to many
> iterations).
>
> When  you look closer at the edge.nii image,
> you will notice that the minimum pixel value
> is  0.336.    Which means that the level set
> will slow down to "speed" 0.33 at those locations
> but will not stop at the edge.  In order to stop the
> level set (irrespectively of the RMS tolerance
> and the maximum number of iterations) you need
> to have zero values in the edge image.
>
> ------------------------------------------------------------
>
> In summary:
>
> A)  The Edge image could have been better
> B)  The RMS tolerance was to stringent
> C)  The level set ran for way too many iterations
> D)  Plotting and visualization always help
>
>
>    Regards,
>
>
>        Luis
>
>
> --------------------------------------------------------------
>
> On Wed, Sep 29, 2010 at 1:03 PM, silvano <silagliozzo at gmail.com> wrote:
>
>> Hi all,
>>
>> I would like to use the very usefull ITK classes to segment mammographic
>> images with level set methods.
>> In order to learn these classes, I run properly the examples provided with
>> the library and explained in the software guide.
>> Therefore, I've tried to apply the filter
>> ShapeDetectionLevelSetImageFilter to a very simple circular model,
>> but I cannot obtain any reasonable segmentation.
>>
>> Hereafter, I report the code used (sorry for the long list of code lines!!
>> :) ).
>> The application accepts a list of arguments, precisely :
>> 1_size_model 2_amplitude_model 3_sigma_smoothing 4_propagationscale 5
>> curvaturescale 6_levelset_initialvalue
>> I tried a lot of different argument lists, among them you can try the
>> following one
>> 101 10 1 1 1 10
>>
>> I would very appreciate to receive any comment, suggestion to solve the
>> problem.
>>
>> Thank u in advance,
>>
>> Silvano
>>
>>
>>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20101018/25c92208/attachment.htm>


More information about the Insight-users mailing list