X-Git-Url: https://git.creatis.insa-lyon.fr/pubgit/?a=blobdiff_plain;f=lib%2Ffpa%2FImage%2FRandomWalker.h;h=aba7d84ba14075b94fe667ea52f89736d7ba4323;hb=6cdba92a782c9ca52b1be25868c2267b2e3966ca;hp=5438f007b992133bc021ebd451fd015568ff0d0c;hpb=a44c34f8d4118730a65ab3a7f9b6fc12614ce67a;p=FrontAlgorithms.git diff --git a/lib/fpa/Image/RandomWalker.h b/lib/fpa/Image/RandomWalker.h index 5438f00..aba7d84 100644 --- a/lib/fpa/Image/RandomWalker.h +++ b/lib/fpa/Image/RandomWalker.h @@ -7,12 +7,11 @@ #define __fpa__Image__RandomWalker__h__ #include - #include #include #include +#include #include -#include namespace fpa { @@ -21,32 +20,81 @@ namespace fpa /** */ template< class _TInputImage, class _TLabelImage, class _TScalar > - class RandomWalker - : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension >, fpa::Base::MarksInterface< typename _TInputImage::IndexType >, fpa::Image::LabelledSeedsInterface< typename _TInputImage::IndexType, typename _TInputImage::PointType, typename _TInputImage::PixelType, _TScalar, typename _TLabelImage::PixelType, typename _TInputImage::IndexType::LexicographicCompare > > > + class RandomWalkerTraits + : public fpa::Image::DefaultTraits< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension >, typename _TLabelImage::PixelType > { public: - typedef _TInputImage TInputImage; - typedef _TLabelImage TLabelImage; - typedef _TScalar TScalar; - typedef typename TInputImage::IndexType TVertex; - typedef typename TInputImage::PointType TPoint; - typedef typename TVertex::LexicographicCompare TVertexCompare; - typedef typename TInputImage::PixelType TInputValue; - typedef typename TLabelImage::PixelType TFrontId; - + typedef RandomWalkerTraits Self; + typedef _TInputImage TInputImage; + typedef _TLabelImage TLabelImage; + typedef _TScalar TScalar; + typedef typename _TLabelImage::PixelType TFrontId; typedef itk::Image< TScalar, _TInputImage::ImageDimension > TOutputImage; - typedef fpa::Base::MarksInterface< TVertex > TMarksInterface; - typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, _TScalar, TFrontId, TVertexCompare > TSeedsInterface; - typedef fpa::Image::Algorithm< _TInputImage, TOutputImage, TMarksInterface, TSeedsInterface > TAlgorithm; + typedef fpa::Image::DefaultTraits< TInputImage, TOutputImage, TFrontId > Superclass; + + typedef typename Superclass::TVertex TVertex; + typedef typename Superclass::TInputValue TInputValue; + typedef typename Superclass::TPoint TPoint; + typedef typename Superclass::TOutputValue TOutputValue; + typedef typename Superclass::TCompare TCompare; + typedef typename Superclass::TNeighborhood TNeighborhood; + typedef typename Superclass::TFilter TFilter; - typedef RandomWalker Self; - typedef fpa::Base::DijkstraBase< TAlgorithm > Superclass; - typedef itk::SmartPointer< Self > Pointer; - typedef itk::SmartPointer< const Self > ConstPointer; + typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, TOutputValue, TFrontId, TCompare > TSeedsInterface; + typedef fpa::Base::MarksInterface< TVertex > TMarksInterface; - typedef fpa::Image::Functors::Dijkstra::Function< TInputImage, TScalar > TWeightFunction; typedef typename TSeedsInterface::TNode TNode; typedef typename TSeedsInterface::TNodes TNodes; + typedef typename TSeedsInterface::TSeed TSeed; + typedef typename TSeedsInterface::TSeeds TSeeds; + + public: + itkConceptMacro( + Check_SameDimension, + ( itk::Concept::SameDimension< TInputImage::ImageDimension, TLabelImage::ImageDimension > ) + ); + + private: + // Purposely not implemented. + RandomWalkerTraits( ); + RandomWalkerTraits( const Self& other ); + virtual ~RandomWalkerTraits( ); + Self& operator=( const Self& other ); + }; + + /** + */ + template< class _TInputImage, class _TLabelImage, class _TScalar > + class RandomWalker + : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< fpa::Image::RandomWalkerTraits< _TInputImage, _TLabelImage, _TScalar > > > + /* TODO + : public fpa::Base::DijkstraBase< fpa::Image::Algorithm< _TInputImage, itk::Image< _TScalar, _TInputImage::ImageDimension >, fpa::Base::MarksInterface< typename _TInputImage::IndexType >, fpa::Image::LabelledSeedsInterface< typename _TInputImage::IndexType, typename _TInputImage::PointType, typename _TInputImage::PixelType, _TScalar, typename _TLabelImage::PixelType, typename _TInputImage::IndexType::LexicographicCompare > > > + */ + { + public: + /* TODO + typedef _TInputImage TInputImage; + typedef _TLabelImage TLabelImage; + typedef _TScalar TScalar; + typedef typename TInputImage::IndexType TVertex; + typedef typename TInputImage::PointType TPoint; + typedef typename TVertex::LexicographicCompare TVertexCompare; + typedef typename TInputImage::PixelType TInputValue; + typedef typename TLabelImage::PixelType TFrontId; + + typedef itk::Image< TScalar, _TInputImage::ImageDimension > TOutputImage; + typedef fpa::Base::MarksInterface< TVertex > TMarksInterface; + typedef fpa::Image::LabelledSeedsInterface< TVertex, TPoint, TInputValue, _TScalar, TFrontId, TVertexCompare > TSeedsInterface; + typedef fpa::Image::Algorithm< _TInputImage, TOutputImage, TMarksInterface, TSeedsInterface > TAlgorithm; + typedef RandomWalker Self; + typedef fpa::Base::DijkstraBase< TAlgorithm > Superclass; + typedef itk::SmartPointer< Self > Pointer; + typedef itk::SmartPointer< const Self > ConstPointer; + + typedef fpa::Image::Functors::Dijkstra::Function< TInputImage, TScalar > TWeightFunction; + typedef typename TSeedsInterface::TNode TNode; + typedef typename TSeedsInterface::TNodes TNodes; + */ public: itkNewMacro( Self );