#define __CTBronchi__MoriLabelling__h__
#include <itkImageToImageFilter.h>
+#include <itkHessianRecursiveGaussianImageFilter.h>
+#include <itkHessian3DToVesselnessMeasureImageFilter.h>
+
+#include <itkImageFileWriter.h>
+
namespace CTBronchi
{
MoriLabelling( );
virtual ~MoriLabelling( );
+ virtual void BeforeThreadedGenerateData( ) override
+ {
+ this->Superclass::BeforeThreadedGenerateData( );
+
+ const TInputImage* raw = this->GetInputRawImage( );
+ typename TInputImage::SpacingType spac = raw->GetSpacing( );
+ double sigma = spac[ 0 ];
+ for( unsigned int d = 1; d < TInputImage::ImageDimension; ++d )
+ sigma = ( spac[ d ] < sigma )? spac[ d ]: sigma;
+ sigma *= 1.5;
+
+ typedef itk::HessianRecursiveGaussianImageFilter< TInputImage > _THessian;
+ typename _THessian::Pointer hessian = _THessian::New( );
+ hessian->SetInput( raw );
+ hessian->SetSigma( sigma );
+
+ typedef itk::Hessian3DToVesselnessMeasureImageFilter< double > _TVesselness;
+ typename _TVesselness::Pointer vesselness = _TVesselness::New( );
+ vesselness->SetInput( hessian->GetOutput( ) );
+ vesselness->SetAlpha1( 0.5 );
+ vesselness->SetAlpha2( 2.0 );
+
+ typename itk::ImageFileWriter< typename _TVesselness::OutputImageType >::Pointer w =
+ itk::ImageFileWriter< typename _TVesselness::OutputImageType >::New( );
+ w->SetInput( vesselness->GetOutput( ) );
+ w->SetFileName( "vessel.mhd" );
+ w->Update( );
+ }
+
virtual void ThreadedGenerateData( const TRegion& region, itk::ThreadIdType threadId ) override;
private: