[Insight-users] Can't paste Slice back into 3D Volume

A D callidus.713 at gmail.com
Fri Aug 24 15:15:17 EDT 2012


Hello!

Finally, I got it! I found an example in /Examples/IO called *
ImageReadExtractFilterInsertWrite.cxx* which does the job. I was so
overwhelmed by all the information, that I didn't see this in the first
place.

AD


2012/8/20 A D <callidus.713 at gmail.com>

> Dear ITK-Users!
>
> I have problems to paste an extracted and edited slice back into its 3D
> Volume. I tried this with the *PasteImageFilter *with the *SetInPlace*(true),
> but it doesn't change the actual 3D Volume after reinserting the slice!
>
> Yours Thankfully, AD
>
> Here is the code I have used, have anyone an idea, why it doesn't work?
>
> #include "itkImage.h"
> #include "itkImageFileReader.h"
>
> #include "itkExtractImageFilter.h"
> #include "itkAnalyzeImageIO.h"
>
> #include "itkSmartPointer.h"
>
> #include "itkPasteImageFilter.h"
> #include "itkOrientImageFilter.h"
> #include "itkCastImageFilter.h"
> #include "itkImageFileWriter.h"
> #include "itkInPlaceImageFilter.h"
> #include "itkBinaryThresholdImageFilter.h"
>
> typedef float        InputPixelType3D;
> typedef float        OutputPixelType2D;
>
> typedef itk::Image< InputPixelType3D,  3 >    InputImageType3D;
> typedef itk::Image< OutputPixelType2D, 2 >    OutputImageType2D;
>
> typedef itk::ImageFileReader< InputImageType3D  >  ReaderType3D;
> typedef itk::CastImageFilter< OutputImageType2D, InputImageType3D >
> Cast2Dto3DImageFilter;
> typedef itk::ExtractImageFilter< InputImageType3D, OutputImageType2D >
> ExtractImageFilter;
> typedef itk::InPlaceImageFilter < InputImageType3D, InputImageType3D>
> InPlaceImageFilter;
> typedef itk::PasteImageFilter < InputImageType3D,  InputImageType3D>
> PasteImageFilterType;
> typedef itk::BinaryThresholdImageFilter< OutputImageType2D,
> OutputImageType2D > BinaryThresholdFilterType;
> typedef float   PixelType;
>
> typedef itk::ImageFileReader< OutputImageType2D > ReaderType;
>
> InputImageType3D::IndexType m_start;
>
> OutputImageType2D::Pointer extract2DImageSlice(InputImageType3D::Pointer
> volume, int plane, int slice) {
>     ExtractImageFilter::Pointer filter = ExtractImageFilter::New();
>
>     InputImageType3D::RegionType inputRegion =
>         volume->GetLargestPossibleRegion();
>
>     InputImageType3D::SizeType m_size;
>     m_size = inputRegion.GetSize();
>     m_size[plane] = 0;
>
>     m_start = inputRegion.GetIndex();
>
>     const unsigned int sliceNumber = slice;
>     m_start[plane] = sliceNumber;
>
>     InputImageType3D::RegionType desiredRegion;
>     desiredRegion.SetSize(  m_size  );
>     desiredRegion.SetIndex( m_start );
>     filter->SetExtractionRegion( desiredRegion );
>
>     filter->SetInput( volume );
>
>     filter->Update();
>
>     return filter->GetOutput();
> }
>
>
> InputImageType3D::Pointer ReadAnalyzeFile(const char *path)
> {
>     itk::AnalyzeImageIO::Pointer io = itk::AnalyzeImageIO::New();
>     ReaderType3D::Pointer fileReader = ReaderType3D::New();
>     fileReader->SetImageIO(io);
>     fileReader->SetFileName(path);
>     fileReader->Update();
>
>     itk::OrientImageFilter<InputImageType3D,InputImageType3D>::Pointer
> orienter =
>     itk::OrientImageFilter<InputImageType3D,InputImageType3D>::New();
>     orienter->UseImageDirectionOn();
>
> orienter->SetDesiredCoordinateOrientation(itk::SpatialOrientation::ITK_COORDINATE_ORIENTATION_IRA);
>     orienter->SetInput(fileReader->GetOutput());
>     orienter->Update();
>
>     return orienter->GetOutput();
>  }
>
>   OutputImageType2D::Pointer
> performBinaryThreshold(OutputImageType2D::Pointer slice, std::vector<float>
> filterParameter) {
>         BinaryThresholdFilterType::Pointer filter =
> BinaryThresholdFilterType::New();
>
>         filter->SetInput( slice );
>         filter->SetOutsideValue(0); //outsideValue
>         filter->SetInsideValue(255); //insideValue
>         filter->SetLowerThreshold(filterParameter[0]); //lowerThreshold*/
>         filter->SetUpperThreshold(filterParameter[1]); //upperThreshold
>         filter->Update();
>
>         return filter->GetOutput();
>     }
>
> void main() {
>     InputImageType3D::Pointer volume = ReadAnalyzeFile( "Volume.hdr" );
>     OutputImageType2D::Pointer slice = extract2DImageSlice( volume, 0,  1);
>
>     std::vector<float> param;
>     param.push_back(200);
>     param.push_back(255);
>
>     OutputImageType2D::Pointer binaryMask = performBinaryThreshold(slice,
> param);
>
>     Cast2Dto3DImageFilter::Pointer castFilter =
> Cast2Dto3DImageFilter::New();
>     castFilter->SetInput(binaryMask);
>     castFilter->Update();
>
>     PasteImageFilterType::Pointer pasteImageFilter =
> PasteImageFilterType::New();
>
>     pasteImageFilter->SetSourceRegion(
> castFilter->GetOutput()->GetLargestPossibleRegion().GetSize() );
>     pasteImageFilter->SetSourceImage( castFilter->GetOutput() );
>
>     pasteImageFilter->SetDestinationIndex( m_start );
>     pasteImageFilter->SetDestinationImage( volume );
>     pasteImageFilter->SetInPlace(true);
>
>     pasteImageFilter->Update();
>
>     volume = pasteImageFilter->GetOutput();
>     volume->Update();
>
>     std::cout << "Done!";
> }
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120824/538d9ef2/attachment.htm>


More information about the Insight-users mailing list