SimpleITK demo

Microscopy examples (mostly)

Package is still preliminary, but pretty stable

In [1]:
library(SimpleITK)
# change the show method for notebooks
source("setup.R")

Load an image - note that SimpleITK/ITK supports many formats - tif, jpg, png, dicom + heaps of 3/4d stuff from neuroimaging.

In [2]:
fluoro <- ReadImage('images/fluoro_01_crop.png')

See if it is a pretty one:

In [3]:
fluoro

Look at the underlying itk image structure

In [4]:
print(fluoro)
VectorImage (0x7fcd8498e290)
  RTTI typeinfo:   itk::VectorImage<unsigned char, 2u>
  Reference Count: 1
  Modified Time: 1150
  Debug: Off
  Object Name: 
  Observers: 
    none
  Source: (none)
  Source output name: (none)
  Release Data: Off
  Data Released: False
  Global Release Data: Off
  PipelineMTime: 1012
  UpdateMTime: 1149
  RealTimeStamp: 0 seconds 
  LargestPossibleRegion: 
    Dimension: 2
    Index: [0, 0]
    Size: [512, 512]
  BufferedRegion: 
    Dimension: 2
    Index: [0, 0]
    Size: [512, 512]
  RequestedRegion: 
    Dimension: 2
    Index: [0, 0]
    Size: [512, 512]
  Spacing: [1, 1]
  Origin: [0, 0]
  Direction: 
1 0
0 1

  IndexToPointMatrix: 
1 0
0 1

  PointToIndexMatrix: 
1 0
0 1

  Inverse Direction: 
1 0
0 1

  VectorLength: 3
  PixelContainer: 
    ImportImageContainer (0x7fcd84988410)
      RTTI typeinfo:   itk::ImportImageContainer<unsigned long, unsigned char>
      Reference Count: 1
      Modified Time: 1146
      Debug: Off
      Object Name: 
      Observers: 
        none
      Pointer: 0x107acc000
      Container manages memory: true
      Size: 786432
      Capacity: 786432

Operators are defined to make images act like arrays:

In [5]:
# $ operator to access methods
fluoro$GetSize()
Out[5]:
  1. 512
  2. 512
