[Insight-users] Absolute Value Image
Glen Lehmann
glehmann at imaging . robarts . ca
Tue, 04 Nov 2003 11:42:18 -0500
Great! Thanks, Luis.
I figured I'd end up doing this but I just wanted to be certain I wasn't
overlooking anything.
Thanks again for putting one together for me.
Glen
Luis Ibanez wrote:
> Hi Glen,
>
> Bad news: There is not an absolute value filter in ITK
>
> Good news: You can write one in ten minutes.
> (7 minutes if you have good coffee at hand)
>
> Even better news: One is attached.
>
>
> --------------------------------------------------------
>
> Simply take any of the filters deriving from the UnaryFunctorFilter
> and replace the Functor with the "Abs()" function.
> Take for example the "Sin" image filter
>
> Insight/Code/BasicFilters/itkSinImageFilter.h
>
>
> This will look like:
>
>
> namespace Function {
>
> template< class TInput, class TOutput>
> class Abs
> {
> public:
> Abs() {}
> ~Abs() {}
> inline TOutput operator()( const TInput & A )
> { return (TOutput)( ( A > 0 ) ? A : -A ); }
> };
> }
>
> Then use this functor for instantiating the filter.
> This is shown in the attached file. Note that there
> is only a header file, and that's all what is needed.
> Here is where Generic Programming pays off. :-)
>
>
> ---------------------------------------------------------------------
>
>
> Given that Abs is such a simple operation you may want
> to use ImageAdaptors instead of ImageFilters.
>
> You will find details on who to write functional
> ImageAdaptors in the SoftwareGuide
>
> http://www . itk . org/ItkSoftwareGuide . pdf
>
> Please look at the ImageAdaptors chapter,
> Chapter 12, pdf-page 522, paper-page 548.
>
> Functional adaptors are described in section 12.4
> The example of this section is available in
>
> Insight/Examples/DataRepresentation/Image/ImageAdaptor4.cxx
>
>
> Please let us know if you run into any problem.
>
>
>
> Thanks
>
>
>
> Luis
>
>
>
>
> ----------------------
> Glen Lehmann wrote:
>
>> Hello,
>>
>> Here's an easy one; Is there an ITK class to find that absolute
>> value of an image?
>>
>> i.e. in vtk I'd use vtkImageMathematics->SetOperationToAbsoluteValue.
>>
>> I didn't have any luck in the archives.
>>
>> Thanks,
>> Glen
>>
> \
>
>------------------------------------------------------------------------
>
>/*=========================================================================
>
> Program: Insight Segmentation & Registration Toolkit
> Module: $RCSfile: itkAbsImageFilter.h,v $
> Language: C++
> Date: $Date: 2003/09/10 14:28:56 $
> Version: $Revision: 1.16 $
>
> Copyright (c) Insight Software Consortium. All rights reserved.
> See ITKCopyright.txt or http://www . itk . org/HTML/Copyright . htm for details.
>
> This software is distributed WITHOUT ANY WARRANTY; without even
> the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
> PURPOSE. See the above copyright notices for more information.
>
>=========================================================================*/
>#ifndef __itkAbsImageFilter_h
>#define __itkAbsImageFilter_h
>
>#include "itkUnaryFunctorImageFilter.h"
>#include "vnl/vnl_math.h"
>
>namespace itk
>{
>
>/** \class AbsImageFilter
> * \brief Computes the ABS(x) pixel-wise
> *
> * \ingroup IntensityImageFilters Multithreaded
> */
>namespace Function {
>
>template< class TInput, class TOutput>
>class Abs
>{
>public:
> Abs() {}
> ~Abs() {}
> inline TOutput operator()( const TInput & A )
> { return (TOutput)( ( A > 0 ) ? A : -A ); }
>};
>}
>
>template <class TInputImage, class TOutputImage>
>class ITK_EXPORT AbsImageFilter :
> public
>UnaryFunctorImageFilter<TInputImage,TOutputImage,
> Function::Abs<
> typename TInputImage::PixelType,
> typename TOutputImage::PixelType> >
>{
>public:
> /** Standard class typedefs. */
> typedef AbsImageFilter Self;
> typedef UnaryFunctorImageFilter<TInputImage,TOutputImage,
> Function::Abs< typename TInputImage::PixelType,
> typename TOutputImage::PixelType> > Superclass;
> typedef SmartPointer<Self> Pointer;
> typedef SmartPointer<const Self> ConstPointer;
>
> /** Method for creation through the object factory. */
> itkNewMacro(Self);
>
>protected:
> AbsImageFilter() {}
> virtual ~AbsImageFilter() {}
>
>private:
> AbsImageFilter(const Self&); //purposely not implemented
> void operator=(const Self&); //purposely not implemented
>
>};
>
>} // end namespace itk
>
>
>#endif
>
>