this->m_DblArgs[ "mori_upper" ] = TDblArg( 0, "l", false );
this->m_DblArgs[ "mori_delta" ] = TDblArg( 1, "m", false );
this->m_DblArgs[ "slicerw_thr" ] = TDblArg( 5, "n", false );
- this->m_DblArgs[ "fastrw_thr" ] = TDblArg( 65, "o", false );
+ this->m_DblArgs[ "fastrw_thr" ] = TDblArg( 5, "o", false );
this->m_DblArgs[ "labels_upper_thr" ] = TDblArg( -400, "p", false );
}
this->_AndImages( this->m_FastRW, this->m_SliceRW, this->m_AndRW );
this->_Skeleton(
this->m_SliceRW, this->m_SliceRWSkeleton,
- std::get< 0 >( this->m_StrArgs[ "slicerw_skeleton" ] )
+ std::get< 0 >( this->m_StrArgs[ "slicerw_skeleton" ] ),
+ std::get< 0 >( this->m_StrArgs[ "slicerw_points" ] )
);
this->_Skeleton(
this->m_AndRW, this->m_AndRWSkeleton,
- std::get< 0 >( this->m_StrArgs[ "andrw_skeleton" ] )
+ std::get< 0 >( this->m_StrArgs[ "andrw_skeleton" ] ),
+ std::get< 0 >( this->m_StrArgs[ "andrw_points" ] )
);
this->_Skeleton(
this->m_FastRW, this->m_FastRWSkeleton,
- std::get< 0 >( this->m_StrArgs[ "fastrw_skeleton" ] )
+ std::get< 0 >( this->m_StrArgs[ "fastrw_skeleton" ] ),
+ std::get< 0 >( this->m_StrArgs[ "fastrw_points" ] )
);
}
std::cout << "Hessian executed in " << t1 << " s" << std::endl;
// Vesselness
- typedef CTBronchi::Filter< itk::Hessian3DToVesselnessMeasureImageFilter< typename _TVesselness::TImage::PixelType > > _TVesselnessFilter;
+ typedef CTBronchi::Filter< itk::Hessian3DToVesselnessMeasureImageFilter< typename _TVesselness::TPixel > > _TVesselnessFilter;
_TVesselnessFilter vFilter;
vFilter.Get( )->SetInput( hessian.Get( )->GetOutput( ) );
vFilter.Get( )->SetAlpha1(
t = 0;
// Prepare weight functor
- typedef fpa::Functors::Dijkstra::Image::Gaussian< typename _TInput::TImage, typename _TFastRW::TImage::PixelType > TWeight;
+ typedef fpa::Functors::Dijkstra::Image::Gaussian< typename _TInput::TImage, typename _TFastRW::TPixel > TWeight;
typename TWeight::Pointer weight = TWeight::New( );
weight->SetBeta( std::get< 0 >( this->m_DblArgs[ "beta" ] ) );
weight->SetEpsilon( std::get< 0 >( this->m_DblArgs[ "epsilon" ] ) );
// Random walk
- typedef CTBronchi::Filter< fpa::Filters::Image::RandomWalker< typename _TInput::TImage, typename _TLabels::TImage, typename _TFastRW::TImage::PixelType > > TFilter;
+ typedef CTBronchi::Filter< fpa::Filters::Image::RandomWalker< typename _TInput::TImage, typename _TLabels::TImage, typename _TFastRW::TPixel > > TFilter;
TFilter filter;
filter.Get( )->SetInputImage( input.Get( ) );
filter.Get( )->SetInputLabels( labels.Get( ) );
// -------------------------------------------------------------------------
template< class _TInput, class _TSkeleton >
void CTBronchi::Process::
-_Skeleton( _TInput& a, _TSkeleton& s, const TString& fname )
+_Skeleton(
+ _TInput& a, _TSkeleton& s,
+ const TString& fname,
+ const TString& pname
+ )
{
double t = s.Load( fname );
if( t < 0 )
t += t1;
std::cout << "\"" << fname << "\" saved in " << t1 << " s." << std::endl;
+ // End points
+ std::stringstream ePointsStr;
+ std::vector< typename _TInput::TImage::IndexType > ePoints =
+ filter.Get( )->GetEndPoints( );
+ for( typename _TInput::TImage::IndexType i: ePoints )
+ {
+ for( unsigned int d = 0; d < _TInput::VDim; ++d )
+ ePointsStr << i[ d ] << " ";
+ ePointsStr << std::endl;
+
+ } // rof
+
+ std::ofstream ePointsF( pname.c_str( ), std::ofstream::binary );
+ if( !ePointsF )
+ throw std::runtime_error(
+ TString( "Unable to write skeleton to \"" ) + pname + "\""
+ );
+ ePointsF.write( ePointsStr.str( ).c_str( ), ePointsStr.str( ).size( ) );
+
} // fi
std::cout << "Skeleton computed in " << t << " s." << std::endl;
}