Image Registration Lecture 7: Getting Started with ITK March 15, 2005 Prof. Charlene Tsai
Image RegistrationLecture 6 2 The Insight Toolkit The Segmentation and Registration Toolkit
Image RegistrationLecture 6 3 What is ITK ? Image Processing Segmentation Registration No Graphical User Interface (GUI) No Visualization
Image RegistrationLecture 6 4 ITK Sponsors The National Science Foundation The National Institute for Dental and Craniofacial Research The National Institute of Neurological Disorders and Stroke
Image RegistrationLecture 6 5 ITK Developers
Image RegistrationLecture 6 6 ITK Developers * indicates a subcontractor.
Image RegistrationLecture 6 7 The Insight Toolkit Starting with ITK
Image RegistrationLecture 6 8 Integrating ITK in your application C++ Glue Code ITK Image Processing GUI {MFC,Qt, wxWin FLTK} Visualization {OpenGL, VTK}
Image RegistrationLecture 6 9 What do I need ? C++ Compiler gcc 2.95 – 3.3 Visual C Visual C VC Intel 5.0 IRIX CC Borland 5.0 Mac - gcc CMake
Image RegistrationLecture 6 10 Downloading ITK Live on the Edge CVS Stability Release tar files Insight.tgz CVS anonymous Or download the not-very-recent copy from the course website
Image RegistrationLecture 6 11 Configuring ITK Source Tree ITK Common Algorithms BasicFilter Numerics IO ITKb Common Algorithms BasicFilter Numerics IO Binary Tree Recommended ! Out Source Build In Source Build
Image RegistrationLecture 6 12 Configuring ITK – MS-Windows Run CMake Select the SOURCE directory Select the BINARY directory Select your Compiler
Image RegistrationLecture 6 13 Configuring ITK – MS-Windows
Image RegistrationLecture 6 14 Configuring ITK – MS-Windows Disable BUILD_EXAMPLES Disable BUILD_SHARED_LIBS Disable BUILD_TESTING Click “Configure” to configure Click “OK” to generate project files
Image RegistrationLecture 6 15 Configuring ITK – Unix Create the BINARY directory (mkdir) Change directory to the BINARY directory (cd) Set the environment variables CC and CXX setenv CC /usr/bin/gcc; setenv CXX /usr/bin/g++ OR export CC=/usr/bin/gcc; export CXX=/usr/bin/g++ Type ccmake with argument the SOURCE directory
Image RegistrationLecture 6 16 Configuring ITK – Unix
Image RegistrationLecture 6 17 Configuring ITK – Unix Disable BUILD_EXAMPLES Disable BUILD_SHARED_LIBS Disable BUILD_TESTING Type “c” to configure Type “g” to generate the Makefiles Type “make” to start building
Image RegistrationLecture 6 18 Building ITK
Image RegistrationLecture 6 19 Building ITK Open ITK.dsw in the Binary Directory Select ALL_BUILD project Build it …It will take about 15 minutes …
Image RegistrationLecture 6 20 Building ITK
Image RegistrationLecture 6 21 Building ITK Open ITK.sln in the Binary Directory Select ALL_BUILD project Build it …It will take about 15 minutes …
Image RegistrationLecture 6 22 Building ITK Most of ITK classes are C++ Templates Basic libraries are small they only contain non-templated classes Basic libraries are built in about 15 min
Image RegistrationLecture 6 23 Verifying the Built Libraries will be found in In MS-Windows ITK_BINARY / bin / { Debug, Release } In UNIX ITK_BINARY / bin /
Image RegistrationLecture 6 24 Verifying the Built ITKCommon ITKBasicFilters ITKAlgorithms ITKNumerics ITKFEM The following libraries should be there ITKIO ITKStatistics ITKMetaIO itkpng itkzlib
Image RegistrationLecture 6 25 Using ITK – Hello World (Review) Create “CMakeLists.txt” & cxx files In the source directory Run CMake Select Source Dir Select Binary Dir
Image RegistrationLecture 6 26 Using ITK – Hello World Accept the default in CMAKE_BACKBARD_COMPATIBILITY Leave empty EXECUTABLE_OUTPUT_PATH Leave empty LIBRARY_OUTPUT_PATH Set ITK_DIR to the binary directory where ITK was built
Image RegistrationLecture 6 27 Building the HelloWorld Project Open HelloWorld.dsw (or.sln) generated by CMake Select ALL_BUILD project Build it …It will take about 3 seconds … Locate the file HelloWorld.exe Run it… It should produce the message: ITK Hello World !
Image RegistrationLecture 6 28 How to Find What Your Need Follow the link Alphabetical List Follow the link Groups Post to the insight-users mailing list
Image RegistrationLecture 6 29 Doxygen Documentation
Image RegistrationLecture 6 30 Doxygen Groups
Image RegistrationLecture 6 31 Doxygen Alphabetical List
Image RegistrationLecture 6 32 ITK Architecture
Image RegistrationLecture 6 33 ITK Basics C++ Generic Programming Data Pipeline Multi-threading Streaming Exceptions Events / Observers Tcl and Python wrapping
Image RegistrationLecture 6 34 Generic Programming Example: STL Standard Template Library Abstraction of Types and Behaviors std::vector
Image RegistrationLecture 6 35 ITK Image Class itk::Image itk::Image, 2 >
Image RegistrationLecture 6 36 C++ Namespaces Avoid naming collisions itk:: itk::Statistics:: itk::fem:: itk::fem::itpack itk::bio NEVER DO: using namespace itk; using namespace std;
Image RegistrationLecture 6 37 ITK Most Common Keyword typedef typedef itk::Image ImageType typedef itk::ImageFilter FilterType otherwise... itk::ImageFilter, Image > FilterType
Image RegistrationLecture 6 38 Smart Pointers Object Smart Pointer counter=0counter=1counter=2counter=3 Self - Delete
Image RegistrationLecture 6 39 Smart Pointers typedef itk::Image ImageType typedef itk::ImageFilter FilterType FilterType::Pointer filter = FilterType::New(); ImageType::Pointer image = filter->GetOutput(); NO NEED FOR filter->Delete();
Image RegistrationLecture 6 40 Const Correctness Knowing constancy is Insight. Not knowing constancy leads to disaster. Tao Te Ching, XVI. Lao Tsu
Image RegistrationLecture 6 41 Const Smart Pointers typedef itk::Image ImageType typedef itk::ImageFilter FilterType FilterType::Pointer filter = FilterType::New(); ImageType::ConstPointer image = filter->GetOutput(); Can only invoke “const” methods image->GetSpacing (); Compiler error for “non-const” methods image->SetSpacing ( spacing );
Image RegistrationLecture 6 42 Data Pipeline Image Filter Image Filter Image Filter
Image RegistrationLecture 6 43 Image Regions LargestPossibleRegion BufferedRegion RequestedRegion
Image RegistrationLecture 6 44 Streaming Output Image Filter Processing Large Images Input Image
Image RegistrationLecture 6 45 Simple Image IO Image File ImageFileReader Image Filter Image File ImageFileWriter
Image RegistrationLecture 6 46 Simple Image IO CustomImageIO Image File ImageFileReader Image PNGImageIO VTKImageIODICOMImageIOGIPLImageIO MetaImageIOAnalyzeImageIO Loadable Factories
Image RegistrationLecture 6 47 Simple Image IO #include “itkImage.h” #include “itkImageFileReader.h” #include “itkImageFileWriter.h” typedef itk::Image ImageType; typedef itk::ImageFileReader ReaderType; typedef itk::ImageFileWriter WriterType; ReaderType::Pointer reader = ReaderType::New(); WriterType::Pointer writer = WriterType::New(); reader->SetFileName( “inputImage.dcm” ); // DICOM writer->SetFileName( “outputImage.hdr” ); // Analyze writer->SetInput( reader->GetOutput() ); writer->Update();
Image RegistrationLecture 6 48 Exceptions Error Management ITK Layer Application Layer
Image RegistrationLecture 6 49 Exceptions try { filter->Update(); } catch( itk::ExceptionObject & exp ) { std::cerr << exp << std::endl; }
Image RegistrationLecture 6 50 Events and Commands/Observers Itk::Object Itk::Command itk::Command Event
Image RegistrationLecture 6 51 Events Common Events AnyEvent() StartEvent() EndEvent() ProgressEvent() IterationEvent()
Image RegistrationLecture 6 52 Events and Commands/Observers Itk::Object Itk::ProcessObject Itk::FilterXY Itk::Command MyCommand Execute() AddObserver( ) AnyEvent MyEvent
Image RegistrationLecture 6 53 GUI Communication ITK Layer GUI Layer Widget FilterX Callback Command FilterX Widget Observer
Image RegistrationLecture 6 54 End Enjoy ITK !