[Insight-users] Wrapping R with SimpleITK

Bradley Lowekamp blowekamp at mail.nih.gov
Sun Jan 1 23:21:18 EST 2012


Hello Brandon,

As is frequently the case the first exception is the cause of the remainder. To understand the first error message some explanation of the how SimpleITK manages image types is needed.

There may be some relevant information in the SimpleITK presentation from MICCAI 2011:
https://github.com/SimpleITK/SimpleITK-MICCAI-2011-Tutorial/blob/master/Presentation/SimpleITK-MICCAI-2011.pdf?raw=true


The sitk::Image class is a typeless image class which wraps numerous ITK image types. Externally the sitk::Image class presents the same interface for all images, wether it is a scalar itk::Image, a multicomponent itk::VectorImage, or even a run-line compressed itk::LabelMap. And then each of these ITK image types are templated over the dimension and the pixel type. So SimpleITK presents dozens of itk images types through a single sitk::Image object. 

So SimpelITK is not strongly typed on these individual image types, but it is type aware.

ITK  filters are also templated on the input, and output image types. But SimpleITK again type not expose the details of all the templated types, and instead just exposes a generic interface to the image filter, and internally is instantiates the image filter with all the plausible input image types, and the sensible corresponding output image types. 

There are a few methods which can be used to interrogate the image after it's loaded:

First there is the ToString member function which just dumps out  bunch of information about the internal ITK object:

>cat( Image_ToString( myimage ) )

And more specific methods:

> Image_GetDimension( myimage )
> Image_GetPixelIDTypeAsString( myimage )
> Image_GetPixelIDValue( myimage )

So lets look at what happens with the image you have chosen to run this script with

On Jan 1, 2012, at 9:03 AM, Brandon Whitcher wrote:

> Brad,
> 
> I have attempted to run SimpleGaussian.R in an interactive R session by executing
> 
> 
> using the "spine1.png" image (attached, along with load.R).

The data used for the tests can be found in the {SIMPLEITK_SOURCE}/Testing/Data.

> 
> The code fails to produce a smoothed image, here is the output
> 
> > source("load.R") # library(SimpleITK)
> > 
> > args <- c("spine1.png", 5, "spine1_smooth.png") # commandArgs(TRUE)
> > 
> > myreader <- ImageFileReader()
> > myreader <- ImageFileReader_SetFileName(myreader, args[[1]])
> > myimage <- ImageFileReader_Execute(myreader)
> > 

if you run:
>cat( Image_ToString( myimage ) )

You should see the following line:

RTTI typeinfo:   itk::VectorImage< unsigned char, 2u>

Or if you run:

> Image_GetPixelIDTypeAsString( myimage )
[1] "vector of 8-bit unsigned integer"

So with either of these methods you see that this file is not a black and white image that it first appears, but actually a RGB image loaded into an Itk::VectorImage

> > pixeltype <- Image_GetPixelIDValue(myimage)
> > 
> > myfilter <- SmoothingRecursiveGaussianImageFilter()
> > myfilter <- SmoothingRecursiveGaussianImageFilter_SetSigma(myfilter, as.double(args[2]))
> > smoothedimage <- SmoothingRecursiveGaussianImageFilter_Execute(myfilter, myimage)
> Warning message:
> In f(...) :
>   Exception thrown in SimpleITK SmoothingRecursiveGaussianImageFilter_Execute: /srv/SimpleITK/Code/Common/include/sitkMemberFunctionFactory.txx:173:
> sitk::ERROR: Pixel type: vector of 8-bit unsigned integer is not supported in 2D byN3itk6simple37SmoothingRecursiveGaussianImageFilterE

While this error message could use improvement  ( and will be improved ). It basically says that this filter doesn't work with this particular image type  ( it should also list the types of images it does work with ). This particular filter currently only works with scalar image type. So this image with sitkVectorUInt8 pixels is not going to work. 



> > 
> > mycaster <- CastImageFilter()
> > mycaster <- CastImageFilter_SetOutputPixelType(mycaster, pixeltype)
> > castedimage <- CastImageFilter_Execute(mycaster, soothedimage)
> Error in CastImageFilter_Execute(mycaster, soothedimage) : 
>   object 'soothedimage' not found

There appears to be a typeo "soothedimage" should be "smoothedimage". However, I think the same error message should be generated because the smoothedimage was not assigned due to the previous exception.

> > 
> > mywriter <- ImageFileWriter()
> > mywriter <- ImageFileWriter_SetFileName(mywriter, args[[3]])
> > mywriter <- ImageFileWriter_Execute(mywriter, castedimage)
> Error in ImageFileWriter_Execute(mywriter, castedimage) : 
>   object 'castedimage' not found
> 
> I am not sure what to make of the warnings or errors (sorry).  Any advice or modifications would be helpful.  I am using spine1.png since I cannot locate STAPLE1.png in either the ITK or SimpleITK directories.
> 

