[ITK-users] Setting constants in ternary functor filters

jmerkow jmerkow at gmail.com
Thu Jan 15 17:09:20 EST 2015


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.


More information about the Insight-users mailing list