[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