[Insight-users] [ITK Community] Problem first filter write on my own

Matt McCormick matt.mccormick at kitware.com
Sat Jan 4 14:31:17 EST 2014


Hi Alessio,

If creating something that inherits from ProcessObject, which
ImageToImageFilter does indirectly, it is intended to be used in a
processing pipeline.  In this case the computation of the pixel value
would occur in the virtual GenerateData() method.  It would be
executed like this:

  filter->SetInput( image );
  filter->Update();
  std::cout << filter->GetPixelOfImage();

For lighter weight operations like that do not create an output image
and are not intended to be in a pipeline, look at some of the
"Calculator" classes.  It is executed like;

  reader->Update();
  filter->SetInput( reader->GetOutput() );
  filter->Compute(); // does not do a pipeline update, so the image
must be available
  std::cout << filter->GetPixelOfImage();

Hope this helps,
Matt

On Sat, Jan 4, 2014 at 10:40 AM, Alessio Mazzarini
<alessiomazzarini89 at gmail.com> wrote:
> Hi everyone, i'm trying to understand how to write my own filter and i
> started with a simple one.
> I would like to create a simple filter that takes as input an image and then
> shows on terminal the value of a pixel (defined in the constructor method).
> For simplicity i reused the ImageToImageFilter class (obv there will be a
> better way to do it) without set any output image. This is my code:
>
>
> ********************** takePixel.h******************************
> #ifndef __takePixel_h
> #define __takePixel_h
>
>
> #include "itkImageToImageFilter.h"
>
> namespace itk
> {
>
> template  < typename TInputImage, typename TOutputImage >
> class takePixel :
>   public ImageToImageFilter < TInputImage, TOutputImage >
> {
> public:
>   /** Standard class typedefs. */
>   typedef takePixel                        Self;
>   typedef ImageToImageFilter < TInputImage, TOutputImage > Superclass;
>   typedef SmartPointer < Self > Pointer;
>   typedef SmartPointer < const Self > ConstPointer;
>
>   /** Method for creation through the object factory. */
>   itkNewMacro(Self);
>
>
>   /** Typedef for images */
>   typedef TInputImage                            InputImageType;
>   typedef TOutputImage OutputImageType;
>   typedef typename TInputImage::IndexType       IndexType;
>   typedef typename OutputImageType::Pointer OutputImagePointer;
>   typedef typename InputImageType::Pointer InputImagePointer;
>   typedef typename InputImageType::ConstPointer InputImageConstPointer;
>   typedef typename TInputImage::PixelType    PixelType;
>
>
> protected:
>   takePixel();
>   virtual ~takePixel() {};
>   void PrintSelf(std::ostream & os, Indent indent) const;
>
>
>
>   void GetPixelOfImage();  //Method of the filter, to get PixelValue
>
> private:
>   takePixel(const Self &); //purposely not implemented
>   void operator=(const Self &);          //purposely not implemented
>   PixelType pixelA;
>   IndexType indexA;
>
> };
> } // end namespace itk
>
> #ifndef ITK_MANUAL_INSTANTIATION
> #include "takePixel.hxx"
> #endif
>
> #endif
> ***********************************************************************************
>
> ***************************************takePixel.hxx*********************************************
> #ifndef __takePixel_hxx
> #define __takePixel_hxx
>
> #include "takePixel.h"
> #include <iostream>
>
> namespace itk
> {
>     //Constructor that set the pixel index
> template  < typename TInputImage, typename TOutputImage >
> takePixel < TInputImage, TOutputImage >
> ::takePixel ()
> {
>     indexA[0]=10;
>     indexA[1]=10;
>   itkDebugMacro(<< "takePixel::takePixel() called");
>
> }
>
>
> template< typename TInputImage, typename TOutputImage >
> void
> takePixel < TInputImage, TOutputImage >
> ::GetPixelOfImage()
> {
>              InputImageConstPointer inputPtr  = this->GetInput(0);
>           pixelA = inputPtr->GetPixel(indexA);
>        this->Modified();
> std::cout<<"Pixel value: "<<pixelA<<std::endl;
> //return pixelA;
> }
>
>
> template< typename TInputImage, typename TOutputImage >
> void
> takePixel < TInputImage, TOutputImage >
> ::PrintSelf(std::ostream & os, Indent indent) const
> {
>   Superclass::PrintSelf(os, indent);
> os << indent << "Value of Pixel: " << pixelA << std::endl;
> }
> } // end namespace
>
> #endif
>
>
>
> Where am I doing wrong in writing this filter? Any help is much appreciated.
> Is there any filter that takes as input an image and doesn't return
> anyoutput image that I can use as a reference?
>
> Regards,
> Alessio
>
> _____________________________________
> 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://www.itk.org/mailman/listinfo/insight-users
> _______________________________________________
> Community mailing list
> Community at itk.org
> http://public.kitware.com/cgi-bin/mailman/listinfo/community


More information about the Insight-users mailing list