|
|
(One intermediate revision by one other user not shown) |
Line 1: |
Line 1: |
| ==MiniPipeline.cxx==
| | DS{{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.}} |
| <source lang="cpp">
| |
| #include "itkImage.h"
| |
| #include "itkImageFileReader.h"
| |
| #include "itkImageFileWriter.h"
| |
| | |
| #include "ImageFilter.h"
| |
| | |
| template <typename TImage>
| |
| static void CreateImage(TImage* const image);
| |
| | |
| int main(int, char*[])
| |
| {
| |
| // Setup types
| |
| typedef itk::Image<unsigned char, 2> ImageType;
| |
| typedef itk::ImageFilter<ImageType> FilterType;
| |
| | |
| ImageType::Pointer image = ImageType::New();
| |
| CreateImage(image.GetPointer());
| |
| | |
| std::cout << "Input:" << std::endl;
| |
| std::cout << image->GetLargestPossibleRegion() << std::endl;
| |
| // Create and the filter
| |
| FilterType::Pointer filter = FilterType::New();
| |
| filter->SetInput(image);
| |
| filter->Update();
| |
| | |
| std::cout << "Input:" << std::endl;
| |
| std::cout << filter->GetOutput()->GetLargestPossibleRegion() << std::endl;
| |
|
| |
| typedef itk::ImageFileWriter< ImageType > WriterType;
| |
| WriterType::Pointer writer = WriterType::New();
| |
| writer->SetFileName("Output.png");
| |
| writer->SetInput(filter->GetOutput());
| |
| writer->Update();
| |
| | |
| return EXIT_SUCCESS;
| |
| }
| |
| | |
| template <typename TImage>
| |
| void CreateImage(TImage* const image)
| |
| {
| |
| // Create an image with 2 connected components
| |
| typename TImage::IndexType corner = {{0,0}};
| |
| | |
| unsigned int NumRows = 200;
| |
| unsigned int NumCols = 300;
| |
| typename TImage::SizeType size = {{NumRows, NumCols}};
| |
| | |
| typename TImage::RegionType region(corner, size);
| |
| | |
| image->SetRegions(region);
| |
| image->Allocate();
| |
| | |
| // Make another square
| |
| for(unsigned int r = 40; r < 100; r++)
| |
| {
| |
| for(unsigned int c = 40; c < 100; c++)
| |
| {
| |
| typename TImage::IndexType pixelIndex;
| |
| pixelIndex[0] = r;
| |
| pixelIndex[1] = c;
| |
| | |
| image->SetPixel(pixelIndex, 15);
| |
| }
| |
| }
| |
| }
| |
| | |
| </source>
| |
| | |
| ==ImageFilter.h==
| |
| <source lang="cpp">
| |
| #ifndef __itkImageFilter_h
| |
| #define __itkImageFilter_h
| |
| | |
| #include "itkImageToImageFilter.h"
| |
| | |
| #include "itkRecursiveGaussianImageFilter.h"
| |
| | |
| namespace itk
| |
| {
| |
| template< class TImage>
| |
| class ImageFilter:public ImageToImageFilter< TImage, TImage >
| |
| {
| |
| public:
| |
| /** Standard class typedefs. */
| |
| typedef ImageFilter Self;
| |
| typedef ImageToImageFilter< TImage, TImage > Superclass;
| |
| typedef SmartPointer< Self > Pointer;
| |
| | |
| /** Method for creation through the object factory. */
| |
| itkNewMacro(Self);
| |
| | |
| /** Run-time type information (and related methods). */
| |
| itkTypeMacro(ImageFilter, ImageToImageFilter);
| |
| | |
| | |
| /** Image dimension. */
| |
| itkStaticConstMacro(ImageDimension, unsigned int,
| |
| TImage::ImageDimension);
| |
| | |
| | |
| /** Smoothing filter type */
| |
| typedef RecursiveGaussianImageFilter<
| |
| TImage,
| |
| TImage
| |
| > InternalGaussianFilterType;
| |
| | |
| /** Pointer to a gaussian filter. */
| |
| typedef typename InternalGaussianFilterType::Pointer InternalGaussianFilterPointer;
| |
| | |
| protected:
| |
| ImageFilter();
| |
| ~ImageFilter(){}
| |
| | |
| /** Does the real work. */
| |
| virtual void GenerateData();
| |
| | |
| private:
| |
| ImageFilter(const Self &); //purposely not implemented
| |
| void operator=(const Self &); //purposely not implemented
| |
| | |
| };
| |
| } //namespace ITK
| |
| | |
| | |
| #ifndef ITK_MANUAL_INSTANTIATION
| |
| #include "ImageFilter.hxx"
| |
| #endif
| |
| | |
| | |
| #endif // __itkImageFilter_h
| |
| | |
| </source>
| |
| | |
| ==ImageFilter.hxx==
| |
| <source lang="cpp">
| |
| #ifndef __itkImageFilter_txx
| |
| #define __itkImageFilter_txx
| |
| | |
| #include "ImageFilter.h"
| |
| #include "itkObjectFactory.h"
| |
| #include "itkImageRegionIterator.h"
| |
| | |
| namespace itk
| |
| {
| |
| | |
| template< class TImage>
| |
| ImageFilter< TImage>
| |
| ::ImageFilter()
| |
| {
| |
| | |
| }
| |
| | |
| template< class TImage>
| |
| void ImageFilter< TImage>
| |
| ::GenerateData()
| |
| {
| |
| InternalGaussianFilterPointer smoothingFilters[ImageDimension]; | |
| | |
| // Instantiate all filters
| |
| for ( unsigned int i = 0; i < ImageDimension; i++ )
| |
| {
| |
| smoothingFilters[i] = InternalGaussianFilterType::New();
| |
| smoothingFilters[i]->SetOrder(InternalGaussianFilterType::ZeroOrder);
| |
| smoothingFilters[i]->SetDirection(i);
| |
| }
| |
| | |
| // Connect all filters (start at 1 because 0th filter is connected to the input
| |
| for ( unsigned int i = 1; i < ImageDimension; i++ )
| |
| {
| |
| smoothingFilters[i]->SetInput(
| |
| smoothingFilters[i - 1]->GetOutput() );
| |
| }
| |
| | |
| const typename TImage::ConstPointer inputImage( this->GetInput() );
| |
| | |
| const typename TImage::RegionType region = inputImage->GetRequestedRegion();
| |
| const typename TImage::SizeType size = region.GetSize();
| |
| | |
| smoothingFilters[0]->SetInput(inputImage);
| |
| | |
| smoothingFilters[ImageDimension-1]->Update();
| |
| | |
| // Copy the output from the last filter
| |
| //this->GraftOutput( m_SmoothingFilters[ImageDimension-1]->GetOutput() );
| |
| this->GetOutput()->Graft(smoothingFilters[ImageDimension-1]->GetOutput() );
| |
| }
| |
| | |
| }// end namespace
| |
| | |
| | |
| #endif
| |
| </source>
| |
| | |
| {{ITKCMakeLists|{{SUBPAGENAME}}}}
| |