ITK/Examples/Cxx/Developer/ImageSource
From KitwarePublic
Jump to navigationJump to search
Description
This example demonstrates how to make a filter which produces an image.
ITK Classes Demonstrated
ImageSource.cxx
<source lang="cpp">
- include "itkImage.h"
- include "itkImageFileWriter.h"
- include "MyImageSource.h"
int main(int, char*[]) {
// Setup types typedef itk::Image<unsigned char, 2> ImageType; typedef itk::MyImageSource<ImageType> FilterType;
// Create and the filter FilterType::Pointer filter = FilterType::New(); filter->Update(); filter->GetOutput()->Print(std::cout);
typedef itk::ImageFileWriter< ImageType > WriterType; WriterType::Pointer writer = WriterType::New(); writer->SetFileName("Test.jpg"); writer->SetInput(filter->GetOutput()); writer->Update();
return EXIT_SUCCESS;
} </source>
MyImageSource.h
<source lang="cpp">
- ifndef __MyImageSource_h
- define __MyImageSource_h
- include "itkImageSource.h"
- include <set>
namespace itk { template< class TImage> class MyImageSource:public ImageSource< TImage > { public:
/** Standard class typedefs. */ typedef MyImageSource Self; typedef ImageSource< TImage > Superclass; typedef SmartPointer< Self > Pointer;
/** Method for creation through the object factory. */ itkNewMacro(Self);
/** Run-time type information (and related methods). */ itkTypeMacro(MyImageSource, ImageSource);
protected:
MyImageSource(){} ~MyImageSource(){}
/** Does the real work. */ virtual void GenerateData();
private:
MyImageSource(const Self &); //purposely not implemented void operator=(const Self &); //purposely not implemented
}; } //namespace ITK
- ifndef ITK_MANUAL_INSTANTIATION
- include "MyImageSource.txx"
- endif
- endif // __MyImageSource_h
</source>
MyImageSource.txx
<source lang="cpp">
- ifndef __MyImageSource_txx
- define __MyImageSource_txx
- include "MyImageSource.h"
namespace itk {
template< class TOutputImage> void MyImageSource< TOutputImage>
- GenerateData()
{
typename TOutputImage::Pointer output = this->GetOutput(); typename TOutputImage::RegionType region; typename TOutputImage::IndexType start; start[0] = 0; start[1] = 0; typename TOutputImage::SizeType size; size[0] = 200; size[1] = 300; region.SetSize(size); region.SetIndex(start); output->SetRegions(region); output->Allocate(); itk::ImageRegionIterator<TOutputImage> imageIterator(output,output->GetLargestPossibleRegion()); while(!imageIterator.IsAtEnd()) { if(imageIterator.GetIndex()[0] == imageIterator.GetIndex()[1]) { imageIterator.Set(255); } else { imageIterator.Set(0); } ++imageIterator; }
}
}// end namespace
- endif
</source>