[Insight-users] medial curve extraction compile error

Xavier Mellado Esteban xme at unizar.es
Mon Jun 30 09:30:37 EDT 2008


    Dear Alex,

    Below are my comments.

Oleksandr Dzyubak <adzyubak at gmail.com> ha escrito:

> Dear Xavier,
>
> I still cannot make the algorithm work. It does not extract the centerline.
> What am I doing wrong?
>
> To make my tests simple, I made a 3D cylinder extruded along Z axis
> (just one vessel)
> and work with that binary image (Object white, background black. Should
> it be vice versa?).

It depends on the filter that generates the DT, not on the  
representation of the object. I use for synthetic images 0 for  
background, and 1 for object. But, it doesn?t matter, the important  
step is how the computation of the DT is done, not the representation  
of the binary object.

> I have tried several DT algorithms from the ITK lib (Danielsson,
> Maurer, and "Generalized DT").
> As you advised, I made a signed distance transform on the images with
> negative sign inside.
>
> You say that DT should be "with positive sign outside the object, and
> negative sign inside."
> So it has to be "zero-crossing at the object edge" then, right?

Yes.

> Has the cylinder to be solid or just a surface before DT?
>

If it is not a solid, there is no notion of inside or outside, and  
therefore there is no sign. A binary object is a solid. The only  
exception to this is where the vessel is cut by the image border.

> Concerning the parameters sigma and threshold.
> "Usage example" suggests  sigma=1.0 and threshold=0.0.
> In the code the defaults are sigma=0.5 and threshold=0.0.
> How sensitive are they to variations?

This sigma is used for smoothing a bit the DT before compute the  
gradient. I usually use the x axis spacing (if the y axis spacing is  
the same). Otherwise, you can modify the executable and use a  
different sigma for each direction., if you want.

Leave the threshold at 0.0.

>
> Thanks,
>
> Alex
>

The filter was thought for being used on Geodesic Active Contours  
outputs (or similar with signed DTs).

Options:
1) Try to generate a synthetic solid (binary image) and then segment  
it with the Geodesic Active Contours, or any other segmentation filter  
with a DT as output (use ITKSnap for "rapid segmenting").
2) Generate your object with Paraview and convert it to a DT. Or use  
Paraview to convert pre-existing objects to DTs. The synthetic objects  
for the figures in the paper where created using this option.


                       I hope this helps. Regards:
                                                     Xavi

PD: If it doesn?t work, you may send me your synthetics objects and  
DTs to take a look at them.


> Xavier Mellado Esteban wrote:
>>
>>    Dear Alex,
>>
>>    I fixed the problem. I did some changes in file
>> "itkAverageOutwardFluxImageFilter.h" in order to compile it with gcc
>> 4.x.
>>
>>    I test it on a 32 bits machine, with OpenSuse 10.3, gcc 4.2.1, and
>> ITK 3.4. It works now and it was repacked and uploaded as   
>> "MedialCurve-IJCv21.zip".
>> Try it, please. Let me know if you still have problems.
>>
>>    Please, read carefully the paper, and look at the testing data, to
>> know if your input images are suitable for this filter. They must be
>> signed distance transform images, with positive sign outside the
>> object, and negative sign inside.
>>
>>    I hope this filter helps you. Feel free to contact me with any doubt.
>>
>>                 Best regards,
>>                                 Xavi
>>
>>
>>
>>
>>
>>
>>
>> Oleksandr Dzyubak <adzyubak at gmail.com> ha escrito:
>>
>>>
>>> Hello,
>>>
>>> I just tried to test "Flux drive medial curve extraction" algorithm
>>> published by IJ.
>>>
>>> http://insight-journal.org/midas/handle.php?handle=1926/560
>>>
>>> I have a Linux box with gcc  version 4.1.2.
>>> When compiling, I am getting error messages below.
>>>
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:84: error: 'InputImageDimension' was not declared in this   
>>> scope
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:84: error: 'OutputImageDimension' was not declared in this   
>>> scope
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:84: error: template argument 1 is   
>>> invalid
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:84: error: template argument 2 is   
>>> invalid
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:88: error: to refer to a type member of a template parameter, use   
>>> 'typename
>>> TInputVectorPixelType::ValueType'
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:90: error: 'InputImageDimension' was not declared in this   
>>> scope
>>> /home/dzyubak/Test/MedialCurve_IJCv20/itkAverageOutwardFluxImageFilter.h:90: error: template argument 2 is   
>>> invalid
>>> make[2]: *** [CMakeFiles/itkMedialCurveTest.dir/itkMedialCurveTest.o]
>>> Error 1
>>> make[1]: *** [CMakeFiles/itkMedialCurveTest.dir/all] Error 2
>>> make: *** [all] Error 2
>>>
>>> How can I fix that?
>>>
>>> Thanks,
>>> Alex
>>>
>>> _______________________________________________
>>> Insight-users mailing list
>>> Insight-users at itk.org
>>> http://www.itk.org/mailman/listinfo/insight-users
>>
>>
>>
>>
>> _______________________________________________
>> 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