// ========================================================================= // @author Leonardo Florez Valencia // @email florez-l@javeriana.edu.co // ========================================================================= #ifndef __fpa__tests__image__BaseFunctions__h__ #define __fpa__tests__image__BaseFunctions__h__ #include #include #include #include #include /* TODO #ifdef USE_ivq # include # include # include # include # include # include # include # include #endif // USE_ivq */ namespace fpa { namespace tests { namespace image { // ------------------------------------------------------------------- template< class _TPointer > void CreateImage( _TPointer& img, const typename _TPointer::ObjectType::PixelType& zero, ... ) { typedef typename _TPointer::ObjectType _TImage; va_list vl; va_start( vl, zero ); typename _TImage::SizeType size; for( unsigned int d = 0; d < _TImage::ImageDimension; ++d ) size[ d ] = va_arg( vl, int ); typename _TImage::SpacingType spac; for( unsigned int d = 0; d < _TImage::ImageDimension; ++d ) spac[ d ] = va_arg( vl, double ); img = _TImage::New( ); img->SetRegions( size ); img->SetSpacing( spac ); img->Allocate( ); img->FillBuffer( zero ); va_end( vl ); } // ------------------------------------------------------------------- template< class _TPointer > std::string Read( _TPointer& img, const std::string& fname ) { typedef typename _TPointer::ObjectType _TImage; typedef itk::ImageFileReader< _TImage > _TReader; typename _TReader::Pointer reader = _TReader::New( ); reader->SetFileName( fname ); try { reader->Update( ); } catch( std::exception& err ) { return( err.what( ) ); } // ytr img = reader->GetOutput( ); img->DisconnectPipeline( ); return( "" ); } // ------------------------------------------------------------------- template< class _TImage > std::string Write( const _TImage* img, const std::string& fname ) { typedef itk::ImageFileWriter< _TImage > _TWriter; typename _TWriter::Pointer writer = _TWriter::New( ); writer->SetInput( img ); writer->SetFileName( fname ); try { writer->Update( ); } catch( std::exception& err ) { return( err.what( ) ); } // ytr return( "" ); } // ------------------------------------------------------------------- /* TODO #ifdef USE_ivq template< class _TFilter > class Viewer { public: typedef _TFilter TFilter; typedef typename _TFilter::TInputImage TInputImage; public: Viewer( const TInputImage* image ) { this->m_VTKInputImage = TVTKInputImage::New( ); this->m_VTKInputImage->SetInput( image ); this->m_VTKInputImage->Update( ); this->m_Viewer = vtkSmartPointer< ivq::VTK::ImageViewer >::New( ); this->m_Viewer->SetInputData( this->m_VTKInputImage->GetOutput( ) ); } virtual ~Viewer( ) { } void ActivateSeedWidget( ) { this->m_SeedWidget = vtkSmartPointer< ivq::VTK::SeedWidgetOverImageActor >::New( ); this->m_SeedWidget->SetActor( this->m_Viewer->GetImageActor( ) ); this->m_SeedWidget->SetInteractor( this->m_Viewer->GetRenderWindow( )->GetInteractor( ) ); } void ActivateBrushWidget( ) { this->m_BrushWidget = vtkSmartPointer< ivq::VTK::BrushWidget >::New( ); this->m_BrushWidget->SetImageActor( this->m_Viewer->GetImageActor( ) ); this->m_BrushWidget->SetInteractor( this->m_Viewer->GetRenderWindow( )->GetInteractor( ) ); } void Show( ) { this->m_Viewer->Render( ); this->m_Viewer->ResetCamera( ); this->m_Viewer->Initialize( ); this->m_Viewer->Render( ); if( this->m_SeedWidget.GetPointer( ) != NULL ) this->m_SeedWidget->EnabledOn( ); if( this->m_BrushWidget.GetPointer( ) != NULL ) this->m_BrushWidget->EnabledOn( ); this->m_Viewer->Start( ); if( this->m_SeedWidget.GetPointer( ) != NULL ) this->m_SeedWidget->EnabledOff( ); if( this->m_BrushWidget.GetPointer( ) != NULL ) this->m_BrushWidget->EnabledOff( ); } void AssociateSeedsTo( TFilter* filter ) { if( this->m_SeedWidget.GetPointer( ) != NULL ) { const ivq::VTK::SeedWidgetOverImageActor::TSeeds& wdg_seeds = this->m_SeedWidget->GetSeeds( ); ivq::VTK::SeedWidgetOverImageActor::TSeeds::const_iterator wsIt; for( wsIt = wdg_seeds.begin( ); wsIt != wdg_seeds.end( ); ++wsIt ) { typename TInputImage::PointType pnt; for( unsigned int i = 0; i < wsIt->second.size( ); i += 3 ) { pnt[ 0 ] = wsIt->second[ i ]; pnt[ 1 ] = wsIt->second[ i + 1 ]; typename TInputImage::IndexType idx; filter->GetInput( )->TransformPhysicalPointToIndex( pnt, idx ); filter->AddSeed( idx ); } // rof } // rof } // fi } void AssociateLabelsTo( TFilter* filter ) { if( this->m_BrushWidget.GetPointer( ) != NULL ) { typedef typename TFilter::TLabelImage _TLabelImage; typedef itk::VTKImageToImageFilter< _TLabelImage > TITKImage; typename TITKImage::Pointer itk_image = TITKImage::New( ); itk_image->SetInput( this->m_BrushWidget->GetCanvas( ) ); itk_image->Update( ); filter->SetLabels( itk_image->GetOutput( ) ); } // fi } void ObserveFilter( TFilter* filter ) { typedef fpa::Image::VisualDebugger2D< TFilter > _TDeb; typedef typename TFilter::TEvent _TEvent; typename _TDeb::Pointer deb = _TDeb::New( ); deb->SetVisualization( this->m_Viewer->GetRenderer( ), this->m_Viewer->GetRenderWindow( )->GetInteractor( ) ); this->m_Observer1 = filter->AddObserver( itk::StartEvent( ), deb ); this->m_Observer2 = filter->AddObserver( itk::EndEvent( ), deb ); this->m_Observer3 = filter->AddObserver( _TEvent( ), deb ); filter->VisualDebugOn( ); } protected: typedef itk::ImageToVTKImageFilter< TInputImage > TVTKInputImage; typename TVTKInputImage::Pointer m_VTKInputImage; vtkSmartPointer< ivq::VTK::ImageViewer > m_Viewer; vtkSmartPointer< ivq::VTK::SeedWidgetOverImageActor > m_SeedWidget; vtkSmartPointer< ivq::VTK::BrushWidget > m_BrushWidget; unsigned long m_Observer1; unsigned long m_Observer2; unsigned long m_Observer3; }; #endif // USE_ivq */ } // ecapseman } // ecapseman } // ecapseman #endif // __fpa__tests__image__BaseFunctions__h__ // eof - $RCSfile$