// @author Leonardo Florez Valencia
// @email florez-l@javeriana.edu.co
// =========================================================================
-#ifndef __fpa__Common__OriginalRandomWalker__hxx__
-#define __fpa__Common__OriginalRandomWalker__hxx__
+#ifndef __fpa__Common__RandomWalker__hxx__
+#define __fpa__Common__RandomWalker__hxx__
#include <itkImageRegionConstIteratorWithIndex.h>
#include <itkImageRegionIteratorWithIndex.h>
-#include <Eigen/Sparse>
-
-// -------------------------------------------------------------------------
-/* TODO
- template< class _TImage, class _TLabels, class _TScalar >
- void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
- AddSeed( const TIndex& seed, const TLabel& label )
- {
- this->m_Seeds.push_back( seed );
- this->m_Labels.push_back( label );
- this->Modified( );
- }
-*/
+#ifdef USE_Eigen3
+# include <Eigen/Sparse>
+#endif // USE_Eigen3
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
-OriginalRandomWalker( )
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
+RandomWalker( )
: Superclass( )
{
fpaFilterInputConfigureMacro( InputLabels, TLabels );
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
-~OriginalRandomWalker( )
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
+~RandomWalker( )
{
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
GenerateData( )
{
+#ifdef USE_Eigen3
// Useful typedefs
typedef Eigen::Triplet< TScalar > _TTriplet;
typedef std::vector< _TTriplet > _TTriplets;
// Fill outputs
itkDebugMacro( << "Filling output..." );
this->_Output( x, St, invLabels );
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
-_TScalar fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+_TScalar fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_L( const TIndex& i, const TIndex& j )
{
+#ifdef USE_Eigen3
if( i == j )
{
TRegion r = this->GetInput( )->GetRequestedRegion( );
}
else
return( -( this->m_EdgeFunction->Evaluate( i, j ) ) );
+#else // USE_Eigen3
+ return( _TScalar( 0 ) );
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_Boundary( _TTriplets& B, std::map< TLabel, unsigned long >& labels )
{
+#ifdef USE_Eigen3
B.clear( );
// Set up the multithreaded processing
// Execute threader
threads->SingleMethodExecute( );
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
ITK_THREAD_RETURN_TYPE
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_BoundaryCbk( void* arg )
{
+#ifdef USE_Eigen3
_TBoundaryThreadStruct* thrStr;
itk::ThreadIdType total, thrId, thrCount;
itk::MultiThreader::ThreadInfoStruct* thrInfo =
reinterpret_cast< _TTriplets* >( thrStr->Triplets ),
thrStr->Labels
);
+#endif // USE_Eigen3
return( ITK_THREAD_RETURN_VALUE );
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_ThreadedBoundary(
const TRegion& region, const itk::ThreadIdType& id,
_TTriplets* B,
std::map< TLabel, unsigned long >* labels
)
{
+#ifdef USE_Eigen3
typedef itk::ImageRegionConstIteratorWithIndex< TLabels > _TIt;
typedef typename std::map< TLabel, unsigned long >::value_type _TMapValue;
typedef typename std::map< unsigned long, TLabel >::value_type _TInvValue;
} // fi
} // rof
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_Laplacian( _TTriplets& A, _TTriplets& R, const _TTriplets& B )
{
+#ifdef USE_Eigen3
A.clear( );
R.clear( );
// Execute threader
threads->SingleMethodExecute( );
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
ITK_THREAD_RETURN_TYPE
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_LaplacianCbk( void* arg )
{
+#ifdef USE_Eigen3
_TLaplacianThreadStruct* thrStr;
itk::ThreadIdType total, thrId, thrCount;
itk::MultiThreader::ThreadInfoStruct* thrInfo =
reinterpret_cast< _TTriplets* >( thrStr->R ),
reinterpret_cast< const _TTriplets* >( thrStr->B )
);
+#endif // USE_Eigen3
return( ITK_THREAD_RETURN_VALUE );
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_ThreadedLaplacian(
const TRegion& region, const itk::ThreadIdType& id,
_TTriplets* A, _TTriplets* R, const _TTriplets* B
)
{
+#ifdef USE_Eigen3
typedef itk::ImageRegionConstIteratorWithIndex< TImage > _TIt;
typedef typename _TTriplets::value_type _TTriplet;
} // rof
} // rof
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TMatrix, class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_Output(
const _TMatrix& X, const _TTriplets& S, const std::vector< TLabel >& invLabels
)
{
+#ifdef USE_Eigen3
// Set up the multithreaded processing
_TOutputThreadStruct thrStr;
thrStr.Filter = this;
// Execute threader
threads->SingleMethodExecute( );
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TMatrix, class _TTriplets >
ITK_THREAD_RETURN_TYPE
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_OutputCbk( void* arg )
{
+#ifdef USE_Eigen3
_TOutputThreadStruct* thrStr;
itk::ThreadIdType total, thrId, thrCount;
itk::MultiThreader::ThreadInfoStruct* thrInfo =
reinterpret_cast< const _TTriplets* >( thrStr->S ),
thrStr->InvLabels
);
+#endif // USE_Eigen3
return( ITK_THREAD_RETURN_VALUE );
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
template< class _TMatrix, class _TTriplets >
-void fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+void fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_ThreadedOutput(
const TRegion& region, const itk::ThreadIdType& id,
const _TMatrix* X, const _TTriplets* S,
const std::vector< TLabel >* invLabels
)
{
+#ifdef USE_Eigen3
// Fill outputs
const TLabels* in_labels = this->GetInputLabels( );
TLabels* out_labels = this->GetOutput( );
} // fi
} // rof
+#endif // USE_Eigen3
}
// -------------------------------------------------------------------------
template< class _TImage, class _TLabels, class _TScalar >
unsigned long
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_1D( const TIndex& idx, const TRegion& region )
{
unsigned long i = idx[ 0 ];
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
unsigned long
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_SeedIndex( const unsigned long& i, const _TTriplets& t )
{
unsigned long s = 0;
template< class _TImage, class _TLabels, class _TScalar >
template< class _TTriplets >
unsigned long
-fpa::Common::OriginalRandomWalker< _TImage, _TLabels, _TScalar >::
+fpa::Common::RandomWalker< _TImage, _TLabels, _TScalar >::
_NearSeedIndex( const unsigned long& i, const _TTriplets& t )
{
long s = 0;
return( i - d );
}
-#endif // __fpa__Common__OriginalRandomWalker__hxx__
+#endif // __fpa__Common__RandomWalker__hxx__
+
// eof - $RCSfile$