Using the functional interface the following may be simpler:

img <- ReadImage( "/src/SimpleITK/Testing/Data/Input/cthead1.png" )
pid <- Image_GetPixelIDValue( img )
simg <- SmoothingRecursiveGaussian( img, 4 )
cimg <- Cast( simg, pid )
WriteImage( cimg, "out.png" )

Good luck,
Brad

> thanks,
> 
> Brandon
> 
> 
> On 31 December 2011 18:34, Bradley Lowekamp <blowekamp at mail.nih.gov> wrote:
> Hello again,
> 
> I was not able to get the R packaging to work as described in the link provided. I did find a manual way to load the SimpleITK R library.
> 
> Copy the SimpleITK.R file and the libSimpleITK.so ( renamed to SimpleITK.so ) into your current path, such as with the following commands:
> 
> cp SimpleITK/SimpleITK-build/Wrapping/SimpleITK.R
> cp SimpleITK/SimpleITK-build/Wrapping/SimpleITK.R ./
> 
> 
> The fire up R and type:
> 
> $ R
> 
> R version 2.14.0 (2011-10-31)
> ...
> 
> > dyn.load( paste("SimpleITK", .Platform$dynlib.ext, sep="" ))
> > source ( "SimpleITK.R" )
> Creating a generic function for ‘print’ from package ‘base’ in the global environment
> > cacheMetaData( 1 )
> 
> Here is an example that was working at one point:
> 
> http://www.itk.org/SimpleITKDoxygen/html/SimpleGaussian_8R-example.html
> 
> However the "library( SimpleITK )" call is used for when SimpleITK is installed as a package not the adhoc approach used above.
> 
> Good Luck,
> Brad
> 
> On Dec 31, 2011, at 1:11 PM, Lowekamp, Bradley (NIH/NLM/LHC) [C] wrote:
> 
>> Hello Brandon,
>> 
>> The particular files you looking for are in the SimpleITK source directory not the build. You will need both the DESCRIPTION and the zzz.R files from the {SIMPLEITK_SOURCE}/Wrapping/R_Package directory.
>> 
>> We have been calling R a Tier 2 or Tier 3 language in SimpleITK because is not as well supported as the other wrapped languages such as Python, Java, CSharp or even Ruby, or TCL. The primary reason for this is that we have not gotten the automatic testing working for R, so that it will show up on the nightly dashboard. Additionally, we also are hoping for contribution from the community to get the R language specific features polished and up to the expected R standard conventions.
>> 
>> I hope this helps you with getting SimpleITK working R,
>> 
>> Brad
>> 
>> ========================================================
>> Bradley Lowekamp  
>> Medical Science and Computing for
>> Office of High Performance Computing and Communications
>> National Library of Medicine 
>> blowekamp at mail.nih.gov
>> 
>> On Dec 31, 2011, at 9:28 AM, Brandon Whitcher wrote:
>> 
>>> Dear ITK/SimpleITK experts,
>>> 
>>> I have installed SimpleITK by turning off all wrapping facilities except WRAP_R.  I am now following the instructions in
>>> 
>>> http://www.itk.org/SimpleITKDoxygen/html/Wrapping.html
>>> 
>>> Specifically, 
>>> 
>>> 6) Copy the file
>>>        SimpleITK/Wrapping/R_Package/DESCRIPTION
>>> into the current
>>> 
>>>        SimpleITK/DESCRIPTION
>>> ...but I cannot find the file Wrapping/R_package/DESCRIPTION in my SimpleITK-binary installation.  Where is this file?
>>> 
>>> thank-you,
>>> 
>>> Brandon
>>> 
>>> _____________________________________
>>> Powered by www.kitware.com
>>> 
>>> Visit other Kitware open-source projects at
>>> http://www.kitware.com/opensource/opensource.html
>>> 
>>> Kitware offers ITK Training Courses, for more information visit:
>>> http://www.kitware.com/products/protraining.html
>>> 
>>> Please keep messages on-topic and check the ITK FAQ at:
>>> http://www.itk.org/Wiki/ITK_FAQ
>>> 
>>> Follow this link to subscribe/unsubscribe:
>>> http://www.itk.org/mailman/listinfo/insight-users
>> 
>> _____________________________________
>> Powered by www.kitware.com
>> 
>> Visit other Kitware open-source projects at
>> http://www.kitware.com/opensource/opensource.html
>> 
>> Kitware offers ITK Training Courses, for more information visit:
>> http://www.kitware.com/products/protraining.html
>> 
>> Please keep messages on-topic and check the ITK FAQ at:
>> http://www.itk.org/Wiki/ITK_FAQ
>> 
>> Follow this link to subscribe/unsubscribe:
>> http://www.itk.org/mailman/listinfo/insight-users
> 
> 
> <spine1.png><load.R>

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.itk.org/pipermail/insight-users/attachments/20120101/073d0099/attachment.htm>


More information about the Insight-users mailing list