Exemplo n.º 1
0
void mitk::ExtractImageFilter::ItkImageProcessing( itk::Image<TPixel,VImageDimension>* itkImage )
{
  // use the itk::ExtractImageFilter to get a 2D image
  typedef itk::Image< TPixel, VImageDimension >   ImageType3D;
  typedef itk::Image< TPixel, VImageDimension-1 > ImageType2D;

  typename ImageType3D::RegionType inSliceRegion = itkImage->GetLargestPossibleRegion();
  
  inSliceRegion.SetSize( m_SliceDimension, 0 );

  typedef itk::ExtractImageFilter<ImageType3D, ImageType2D> ExtractImageFilterType;

  typename ExtractImageFilterType::Pointer sliceExtractor = ExtractImageFilterType::New();
  sliceExtractor->SetInput( itkImage );
    
  inSliceRegion.SetIndex( m_SliceDimension, m_SliceIndex );

  sliceExtractor->SetExtractionRegion( inSliceRegion );

  // calculate the output
  sliceExtractor->UpdateLargestPossibleRegion();

  typename ImageType2D::Pointer slice = sliceExtractor->GetOutput();

  // re-import to MITK
  Image::Pointer resultImage = ImageToImageFilter::GetOutput();
  GrabItkImageMemory(slice, resultImage, NULL, false);
}
Exemplo n.º 2
0
    typename itk::Image<TPixel, VImageDimension>::Pointer MaskUtilities<TPixel, VImageDimension>::ExtractMaskImageRegion()
    {
        if (m_Mask==nullptr || m_Image==nullptr)
        {
            MITK_ERROR << "Set an image and a mask first";
        }

        bool maskSanity = CheckMaskSanity();

        if (!maskSanity)
        {
            MITK_ERROR << "Mask and image are not compatible";
        }

        typedef itk::Image< TPixel, VImageDimension > ImageType;
        typedef itk::Image< unsigned short, VImageDimension > MaskType;
        typedef itk::ExtractImageFilter< ImageType, ImageType > ExtractImageFilterType;

        typename ImageType::SizeType imageSize = m_Image->GetBufferedRegion().GetSize();
        typename ImageType::SizeType maskSize = m_Mask->GetBufferedRegion().GetSize();

        typename itk::Image<TPixel, VImageDimension>::Pointer extractedImg = itk::Image<TPixel, VImageDimension>::New();

        bool maskSmallerImage = false;
        for ( unsigned int i = 0; i < ImageType::ImageDimension; ++i )
        {
          if ( maskSize[i] < imageSize[i] )
          {
            maskSmallerImage = true;
          }
        }

        if ( maskSmallerImage )
        {
          typename ExtractImageFilterType::Pointer extractImageFilter = ExtractImageFilterType::New();
          typename MaskType::PointType maskOrigin = m_Mask->GetOrigin();
          typename ImageType::PointType imageOrigin = m_Image->GetOrigin();
          typename MaskType::SpacingType maskSpacing = m_Mask->GetSpacing();
          typename ImageType::RegionType extractionRegion;
          typename ImageType::IndexType extractionRegionIndex;


          for (unsigned int i=0; i < maskOrigin.GetPointDimension(); i++)
          {
              extractionRegionIndex[i] = (maskOrigin[i] - imageOrigin[i]) / maskSpacing[i];
          }

          extractionRegion.SetIndex(extractionRegionIndex);
          extractionRegion.SetSize(m_Mask->GetLargestPossibleRegion().GetSize());

          extractImageFilter->SetInput( m_Image );
          extractImageFilter->SetExtractionRegion( extractionRegion );
          extractImageFilter->SetCoordinateTolerance( 0.001 );
          extractImageFilter->SetDirectionTolerance( 0.001 );
          extractImageFilter->Update();
          extractedImg = extractImageFilter->GetOutput();
          extractedImg->SetOrigin(m_Mask->GetOrigin());
          extractedImg->SetLargestPossibleRegion(m_Mask->GetLargestPossibleRegion());
          extractedImg->SetBufferedRegion(m_Mask->GetBufferedRegion());

        }
        else
        {
          extractedImg = m_Image;
        }

        return extractedImg;
    }