|
|
Line 1: |
Line 1: |
| ==Description== | | {{warning|1=The media wiki content on this page is no longer maintained. The examples presented on the https://itk.org/Wiki/* pages likely require ITK version 4.13 or earlier releases. In many cases, the examples on this page no longer conform to the best practices for modern ITK versions.}} |
| 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>
| |
| | |
| {{CMakeLists|{{SUBPAGENAME}}}}
| |