Slicer3:Python:pitky
From Slicer Wiki
Home < Slicer3:Python:pitky
This is part of a NA-MIC Summer Project Week 2009 Project.
""" A simple example to show how to use weave with ITK. This lets one
pass numpy arrays to ITK for processing.
based on vtk_example.py from weave distribution.
Author: Steve Pieper
Copyright (c) 2009, Steve Pieper
License: BSD Style.
"""
d = '/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site-packages/'
packages = ['matplotlib', 'neuroimaging', 'numpy', '', 'scipy']
for p in packages:
sys.path.append(d+p)
import scipy.weave as weave
import numpy
import sys
import time
import os
# from ITKConfig.cmake - TODO: extract automatically, along with build flags etc (or invoke cmake via distutils?!)
inc_dirs = ['/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Algorithms', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/BasicFilters', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Common', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Numerics', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/IO', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Numerics/FEM', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Numerics/Statistics', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Numerics/NeuralNetworks', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/SpatialObject', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/MetaIO', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/NrrdIO', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/NrrdIO', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/DICOMParser', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/DICOMParser', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/expat', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/expat', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/nifti/niftilib', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/nifti/znzlib', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/itkExtHdrs', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/vxl/v3p/netlib', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/vxl/vcl', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/vxl/core', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/vxl/v3p/netlib', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/vxl/vcl', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/vxl/core', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/Utilities/gdcm', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Utilities/gdcm/src', '/Users/pieper/slicer3/latest/Slicer3-lib/Insight/Code/Review']
# The ITK library directories.
lib_dirs = ['/Users/pieper/slicer3/latest/Slicer3-lib/Insight-build/bin']
def writer_test():
"""A simple example of how you can use ITK code in weave
to write a volume to a file.
"""
fileName = '/tmp/rand.nrrd'
array = numpy.arange(0,24,dtype='float64').reshape(2,3,4)
code=r"""
typedef itk::Image<double,3> ImageType; // TODO: construct from dtype and shape
ImageType::Pointer image = ImageType::New();
image->GetPixelContainer()->SetImportPointer( array, Narray[0]*Narray[1]*Narray[2], false );
ImageType::RegionType region;
ImageType::IndexType index;
ImageType::SizeType size;
index[0] = index[1] = index[2] = 0;
size[0] = Narray[0]; size[1] = Narray[1]; size[2] = Narray[2];
region.SetIndex(index);
region.SetSize(size);
image->SetLargestPossibleRegion(region);
image->SetBufferedRegion(region);
itk::ImageFileWriter< ImageType >::Pointer writer = WriterType::New();
writer->SetFileName( fileName );
writer->SetInput( image );
writer->Update();
"""
weave.inline(code, ['fileName', 'array'],
include_dirs = inc_dirs,
library_dirs = lib_dirs,
headers=['"itkImage.h"', '"itkImageFileWriter.h"'],
libraries=['itkCommon', 'itkIO'])
TODO = """
- apply a filter (volume in and out, where output size may be different from input)
- compile on windows
- interface with cmake?
- how to deploy built libs in cpacked binary
-- how to trigger weave compilation during build process for packaging
"""
if __name__ == "__main__":
writer_test()