[Insight-users] Create my own filter : Concept Checking

Luis Ibanez luis.ibanez at kitware.com
Thu Sep 20 21:15:42 EDT 2007


Hi Rashedk


To put it short:

  *Concept Checking* is a technique used in Generic Programming
  that allows to purposely generate human-readable compilation
  errors when certain classes are instantiated over types that
  violate some requirements. E.g. if a class only makes sense
  when instantiated over an integer type, this can be enforced
  at compilation time.



You will find documentation on ConceptChecking in the
following Wiki page:

     http://www.itk.org/Wiki/Proposals:Concept_Checking

The list of ITK filters that enforce concept checking is
available at:

     http://www.itk.org/Wiki/ConceptChecking:List_of_Filters

The battery of available concepts to check for can be found
at

        Insight/Code/Common/itkConceptChecking.h



Regards,


    Luis



--------

(**) Note that how "uman-readable" the compilation error
      are depends the C++ background of the specific human
      who is reading the code   :-)

----------------------------------------------------------
rashedk wrote:
> Hi Dan, 
> 
> Thanks a lot!! 
> 
> Your suggestion helped me great deal and I was able to use
> itkAndImageFilter's template to implement my own filter. 
> 
> I havent changed the concept checking though, as I have no idea what this
> thing actually means. Where can I find more documentation on itk's
> NumericTraits? You used NumericTraits< TInput1 >::Zero, what if i needed
> some number other than zero, what would I use instead? 
> 
> Thanks again guys .. 
> 
> Rashed
> 
> 
> Dan Mueller-2 wrote:
> 
>>Hi Rashedk,
>>
>>Thanks for describing the filter you are trying to create.
>>
>>Seeing it is a pixel-wise filter, it's probably best to use the
>>itkAndImageFilter as a template (this filter is a specialization of
>>itkBinaryFunctorImageFilter). You will need to rename the functor
>>(something like "SelectFirstInputIfNotZero") and change the operator()
>>method to implement your selection:
>>
>>inline TOutput operator()( const TInput1 & A, const TInput2 & B)
>>  {
>>    if ( A > NumericTraits< TInput1 >::Zero )
>>      {
>>      return static_cast<TOutput>( A );
>>      }
>>   else
>>      {
>>      return static_cast<TOutput>( B );
>>      }
>>  }
>>
>>You will then need to rename the filter (including
>>constructor/destructor), change the functor in the inheritance
>>statement, and maybe think about the concept checking.
>>
>>I have had need for such a filter but been too lazy to create it
>>myself -- perhaps you could submit a short Insight Journal article
>>(http://www.insight-journal.org) describing the filter?
>>
>>HTH
>>
>>Cheers, Dan
>>
>>On 18/09/2007, rashedk <rashed.vtk at googlemail.com> wrote:
>>
>>>Hi Luis,
>>>
>>>Thanks for your quick reply. I was looking at
>>>itkBinaryFunctionImageFilter
>>>since this closely resembles what my filter is aiming to accomplish. I
>>>have
>>>two inputs Image1 and Image2. The output of the filter is a pixel-wise
>>>selection of the intensity from either Image1 or Image2. At a pixel
>>>(x,y,z)
>>>if Image1(x,y,z) > 0 then output(x,y,z) = image1(x,y,z) ELSE if
>>>Image1(x,y,z) == 0 then output(x,y,z) = Image2(x,y,z).
>>>
>>>I am trying to modify the itkBinaryFunctionImageFilter, but dont
>>>understand
>>>what m_Functor ( ) function in the ThreadedGenerateData( ) function does.
>>>I
>>>can see that it implements the pixel-wise addition, but where is this
>>>function defined?
>>>
>>>Thanks in advance,
>>>
>>>Rashed karim
>>>
>>>
>>>Luis Ibanez wrote:
>>>
>>>>
>>>>Hi Rashedk,
>>>>
>>>>It is very easy to create ITK filters that take two images.
>>>>
>>>>You may want to look first at the "itkBinaryFunctorImageFilter"
>>>>
>>>>This is the base class of all the filters that take two images
>>>>as input and compute a pixel-wise output.
>>>>
>>>>You can ignore the "Functor" aspects of it, and focus on the
>>>>SetInput1(), SetInput2() methods, the SetNumberOfRequiredInputs()
>>>>call in the constructor.
>>>>
>>>>There are many other filters in ITK that take two images as input.
>>>>
>>>>For example:
>>>>
>>>>$ grep -l "RequiredInputs( 2 )" *.txx
>>>>itkBinaryFunctorImageFilter.txx
>>>>itkContourDirectedMeanDistanceImageFilter.txx
>>>>itkContourMeanDistanceImageFilter.txx
>>>>itkDirectedHausdorffDistanceImageFilter.txx
>>>>itkHausdorffDistanceImageFilter.txx
>>>>itkInterpolateImageFilter.txx
>>>>itkNaryFunctorImageFilter.txx
>>>>itkPolylineMask2DImageFilter.txx
>>>>itkPolylineMaskImageFilter.txx
>>>>itkSimilarityIndexImageFilter.txx
>>>>itkWarpImageFilter.txx
>>>>itkWarpVectorImageFilter.txx
>>>>
>>>>
>>>>Please let us know if you encounter any problems,
>>>>
>>>>
>>>>    Thanks
>>>>
>>>>
>>>>        Luis
>>>>
>>>>
>>>>----------------
>>>>rashedk wrote:
>>>>
>>>>>Hi everyone,
>>>>>
>>>>>I am trying to write my own filter. The filter will take in two images
>>>>>(of
>>>>>the same type) as input and output a single image. All the images are
>>>
>>>of
>>>
>>>>>the
>>>>>same dimensions. I was looking at Chapter 13 of the ITK software
>>>
>>>guide,
>>>
>>>>>especially 13.6. I don't know how to go about extending this since I
>>>
>>>have
>>>
>>>>>two images as input. I am also not sure If it would be appropriate to
>>>>>derive
>>>>>from ImageToImageFilter.
>>>>>
>>>>>Any ideas how I should go about doing this?
>>>>>
>>>>>Thanks in advance,
>>>>>Rashed karim.
>>>>>
>>>>>
>>>>
>>>>_______________________________________________
>>>>Insight-users mailing list
>>>>Insight-users at itk.org
>>>>http://www.itk.org/mailman/listinfo/insight-users
>>>>
>>>>
>>>
>>>--
>>>View this message in context:
>>>http://www.nabble.com/Create-my-own-filter-tf4449323.html#a12746845
>>>Sent from the ITK - Users mailing list archive at Nabble.com.
>>>
>>>_______________________________________________
>>>Insight-users mailing list
>>>Insight-users at itk.org
>>>http://www.itk.org/mailman/listinfo/insight-users
>>>
>>
>>_______________________________________________
>>Insight-users mailing list
>>Insight-users at itk.org
>>http://www.itk.org/mailman/listinfo/insight-users
>>
>>
> 
> 


More information about the Insight-users mailing list