/* Philip Radin Open Source Practice 10/17/2007 */ #if defined(_MSC_VER) #pragma warning ( disable : 4786 ) #endif #ifdef __BORLANDC__ #define ITK_LEAN_AND_MEAN #endif #include "itkConfidenceConnectedImageFilter.h" #include "itkImage.h" #include "itkExtractImageFilter.h" #include "itkImageFileReader.h" #include "itkImageFileWriter.h" int main( int argc, char *argv[] ) { if( argc < 5 ) { std::cerr << "Missing Parameters " << std::endl; std::cerr << "Usage: " << argv[0]; std::cerr << " inputImage outputImage seedX seedY seedZ" << std::endl; return 1; } typedef unsigned short InternalPixelType; const unsigned int Dimension = 3; typedef itk::Image< InternalPixelType, Dimension > InternalImageType; typedef unsigned short OutputPixelType; typedef itk::Image< OutputPixelType, Dimension > OutputImageType; 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::ConfidenceConnectedImageFilter ConnectedFilterType; ConnectedFilterType::Pointer confidenceConnected = ConnectedFilterType::New(); confidenceConnected->SetInput( reader->GetOutput() ); writer->SetInput( confidenceConnected->GetOutput() ); confidenceConnected->SetMultiplier( 2.5 ); confidenceConnected->SetNumberOfIterations( 5 ); confidenceConnected->SetReplaceValue( 255 ); InternalImageType::IndexType index; index[0] = atoi( argv[4] ); index[1] = atoi( argv[5] ); index[2] = atoi( argv[6] ); confidenceConnected->SetSeed( index ); confidenceConnected->SetInitialNeighborhoodRadius( 2 ); try { writer->Update(); } catch( itk::ExceptionObject & excep ) { std::cerr << "Exception caught !" << std::endl; std::cerr << excep << std::endl; } // Extract a Z slice and save it as PNG. typedef unsigned short Input2DPixelType; typedef unsigned char Output2DPixelType; typedef itk::Image< Input2DPixelType, 3 > Input2DImageType; typedef itk::Image< Output2DPixelType, 2 > Output2DImageType; typedef itk::ImageFileWriter< Output2DImageType > Writer2DType; Writer2DType::Pointer writer2D = Writer2DType::New(); typedef itk::ExtractImageFilter< Input2DImageType, Output2DImageType > Filter2DType; Filter2DType::Pointer filter2D = Filter2DType::New(); confidenceConnected->Update(); Input2DImageType::RegionType inputRegion = confidenceConnected->GetOutput()->GetLargestPossibleRegion(); Input2DImageType::SizeType size = inputRegion.GetSize(); size[2] = 0; Input2DImageType::IndexType start = inputRegion.GetIndex(); const unsigned int sliceNumber = atoi( argv[6] ); start[0] = 0; start[1] = 0; start[2] = sliceNumber; Input2DImageType::RegionType desiredRegion; desiredRegion.SetSize( size ); desiredRegion.SetIndex( start ); filter2D->SetInput( confidenceConnected->GetOutput()); filter2D->SetExtractionRegion( desiredRegion ); writer2D->SetInput( filter2D->GetOutput() ); writer2D->SetFileName( argv[3] ); try { writer2D->Update(); } catch( itk::ExceptionObject & err ) { std::cerr << "ExceptionObject caught !" << std::endl; std::cerr << err << std::endl; return EXIT_FAILURE; } return 0; }