From KitwarePublic
PipeLine
DO
- Do call Update() before using the pipeline output
- Do call UpdateLargestPossibleRegion() when reusing a reader.
When reusing a reader you must call:
reader->UpdateLargestPossibleRegion()
instead of the usual:
reader->Update()
Otherwise the extent of the previous image is kept, and in some cases lead to Exceptions
being thrown if the second image is smaller than the first one.
Filter-Specific
itkConnectedComponentsImageFilter
DO NOT
- Do not assume InputImage->SetRequestedRegion(smallregion) will make the filter faster! The filter will run on the entire InputImage regardless.
DO
- To make it run on a smaller block:
- get a new itkRegionOfInterestImageFilter, say ROIfilter
- ROIfilter->SetInput(InputImage);
- ROIfilter->SetRegionOfInterest(smallregion);
- CCfilter->SetInput (ROIfilter->GetOutput());
Image Creation
DO
- On a newly-manually-created image, do initialize the pixel values if you expect them to be so!
- Example: image->FillBuffer(0); // initialize it to all dark
- ITK doesn't initialize the image buffer when you call Allocate(). It is your responsibility to initialize the pixel values.
Coding Style
DO NOT
- Do not declare constants using
- #define CONST_VALUE_NAME 3
- Use instead
- const unsigned int CONST_VALUE_NAME = 3,
- ITK doesn't define constants with #defines in header files
- Do not call Delete() in an ITK smart pointer.
- If you want to destroy a smart pointer object itksmartp, do:
itksmartp = NULL;
the ITK smart pointer will determine whether the object should be "deleted".
Calling Delete() in ITK smart pointers is a common mistake
when combining VTK code (that requires the use of Delete() )
and ITK code, (that forbids the use of Delete() ).
Using the new vtkSmartPointer class will help in a more consistent mindset when combining ITK and VTK code.
Instead of:
vtkclass * ptr = vtkclass::New();
do:
vtkSmartPointer< vtkclass > ptr = vtkSmartPointer< vtkclass >::New()
and then you won't need to call Delete() in VTK classes either.