In [6]:
# trick to show the methods
getMethod("$", class(fluoro))
An object of class “signature”
An object of class “signature”
An object of class “signature”
An object of class “signature”
Out[6]:
structure(function (x, name) 
{
    accessorFuns = list(`__seteq__` = Image___seteq__, GetITKBase = Image_GetITKBase, 
        GetPixelID = Image_GetPixelID, GetPixelIDValue = Image_GetPixelIDValue, 
        GetDimension = Image_GetDimension, GetNumberOfComponentsPerPixel = Image_GetNumberOfComponentsPerPixel, 
        GetOrigin = Image_GetOrigin, SetOrigin = Image_SetOrigin, 
        GetSpacing = Image_GetSpacing, SetSpacing = Image_SetSpacing, 
        GetDirection = Image_GetDirection, SetDirection = Image_SetDirection, 
        TransformIndexToPhysicalPoint = Image_TransformIndexToPhysicalPoint, 
        TransformPhysicalPointToIndex = Image_TransformPhysicalPointToIndex, 
        TransformPhysicalPointToContinuousIndex = Image_TransformPhysicalPointToContinuousIndex, 
        TransformContinuousIndexToPhysicalPoint = Image_TransformContinuousIndexToPhysicalPoint, 
        GetSize = Image_GetSize, GetHeight = Image_GetHeight, 
        GetWidth = Image_GetWidth, GetDepth = Image_GetDepth, 
        CopyInformation = Image_CopyInformation, GetMetaDataKeys = Image_GetMetaDataKeys, 
        HasMetaDataKey = Image_HasMetaDataKey, GetMetaData = Image_GetMetaData, 
        GetPixelIDTypeAsString = Image_GetPixelIDTypeAsString, 
        ToString = Image_ToString, GetPixelAsInt8 = Image_GetPixelAsInt8, 
        GetPixelAsUInt8 = Image_GetPixelAsUInt8, GetPixelAsInt16 = Image_GetPixelAsInt16, 
        GetPixelAsUInt16 = Image_GetPixelAsUInt16, GetPixelAsInt32 = Image_GetPixelAsInt32, 
        GetPixelAsUInt32 = Image_GetPixelAsUInt32, GetPixelAsInt64 = Image_GetPixelAsInt64, 
        GetPixelAsUInt64 = Image_GetPixelAsUInt64, GetPixelAsFloat = Image_GetPixelAsFloat, 
        GetPixelAsDouble = Image_GetPixelAsDouble, GetPixelAsVectorInt8 = Image_GetPixelAsVectorInt8, 
        GetPixelAsVectorUInt8 = Image_GetPixelAsVectorUInt8, 
        GetPixelAsVectorInt16 = Image_GetPixelAsVectorInt16, 
        GetPixelAsVectorUInt16 = Image_GetPixelAsVectorUInt16, 
        GetPixelAsVectorInt32 = Image_GetPixelAsVectorInt32, 
        GetPixelAsVectorUInt32 = Image_GetPixelAsVectorUInt32, 
        GetPixelAsVectorInt64 = Image_GetPixelAsVectorInt64, 
        GetPixelAsVectorUInt64 = Image_GetPixelAsVectorUInt64, 
        GetPixelAsVectorFloat32 = Image_GetPixelAsVectorFloat32, 
        GetPixelAsVectorFloat64 = Image_GetPixelAsVectorFloat64, 
        GetPixelAsComplexFloat32 = Image_GetPixelAsComplexFloat32, 
        GetPixelAsComplexFloat64 = Image_GetPixelAsComplexFloat64, 
        SetPixelAsInt8 = Image_SetPixelAsInt8, SetPixelAsUInt8 = Image_SetPixelAsUInt8, 
        SetPixelAsInt16 = Image_SetPixelAsInt16, SetPixelAsUInt16 = Image_SetPixelAsUInt16, 
        SetPixelAsInt32 = Image_SetPixelAsInt32, SetPixelAsUInt32 = Image_SetPixelAsUInt32, 
        SetPixelAsInt64 = Image_SetPixelAsInt64, SetPixelAsUInt64 = Image_SetPixelAsUInt64, 
        SetPixelAsFloat = Image_SetPixelAsFloat, SetPixelAsDouble = Image_SetPixelAsDouble, 
        SetPixelAsVectorInt8 = Image_SetPixelAsVectorInt8, SetPixelAsVectorUInt8 = Image_SetPixelAsVectorUInt8, 
        SetPixelAsVectorInt16 = Image_SetPixelAsVectorInt16, 
        SetPixelAsVectorUInt16 = Image_SetPixelAsVectorUInt16, 
        SetPixelAsVectorInt32 = Image_SetPixelAsVectorInt32, 
        SetPixelAsVectorUInt32 = Image_SetPixelAsVectorUInt32, 
        SetPixelAsVectorInt64 = Image_SetPixelAsVectorInt64, 
        SetPixelAsVectorUInt64 = Image_SetPixelAsVectorUInt64, 
        SetPixelAsVectorFloat32 = Image_SetPixelAsVectorFloat32, 
        SetPixelAsVectorFloat64 = Image_SetPixelAsVectorFloat64, 
        SetPixelAsComplexFloat32 = Image_SetPixelAsComplexFloat32, 
        SetPixelAsComplexFloat64 = Image_SetPixelAsComplexFloat64, 
        MakeUnique = Image_MakeUnique)
    idx = pmatch(name, names(accessorFuns))
    if (is.na(idx)) 
        return(callNextMethod(x, name))
    f = accessorFuns[[idx]]
    function(...) {
        f(x, ...)
    }
}, target = structure("_p_itk__simple__Image", .Names = "x", package = "SimpleITK", class = structure("signature", package = "methods")), defined = structure("_p_itk__simple__Image", .Names = "x", package = "SimpleITK", class = structure("signature", package = "methods")), generic = structure("$", package = "base"), class = structure("MethodDefinition", package = "methods"))
In [7]:
# list operators to select a channel
fluoro[[1]]
In [8]:
# Usual arithmetic

fluoro[[1]] > 50
In [9]:
# look at a single pixel
fluoro[200,201]
Out[9]:
  1. 7
  2. 37
  3. 86
In [10]:
# array slicing to do cropping etc (note -- need to fix ops on multi-component images)
fluoro[[1]][1:100, 100:1]
In [11]:
# Convert to an array
fluoro.red <- as.array(fluoro[[1]])
dim(fluoro.red)
Out[11]:
  1. 512
  2. 512
In [13]:
?ComposeImageFilter
Out[13]:
ComposeImageFilter {SimpleITK}R Documentation

ComposeImageFilter

Description

ComposeImageFilter combine several scalar images into a multicomponent image. ComposeImageFilter

Arguments

ComposeImageFilter() Default Constructor that takes no arguments and initializes default parameters
Image Execute(const std::vector< Image > &images) Execute the filter on the input images
Image Execute(const Image &image1)
Image Execute(const Image &image1, const Image &image2)
Image Execute(const Image &image1, const Image &image2, const Image &image3)
Image Execute(const Image &image1, const Image &image2, const Image &image3, const Image &image4)
Image Execute(const Image &image1, const Image &image2, const Image &image3, const Image &image4, const Image &image5)
std::string GetName() const Name of this class
std::string ToString() const Print ourselves out
~ComposeImageFilter() Destructor

Details

ComposeImageFilter combine several scalar images into an itk::Image of vector pixel ( itk::Vector , itk::RGBPixel , ...), of std::complex pixel, or in an itk::VectorImage .

Inputs and Usage All input images are expected to have the same template parameters and have the same size and origin.

See: VectorImage

VectorIndexSelectionCastImageFilter Wiki Examples:

All Examples

Create a vector image from a collection of scalar images

Compose a vector image (with 3 components) from three scalar images

Convert a real image and an imaginary image to a complex image

See: Compose for the procedural interface


[Package SimpleITK version 0.9.0 ]