[ITK-users] Setting constants in ternary functor filters

Matt McCormick matt.mccormick at kitware.com
Fri Jan 16 11:54:24 EST 2015


Hi Jameson,

The TernaryFunctorImageFilter was designed to work on three input
images.  For this case, it would be better to inherit from
UnaryFunctorImageFilter, then set the constants on the functor.  See,
for example, the itk::ExpNegativeImageFilter [1], which also has a
constant input.

HTH,
Matt

[1] http://www.itk.org/Doxygen/html/classitk_1_1ExpNegativeImageFilter.html

On Thu, Jan 15, 2015 at 5:09 PM, jmerkow <jmerkow at gmail.com> wrote:
> Hello,
>
> I am writing a ternary functor filter and I want to allow constants to be
> set for inputs 2 and 3 (1 and 2 in SetNthInput).
> I believe I followed the example in BinaryFunctor but when I set them I get
> NULL pointers for the inputs:
> "At least one input is missing. Input1 is 0xb212190,  Input2 is 0,  Input3
> is 0"
>
> My filter looks something like this (I trimmed it down to just the relevant
> parts):
>
> ...
> class MyTernaryFunctorImageFilter:
>                 public itk::TernaryFunctorImageFilter< TInputImage1, TInputImage2,
> TInputImage3, TOutputImage,
>                 MyTernaryFunctor<
>                 typename TInputImage1::PixelType,
>                 typename TInputImage2::PixelType,
>                 typename TInputImage3::PixelType,
>                 typename TOutputImage::PixelType >   >
> {
> ...
> //Common Typedefs are here
> ...
>
> typedef TInputImage2                           Input2ImageType;
> typedef typename Input2ImageType::ConstPointer Input2ImagePointer;
> typedef typename Input2ImageType::RegionType   Input2ImageRegionType;
> typedef typename Input2ImageType::PixelType    Input2ImagePixelType;
> typedef itk::SimpleDataObjectDecorator<Input2ImagePixelType>
> DecoratedInput2ImagePixelType;
>
> typedef TInputImage3                           Input3ImageType;
> typedef typename Input3ImageType::ConstPointer Input3ImagePointer;
> typedef typename Input3ImageType::RegionType   Input3ImageRegionType;
> typedef typename Input3ImageType::PixelType    Input3ImagePixelType;
> typedef itk::SimpleDataObjectDecorator<Input3ImagePixelType>
> DecoratedInput3ImagePixelType;
>
> virtual void SetConstant2(const Input2ImagePixelType &input);
> virtual void SetConstant2(const DecoratedInput2ImagePixelType *input);
> /** Set the Third operand as a constant */
> virtual void SetConstant3(const Input3ImagePixelType &input);
> virtual void SetConstant3(const DecoratedInput3ImagePixelType *input);
> };
>
> template<...>
> void
> MyTernaryFunctorImageFilter< TInputImage1, TInputImage2, TInputImage3,
> TOutputImage>
> ::SetConstant2(const Input2ImagePixelType &input)
> {
>          itkDebugMacro("setting SetConstant2 to " << input);
>          typename DecoratedInput2ImagePixelType::Pointer newInput =
> DecoratedInput2ImagePixelType::New();
>          newInput->Set(input);
>          this->SetConstant2(newInput);
> }
>
> template<...>
> void
> MyTernaryFunctorImageFilter< TInputImage1, TInputImage2, TInputImage3,
> TOutputImage>
> ::SetConstant2(const DecoratedInput2ImagePixelType *input)
> {
>         this->SetNthInput( 1,const_cast<DecoratedInput2ImagePixelType*>(input));
> }
> template<...>
> void
> MyTernaryFunctorImageFilter< TInputImage1, TInputImage2, TInputImage3,
> TOutputImage>
> ::SetConstant3(const Input3ImagePixelType &input)
> {
>          itkDebugMacro("setting SetConstant3 to " << input);
>          typename DecoratedInput3ImagePixelType::Pointer newInput =
> DecoratedInput3ImagePixelType::New();
>          newInput->Set(input);
>          this->SetConstant3(newInput);
> }
>
> template<...>
> void
> MyTernaryFunctorImageFilter< TInputImage1, TInputImage2, TInputImage3,
> TOutputImage>
> ::SetConstant3(const DecoratedInput3ImagePixelType *input)
> {
>         this->SetNthInput( 2,const_cast<DecoratedInput3ImagePixelType*>(input));
> }
>
> I pass this function an image for input1, then floats for other two inputs.
>
> Am I missing an ingredient here?
>
> -Jameson
>
>
>
> --
> View this message in context: http://itk-users.7.n7.nabble.com/Setting-constants-in-ternary-functor-filters-tp35125.html
> Sent from the ITK - Users mailing list archive at Nabble.com.
> _____________________________________
> Powered by www.kitware.com
>
> Visit other Kitware open-source projects at
> http://www.kitware.com/opensource/opensource.html
>
> Kitware offers ITK Training Courses, for more information visit:
> http://www.kitware.com/products/protraining.php
>
> Please keep messages on-topic and check the ITK FAQ at:
> http://www.itk.org/Wiki/ITK_FAQ
>
> Follow this link to subscribe/unsubscribe:
> http://public.kitware.com/mailman/listinfo/insight-users


More information about the Insight-users mailing list