[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