[Insight-developers] A few considerations on SimpleITK
Luca Antiga
luca.antiga at gmail.com
Mon Sep 13 05:04:59 EDT 2010
Hi all,
I'm following the activity on SimpleITK, and with reference to the
Prototype Code Discussions I've seen on the wiki, I'd like to share a
few thoughts on how I see SimpleITK. I understood that the developers
are seeking input from potential users, so here are my 2 cents.
I'm sure many I'm not saying anything new, but probably making things
explicit has some value.
1. I've been training people in using ITK in the past, some of them
coming from Matlab, others with a basic knowledge of C++ (no object-
orientation). With practically all of them, teaching them what an
object was and how they could use it was not a big deal (at a user
level, I'm not talking about writing new classes). Same thing with
pipelines (again, I'm talking about simple, linear pipelines). Even
defining templates, they could take it, although they complained about
how much they had to write. The one thing that *really* threw them off
was the error messages they got from the compiler (related to
templates).
With a superficial knowledge of C++ (at least at the beginning), there
was just too much they didn't know and they were learning (C++, image
processing, ITK) to make their way in the error messages and they hit
a roadblock. And very often there were too little time to teach them
everything.
If SimpleITK could be just ITK but hiding templates away (the Pipeline
option in http://www.itk.org/Wiki/ITK_Release_4/SimpleITK/Advisory_Review_Board/Prototype_Code_Discussions)
it would be great, mainly thanks to compiler error messages starting
to be meaningful for users without C++ skills. And at the same time it
would allow them to move towards the "real ITK" in steps.
3. The second consideration is related to another "roadblock" I've
seen in users, especially the ones coming from Matlab. Users like the
"image as a matrix" perspective, they like to manipulate an image
using indexes, extract slices or sub-matrices, extend images, perform
arithmetic operations, all simply acting on indexes. Creating a layer
close to Numpy's ndarray, for instance (or simpler and less powerful),
would help them hacking their algorithms without diving to deep into
pipelines (this time seen from the inside) or iterators. Granted, this
would lead them creating dimension-dependent code, and I see the
dangers behind it, but I think we have to trade cleanness for adoption
to some extent. After all, I've see several experienced researchers
even at Namic meetings creating their algorithms in Matlab and then
moving to ITK, just because it was more comfortable to them. SimpleITK
is also about comfort after all.
3. As a last point on the Prototype Code Discussion, I also see that
the procedural way (functional, no filter blocks) could be valuable
for the occasional user or for the user in a hurry. For this reason, I
see functions having a coarser granularity than the Pipelined
SimpleITK. The procedures would essentially be pipelines of filters
that perform a complete task, rather than procedural versions of
individual filters. With this respect, it would be great if they'd
coexist with the Pipeline SimpleITK as just another higher level layer
(side note: couldn't they be also of use for the Testing
infrastructure?).
As for the issue of having a long parameter list, one possible
solution would be to identify a restricted set of important parameters
and expose them as arguments to the functions, and to flag the others
as "advanced". The advanced parameters would be contained in an
object, to be passed as last argument to the functions, that would
allow to access and modify all parameters using the enums approach
(unlike the exposed ones).
Ok, I'll stop, thanks for reading so far, and thanks for your work on
SimpleITK
Best regards
Luca
More information about the Insight-developers
mailing list