//connected threshold #if defined(_MSC_VER) #pragma warning ( disable : 4786 ) #endif #ifdef __BORLANDC__ #define ITK_LEAN_AND_MEAN #endif #include "itkConnectedThresholdImageFilter.h" #include "itkImage.h" #include "itkCastImageFilter.h" #include "itkCurvatureFlowImageFilter.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" int main( int argc, char *argv[]) { if( argc < 7 ) { std::cerr << "Missing Parameters " << std::endl; std::cerr << "Usage: " << argv[0]; std::cerr << " inputImage outputImage seed1X seed2Y seed3Z seed2X seed2Y seed3Z lowerThreshold upperThreshold" << std::endl; return 1; } typedef float InternalPixelType; const unsigned int Dimension = 3; typedef itk::Image< InternalPixelType, Dimension > InternalImageType; typedef short OutputPixelType; typedef itk::Image< OutputPixelType, Dimension > OutputImageType; typedef itk::CastImageFilter< InternalImageType, OutputImageType > CastingFilterType; CastingFilterType::Pointer caster = CastingFilterType::New(); typedef itk::ImageFileReader< InternalImageType > ReaderType; typedef itk::ImageFileWriter< OutputImageType > WriterType; ReaderType::Pointer reader = ReaderType::New(); WriterType::Pointer writer = WriterType::New(); reader->SetFileName( argv[1] ); writer->SetFileName( argv[2] ); typedef itk::CurvatureFlowImageFilter< InternalImageType, InternalImageType > CurvatureFlowImageFilterType; CurvatureFlowImageFilterType::Pointer smoothing = CurvatureFlowImageFilterType::New(); typedef itk::ConnectedThresholdImageFilter< InternalImageType, InternalImageType > ConnectedFilterType; ConnectedFilterType::Pointer connectedThreshold = ConnectedFilterType::New(); // if(atoi(argv[8]) > 1) //{ smoothing->SetNumberOfIterations( 2 ); smoothing->SetTimeStep(0.125 ); smoothing->SetInput( reader->GetOutput() ); connectedThreshold->SetInput( smoothing->GetOutput() ); //} else { // connectedThreshold->SetInput(reader->GetOutput() ); //} caster->SetInput( connectedThreshold->GetOutput() ); writer->SetInput( caster->GetOutput() ); const InternalPixelType lowerThreshold = atof( argv[9] ); const InternalPixelType upperThreshold = atof( argv[10] ); connectedThreshold->SetLower( lowerThreshold ); connectedThreshold->SetUpper( upperThreshold ); connectedThreshold->SetReplaceValue( 255 ); InternalImageType::IndexType index; index[0] = atoi( argv[3] ); index[1] = atoi( argv[4] ); index[2] = atoi( argv[5] ); InternalImageType::IndexType index2; index2[0] = atoi( argv[6] ); index2[1] = atoi( argv[7] ); index2[2] = atoi( argv[8] ); connectedThreshold->AddSeed( index ); connectedThreshold->AddSeed( index2 ); try { writer->Update(); } catch( itk::ExceptionObject & excep ) { std::cerr << "Exception caught !" << std::endl; std::cerr << excep << std::endl; } return 0; }