X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FFilters%2FImage%2FDefaultTraits.h;fp=lib%2Ffpa%2FFilters%2FImage%2FDefaultTraits.h;h=a09570410bbfc36929b82659adea3700bcbcf5c6;hb=2047276c8f1a02432fbcc7014722d460d6c1e60f;hp=0000000000000000000000000000000000000000;hpb=3c639e5da479c7216a0a302ffa156ac6762caeed;p=FrontAlgorithms.git diff --git a/lib/fpa/Filters/Image/DefaultTraits.h b/lib/fpa/Filters/Image/DefaultTraits.h new file mode 100644 index 0000000..a095704 --- /dev/null +++ b/lib/fpa/Filters/Image/DefaultTraits.h @@ -0,0 +1,94 @@ +// ========================================================================= +// @author Leonardo Florez Valencia +// @email florez-l@javeriana.edu.co +// ========================================================================= +#ifndef __fpa__Filters__Image__DefaultTraits__h__ +#define __fpa__Filters__Image__DefaultTraits__h__ + +#include +#include +#include +#include +#include +#include + +namespace fpa +{ + namespace Filters + { + namespace Image + { + /** + */ + template< class _TInputImage, class _TOutputImage, class _TMark > + class DefaultTraits + { + public: + typedef _TInputImage TInputImage; + typedef _TOutputImage TOutputImage; + + class TInternalTraits + { + public: + typedef _TMark TMark; + typedef typename TInputImage::IndexType TVertex; + typedef typename TInputImage::PixelType TInputValue; + typedef typename TInputImage::PointType TPoint; + typedef typename TOutputImage::PixelType TOutputValue; + typedef typename TVertex::LexicographicCompare TVertexCompare; + itkStaticConstMacro( + Dimension, unsigned int, _TInputImage::ImageDimension + ); + + typedef std::vector< TVertex > TNeighborhood; + struct TSeed + { + TVertex Vertex; + TPoint Point; + bool IsPoint; + TMark FrontId; + TSeed( const TMark& fid = 0 ) + : FrontId( fid ) + { } + }; + typedef std::vector< TSeed > TSeeds; + + struct TNode + { + TVertex Vertex; + TVertex Parent; + TMark FrontId; + + // Hack to hide the fact that nodes need to be (re-)initialized + mutable TOutputValue Value; + }; + struct TNodeCompare + { + bool operator()( const TNode& a, const TNode& b ) const + { + static TVertexCompare c; + return( c( a.Vertex, b.Vertex ) ); + } + }; + typedef std::set< TNode, TNodeCompare > TNodes; + }; + + typedef itk::ImageToImageFilter< TInputImage, TOutputImage > TFilter; + typedef fpa::Filters::MarksWithCollisionsInterface< TInternalTraits > TMarksInterface; + typedef fpa::Filters::SeedsInterface< TInternalTraits > TSeedsInterface; + + protected: + itkConceptMacro( + Check_Dimensions, + ( itk::Concept::SameDimension< TInputImage::ImageDimension, TOutputImage::ImageDimension > ) + ); + }; + + } // ecapseman + + } // ecapseman + +} // ecapseman + +#endif // __fpa__Filters__Image__DefaultTraits__h__ +// eof - $RCSfile$