[ITK-users] (R wrapping/SimpleITK) AddCommand to ImageRegistrationMethod bug

Richard Beare richard.beare at gmail.com
Sun Apr 10 17:56:38 EDT 2016


Some of the FilterProgressReporting example doesn't make sense to me. It
shouldn't be necessary to access RCommand - it is used internally by
AddCommand. We probably shouldn't make it directly accessible from R. The
following works for me. A closure is necessary if you want the callback to
access the filter, for example to print measures
contained in the filter that is making the callback. Also note that in the
first message you were passing the function result, not the function.

## get an image

p <- PhysicalPointImageSource()

p$SetOrigin(c(-1, -1))

p$SetSize(c(50,50))

pim <- p$Execute()


pimOneChannel <- pim[[1]]


f1 <- function() {print("Start")}

f2 <- function(){print("End")}


gaussian <- DiscreteGaussianImageFilter()

gaussian$SetVariance( 2 )

gaussian$AddCommand( 'sitkStartEvent',  f1 )

gaussian$AddCommand( 'sitkEndEvent', f2 )


filtered <- gaussian$Execute( pimOneChannel )





On Sun, Apr 10, 2016 at 11:46 PM, Mathew Guilfoyle <mrguilfoyle at gmail.com>
wrote:

> Richard
>
> Thanks for the reply.  I hadn't appreciated that function being passed in
> the registration example was a closure.  However, in the
> FiterProgressReporting example it is not a closure.
>
> I have modified my code to be a closure but still get a crash/abort; I
> have also run the code in the examples themselves verbatim and get the same
> problem.
>
> Any further ideas on how to get this working?
>
> Cheers
>
>
> > On 10 Apr 2016, at 02:10, Mathew Guilfoyle <mrguilfoyle at gmail.com>
> wrote:
> >
> > There seems to be a problem with using the $AddCommand function to
> ImageRegistrationMethod objects in the R wrapping to SimpleITK.
> >
> > Using R 3.2.4 on OS X 10.11
> >
> > Example:
> >
> > f <- function(x){print(x$GetMetricValue())}
> >
> > registration = ImageRegistrationMethod()
> >
> > registration$AddCommand(‘sitkIterationEvent’, f(registration))
> >
> > This last line causes R to abort/hard crash (no error message).  This
> behaviour is irrespective of which event type I use or the function passed
> as the second argument (e.g. even something simple like print(‘Hello’))
> >
> > The AddCommand method is inherited from the SimpleITK ProcessObject
> type.  Digging around in the SimpleITK.R file I can see that the
> ProcessObject$AddCommand method expects a second argument of type
> ‘_p_itk__simple__Command’.
> >
> > There is a ‘Command’ method that generates a new object of type
> ‘_p_itk__simple__Command’.  If I pass this resulting object as the second
> argument to registration$AddCommand then I do not get an error.  However,
> there doesn’t seem to be any way to point the ‘_p_itk__simple__Command’
> object to my function or otherwise convert my function to a
> ‘_p_itk__simple__Command’ type.
> >
> > The $AddCommand method is used in a couple of example scripts on the
> SimpleITK site (using it for monitoring a registration and a filter e.g.
> https://github.com/SimpleITK/SimpleITK/blob/master/Examples/FilterProgressReporting.R)
> so I don’t know if it was working previously and a bug has been introduced
> more recently? (the example scripts cause the same error when I run them
> now)
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://public.kitware.com/pipermail/insight-users/attachments/20160411/4e797c54/attachment.html>


More information about the Insight-users mailing list