[ITK] ThresholdImageFilter on VectorImage

Bradley Lowekamp blowekamp at mail.nih.gov
Mon Mar 2 10:19:50 EST 2015


Hello David,

OK, you are using an Image of CovarientVectors not a VectorImage. There are different types and beats :) Confusing, I know.


My first guess here it that there is a problem with the output type of the threshold ImageFilter:

template< typename TImage >
class ThresholdImageFilter:public InPlaceImageFilter< TImage, TImage >

What to note here it that output type is the same as the input. That is the output is also an Adaptor image.

You are not running the filter "inplace". Therefore the output is a new vector image, but there is an adaptor so only one component is being set.

What are you expecting in the output? What are you trying to do?

Thanks,
Brad





On Mar 1, 2015, at 11:11 AM, David Froger <david.froger.ml at mailoo.org> wrote:

> Hi,
> 
> Modifying the example:
>    http://www.itk.org/Wiki/ITK/Examples/ImageProcessing/NthElementImageAdaptor
> 
> like this, to apply ThresholdImageFilter instead of BinomialBlurImageFilter
> on a VectorImage:
> 
>    @@ -2,6 +2,7 @@
>     #include "itkImageRegionIterator.h"
>     #include "itkNthElementImageAdaptor.h"
>     #include "itkBinomialBlurImageFilter.h"
>    +#include <itkThresholdImageFilter.h>
> 
>     typedef itk::Image<itk::CovariantVector< float, 3>, 2> VectorImageType;
> 
>    @@ -19,11 +20,13 @@
> 
>       adaptor->SelectNthElement(0);
>       adaptor->SetImage(image);
>    - 
>    -  typedef itk::BinomialBlurImageFilter<ImageAdaptorType, itk::Image<float,2> >  BlurFilterType;
>    -  BlurFilterType::Pointer blurFilter = BlurFilterType::New();
>    -  blurFilter->SetInput(adaptor);
>    -  blurFilter->Update();
>    +
>    +  typedef itk::ThresholdImageFilter<ImageAdaptorType> ThresholderType;
>    +  typename ThresholderType::Pointer thresholder = ThresholderType::New();
>    +  thresholder->SetInput(adaptor);
>    +  thresholder->ThresholdAbove(255);
>    +  thresholder->SetOutsideValue(255);
>    +  thresholder->Update();
> 
> yield to the segmentation fault:
> 
>    (gdb) run
>    Starting program: (...)/ProcessingNthImageElement 
>    [Thread debugging using libthread_db enabled]
>    Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
>    [New Thread 0x7ffff67a8700 (LWP 7751)]
> 
>    Program received signal SIGSEGV, Segmentation fault.
>    [Switching to Thread 0x7ffff67a8700 (LWP 7751)]
>    0x00000000004299f0 in itk::NthElementPixelAccessor<float, itk::CovariantVector<float, 3u> >::Get (this=0x7ffff67a7d1c, input=...)
>        at (...)/include/ITK-4.8/itkNthElementPixelAccessor.h:71
>    71        { return static_cast<ExternalType>( DefaultConvertPixelTraits<InternalType>::GetNthComponent( m_ElementNumber, input ) ); }
> 
>    (gdb) bt
>    #0  0x00000000004299f0 in itk::NthElementPixelAccessor<float, itk::CovariantVector<float, 3u> >::Get (this=0x7ffff67a7d1c, input=...) at (...)/include/ITK-4.8/itkNthElementPixelAccessor.h:71
>    #1  0x0000000000428b37 in itk::DefaultPixelAccessorFunctor<itk::ImageAdaptor<itk::Image<itk::CovariantVector<float, 3u>, 2u>, itk::NthElementPixelAccessor<float, itk::CovariantVector<float, 3u> > > >::Get (this=0x7ffff67a7d1c, input=...) at (...)/include/ITK-4.8/itkDefaultPixelAccessorFunctor.h:105
>    #2  0x0000000000427223 in itk::ImageConstIterator<itk::NthElementImageAdaptor<itk::Image<itk::CovariantVector<float, 3u>, 2u>, float> >::Get (this=0x7ffff67a7cc0) at (...)/include/ITK-4.8/itkImageConstIterator.h:325
>    #3  0x000000000042224e in itk::ThresholdImageFilter<itk::NthElementImageAdaptor<itk::Image<itk::CovariantVector<float, 3u>, 2u>, float> >::ThreadedGenerateData (this=0x63a6b0, outputRegionForThread=..., threadId=1) at (...)/include/ITK-4.8/itkThresholdImageFilter.hxx:165
>    #4  0x0000000000426d87 in itk::ImageSource<itk::NthElementImageAdaptor<itk::Image<itk::CovariantVector<float, 3u>, 2u>, float> >::ThreaderCallback (arg=0x63a900) at (...)/include/ITK-4.8/itkImageSource.hxx:307
>    #5  0x00007ffff7454017 in ?? () from (...)/lib/libITKCommon-4.8.so.1
>    #6  0x0000003393607e9a in start_thread (arg=0x7ffff67a8700) at pthread_create.c:308
>    #7  0x0000003392ef43fd in clone () at ../sysdeps/unix/sysv/linux/x86_64/clone.S:112
>    #8  0x0000000000000000 in ?? ()
> 
> 
> Is there any way to apply ThresholdImageFilter on a VectorImage?
> 
> Thanks,
> David
> _______________________________________________
> Community mailing list
> Community at itk.org
> http://public.kitware.com/mailman/listinfo/community



More information about the Community mailing list