[Insight-users] FastMarchingImageFilter seg fault = Negative Spacing
Luis Ibanez
luis.ibanez@kitware.com
Sat, 25 Jan 2003 00:27:20 -0500
Hi Mathieu,
The short answer is that ITK is quite unhappy
with the negative spacing in your image.
The long answer is that the RecursiveGaussianImageFilter
used to compute the Gradient Magnitude, takes the spacing
into consideration for the computation. ITK is assuming
positive spacings all over the place.
Now, just to recover your faith on the beauty of the
FastMarchingImageFilter, please do the following
exercise:
1) Take the simple program ImageReadWrite.cxx
In the directory
Insight/Examples/IO
Modify the code to make Dimension = 3
instead of Dimension = 2.
Recompile it.
Then, you get for free a file format converter
from MetaImage to VTK and back.
Not bad for 5 minutes of work :-)
2) Take any of the BrainWeb volumes in the ftp site
ftp://public.kitware.com/pub/itk/Data/
download it, expand the tgz.
and execute (for example):
ImageReadWrite brainweb010102.mha brainweb010102.vtk
This command line will read the BrainWeb
volume from the MetaImage format and save it
in VTK format.
3) Execute again FastMarchingImageFilter
You may want to update your CVS version of ITK
(if you are using one.)
Some recent improvement have been made to the
FastMarchingLevelSet demo-app in the past days.
The most significant of these changes is the introduction
of a Sigmoid for computing the speed image (a negative
exponential was used before). This makes much easier
to control the generation of an appropriate speed image.
The justification is explained in detail on the document:
http://www.itk.org/ItkSoftwareGuide.pdf
(updated 9 minutes ago :-)
4) Load the volume in VTK format, it will take about 30
seconds to load. Then, click on the "display" button
after "Gradient Magnitude". The gradient computation
will take about 30 seconds. A viewer will appear with
the gradient magnitude of the volume.
Now click on the "Display" button just after the
"Linear + Sigmoid" button. It will take about 10 sec.
Another viewer should appear with the result of
passing the gradient magnitude through the sigmoid.
If you clidck with the mouse on the image you will see
intensity values in the lower right corner. Homogeneous
regions should have values close to 1.0 and contour regions
should have values close to 0.0
Now click on the "Display" button just below the "Load"
button. This will show a viewer with the original input image.
By clicking in this image with the mouse you will select
seed points. A red pixel is overlayed on top of every seed
point you selected. If you want to clear the list of seed
points, there is a button "Clear Seeds" below the FastMarching
button. You don't need many seed for this excercise.
Just go, for example, to slice 97 and click a seed point in
the middle of each one of the ventricles. That should be enough.
Now, click on the "Time-Crosssing Map" button just after
"FastMarching". It will take about 5 seconds to compute the map.
A viewer should appear with the result of the time-crossing map.
By moving the slider at the right of the viewer you should be
able to walk through the slices, and find black regions on the
ventricles (around slices 70 to 100),
Finally, click on the "Overlay" button on the top right of
the GUI. It will compute the threshold of the time-crosssing map
and overlay it in red on top of the input image. You can control
the transparency of the overlay with the menu bar option on the
viewer: Click on "Overlay" in the menu bar and then in "Opacity",
a small window with a slider will popup. Moving the slider you
can change the opacity = (1-tranparency) of the red overlay.
If you move now the slice-slider on the right of the viewer you
will be able to visit all the slices.
Time for Coffee !
Now, while drinking your coffee, You will notice that the
segmentation always falls short on touching the actual border of
the ventricles. This is natural in Level Sets and it is mainly
due to the width of the contour bands produced by the Gradient
Magnitude filter. A smaller sigma could help to get closer to the
contour,... but it will never be possible to get to it since a
gradient will always have some width.
In practice it could make sense to just apply a couple of
Mathematical Morphology Dilations on the final binary mask.
The size of the structurant element should be correlated with the
sigma used in the gaussian.
5) About the version of FLTK... just go with FLTK 1.1.1rc4
you can download it from our "related software page"
http://public.kitware.com/Insight/Web/HTML/DownloadRelatedSoftware.htm
For windows
http://public.kitware.com/Insight/Web/HTML/fltk-1.1.0rc4-source.zip
For Unix
http://public.kitware.com/Insight/Web/HTML/fltk-1.1.0rc4-source.tar.gz
It is not the latest FLTK version, (and that's why we like it :-)
-------------------
Please let us know if you find any problem,
Thanks
Luis
Enjoy ITK !
----------------------------------------------------
Hi all,
I have tried FastMarchingImageFilter on a 3D image:
$ head image.vtk
# vtk DataFile Version 3.0
vtk output
ASCII
DATASET STRUCTURED_POINTS
DIMENSIONS 512 64 512
SPACING -0.878906 -2.10938 -0.878906
ORIGIN 222.035 78.857 231.947
CELL_DATA 16450623
POINT_DATA 16777216
SCALARS scalars short
I load it ok. I then press 'Gradient Magnitude' (default paramater 1.2).
And when I press 'Dsiplay', it segafults.
Here is the backtrace of gdb:
[malat@localhost Bin]$ gdb ./FastMarchingLevelSet
GNU gdb Red Hat Linux (5.1.90CVS-5)
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are
welcome to change it and/or distribute copies of it under certain
conditions.
Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-redhat-linux"...
(gdb) run
Starting program: /home/malat/Kitware/InsightBin/Bin/FastMarchingLevelSet
[New Thread 1024 (LWP 7125)]
[New Thread 2049 (LWP 7140)]
[New Thread 1026 (LWP 7141)]
Program received signal SIGABRT, Aborted.
[Switching to Thread 1024 (LWP 7125)]
0x42029241 in kill () from /lib/i686/libc.so.6
(gdb) bt
#0 0x42029241 in kill () from /lib/i686/libc.so.6
#1 0x40039c4b in raise () from /lib/i686/libpthread.so.0
#2 0x4202a7d2 in abort () from /lib/i686/libc.so.6
#3 0x412e8fab in __default_terminate () at ../../gcc/libgcc2.c:-1
#4 0x412e8fca in __terminate () from /usr/local/lib/libfltk.so.1.1
#5 0x412e9d05 in throw_helper (eh=0x811cb80, pc=0x4128375c,
my_udata=0xbfffec30, offset_p=0xbfffec2c)
from /usr/local/lib/libfltk.so.1.1
#6 0x412e9fff in __rethrow (index=0x80ba474) from
/usr/local/lib/libfltk.so.1.1
#7 0x0807439c in
itk::GradientMagnitudeRecursiveGaussianImageFilter<itk::Image<float, 3>,
itk::Image<float, 3> >::GenerateData (this=0x80cb2f0) at
/home/malat/Kitware/Insight/Code/Common/itkSmartPointer.h:74
#8 0x403941f1 in itk::ProcessObject::UpdateOutputData ()
from /home/malat/Kitware/InsightBin/Lib/libITKCommon.so
#9 0x4037320b in itk::DataObject::UpdateOutputData () from
/home/malat/Kitware/InsightBin/Lib/libITKCommon.so
#10 0x40372d7e in itk::DataObject::Update () from
/home/malat/Kitware/InsightBin/Lib/libITKCommon.so
#11 0x40393773 in itk::ProcessObject::Update () from
/home/malat/Kitware/InsightBin/Lib/libITKCommon.so
#12 0x08066976 in FastMarchingLevelSetBase::ComputeGradientMagnitude
(this=0x80c90d0)
at /home/malat/Kitware/Insight/Code/Common/itkSmartPointer.h:79
#13 0x08063ecf in FastMarchingLevelSetGUI::cb_Gradient (o=0x80d3818, v=0x0)
at
/home/malat/Kitware/InsightBin/Applications/FastMarchingLevelSet/FastMarchingLevelSetGUI.cxx:69
#14 0x4128375d in Fl_Widget::do_callback (this=0x80d3818) at
../FL/Fl_Widget.H:179
#15 0x4128b62d in Fl_Button::handle (this=0x80d3818, event=2) at
Fl_Button.cxx:101
#16 0x4128235a in send (event=2, to=0x80d3818, window=0x80d2c50) at
Fl.cxx:531
#17 0x412826dd in Fl::handle (event=2, window=0x80d2c50) at Fl.cxx:606
#18 0x412d7165 in fl_handle (xevent=@0xbffff430) at Fl_x.cxx:884
#19 0x412d549b in do_queued_events () at Fl_x.cxx:170
#20 0x412d58d3 in fd_callback () at Fl_x.cxx:287
#21 0x412d57e0 in fl_wait (time_to_wait=1e+20) at Fl_x.cxx:236
#22 0x4128190b in Fl::wait (time_to_wait=1e+20) at Fl.cxx:273
#23 0x4128194e in Fl::run () at Fl.cxx:280
#24 0x08099dae in main ()
at
/home/malat/Kitware/Insight/Applications/FastMarchingLevelSet/FastMarchingLevelSet.cxx:486
#25 0x42017499 in __libc_start_main () from /lib/i686/libc.so.6
(gdb) The program is running. Exit anyway? (y or n) y
Any idea ?
Thanks a lot,
Mathieu
Ps: By the way ldd seems ok:
[malat@localhost Bin]$ ldd ./FastMarchingLevelSet
libpthread.so.0 => /lib/i686/libpthread.so.0 (0x40031000)
libdl.so.2 => /lib/libdl.so.2 (0x40046000)
libITKAlgorithms.so =>
/home/malat/Kitware/InsightBin/Lib/libITKAlgorithms.so (0x40049000)
libVXLNumerics.so =>
/home/malat/Kitware/InsightBin/Lib/libVXLNumerics.so (0x40063000)
libITKCommon.so =>
/home/malat/Kitware/InsightBin/Lib/libITKCommon.so (0x40334000)
libITKBasicFilters.so =>
/home/malat/Kitware/InsightBin/Lib/libITKBasicFilters.so (0x403c4000)
libITKNumerics.so =>
/home/malat/Kitware/InsightBin/Lib/libITKNumerics.so (0x403ca000)
libITKIO.so => /home/malat/Kitware/InsightBin/Lib/libITKIO.so
(0x40413000)
libITKFltkImageViewer.so =>
/home/malat/Kitware/InsightBin/Lib/libITKFltkImageViewer.so (0x40495000)
libITKVtkFltk.so =>
/home/malat/Kitware/InsightBin/Lib/libITKVtkFltk.so (0x404d1000)
libvtkRendering.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkRendering.so (0x404d8000)
libvtkGraphics.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkGraphics.so (0x4071b000)
libvtkHybrid.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkHybrid.so (0x409c0000)
libvtkImaging.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkImaging.so (0x40b3c000)
libvtkIO.so => /home/malat/Kitware/VTKBin/Lib/libvtkIO.so
(0x40ddd000)
libvtkFiltering.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkFiltering.so (0x40fed000)
libvtkCommon.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkCommon.so (0x4105f000)
libfltk.so.1.1 => /usr/local/lib/libfltk.so.1.1 (0x4125a000)
libfltk_gl.so.1.1 => /usr/local/lib/libfltk_gl.so.1.1 (0x412fa000)
libfltk_forms.so.1.1 => /usr/local/lib/libfltk_forms.so.1.1
(0x4130d000)
libfltk_images.so.1.1 => /usr/local/lib/libfltk_images.so.1.1
(0x4131d000)
libX11.so.6 => /usr/X11R6/lib/libX11.so.6 (0x4132e000)
libXext.so.6 => /usr/X11R6/lib/libXext.so.6 (0x41403000)
libGLU.so.1 => /usr/X11R6/lib/libGLU.so.1 (0x41410000)
libGL.so.1 => /usr/lib/libGL.so.1 (0x4148b000)
libitkpng.so => /home/malat/Kitware/InsightBin/Lib/libitkpng.so
(0x414d9000)
libitkzlib.so =>
/home/malat/Kitware/InsightBin/Lib/libitkzlib.so (0x41501000)
libITKMetaIO.so =>
/home/malat/Kitware/InsightBin/Lib/libITKMetaIO.so (0x41512000)
libDICOMParser.so =>
/home/malat/Kitware/InsightBin/Lib/libDICOMParser.so (0x41547000)
libITKGlut.so =>
/home/malat/Kitware/InsightBin/Lib/libITKGlut.so (0x4156e000)
libglut.so.3 => /usr/lib/libglut.so.3 (0x41572000)
libXmu.so.6 => /usr/X11R6/lib/libXmu.so.6 (0x415a6000)
libXi.so.6 => /usr/X11R6/lib/libXi.so.6 (0x415bb000)
libvtkftgl.so => /home/malat/Kitware/VTKBin/Lib/libvtkftgl.so
(0x415c3000)
libvtkfreetype.so =>
/home/malat/Kitware/VTKBin/Lib/libvtkfreetype.so (0x415cc000)
libXt.so.6 => /usr/X11R6/lib/libXt.so.6 (0x4160e000)
libvtkpng.so => /home/malat/Kitware/VTKBin/Lib/libvtkpng.so
(0x4165a000)
libvtktiff.so => /home/malat/Kitware/VTKBin/Lib/libvtktiff.so
(0x41685000)
libvtkzlib.so => /home/malat/Kitware/VTKBin/Lib/libvtkzlib.so
(0x416d6000)
libvtkjpeg.so => /home/malat/Kitware/VTKBin/Lib/libvtkjpeg.so
(0x416e7000)
libvtkexpat.so => /home/malat/Kitware/VTKBin/Lib/libvtkexpat.so
(0x4170d000)
libstdc++.so.5 => /usr/local/lib/libstdc++.so.5 (0x4173a000)
libm.so.6 => /lib/i686/libm.so.6 (0x417ea000)
libc.so.6 => /lib/i686/libc.so.6 (0x42000000)
libstdc++-libc6.2-2.so.3 => /usr/lib/libstdc++-libc6.2-2.so.3
(0x4180d000)
libXft.so.1 => /usr/X11R6/lib/libXft.so.1 (0x41850000)
libpng.so.2 => /usr/lib/libpng.so.2 (0x4187a000)
libjpeg.so.62 => /usr/lib/libjpeg.so.62 (0x4189b000)
libz.so.1 => /usr/lib/libz.so.1 (0x418ba000)
libGLcore.so.1 => /usr/lib/libGLcore.so.1 (0x418c8000)
libSM.so.6 => /usr/X11R6/lib/libSM.so.6 (0x41d5a000)
libICE.so.6 => /usr/X11R6/lib/libICE.so.6 (0x41d62000)
libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x41d79000)
/lib/ld-linux.so.2 => /lib/ld-linux.so.2 (0x40000000)
libXrender.so.1 => /usr/X11R6/lib/libXrender.so.1 (0x41d82000)
libfreetype.so.6 => /usr/lib/libfreetype.so.6 (0x41d87000)
And finally (if someone reach that point), I am not sure about which
fltk verion I need:
According to the ITK FAQ:
http://www.itk.org/cgi-bin/InsightFAQ/InsightFAQ?query=fltk&querytype=simple&casefold=yes&req=search
I need rc6.
But according to http://itk.org/HTML/DownloadRelatedSoftware.htm
The only one available is rc4
Thanks again !
mathieu