[Insight-users] Wrapping R with SimpleITK

Brandon Whitcher bwhitcher at gmail.com
Mon Jan 2 03:37:14 EST 2012


Brad, as you can tell I'm completely new to ITK... thank-you for your
patience.  My SimpleITK (source) Testing/Data directory is empty from my
"clone-ing" via Git (I am also a Git novice, sorry).  Looking at the
version control tree at

http://itk.org/gitweb?p=SimpleITK.git;a=tree;f=Testing;h=eb50d756edee129fc26beb6d4c00f288ea49309a;hb=HEAD

...I get...

m--------- - Data history

...which doesn't look too promising from my knowledge of file permissions.
How can I overcome this?  May I ask for "cthead1.png" via email to try this
example ASAP?

cheers...

Brandon

On 2 January 2012 04:21, Bradley Lowekamp <blowekamp at mail.nih.gov> wrote:

> 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/20120102/9f702345/attachment.htm>


More information about the Insight-users mailing list