Hi @blowekamp & @matt.mccormick,
thanks for your quick reply. Here are some considerations:
- it’s great to see that SimpleITK is already about to release itk5 support. I am now building with itk5.1b1 as you suggested. I believe that for the current development of VoxLogicA that may suffice, and I can certainly wait the release of SimpleITK 2.0. It would also help a lot to distribute nuget binaries for the main operating systems (currently I need to recompile the csharp wrappers when I want to update them). I think we already discussed this some months ago, I will try to understand how to do this as I myself have no idea about that.
However I have some questions about SimpleITK (before even considering to allocate the effort required for #2 below).
First of all, do you think it could be possible to take advantage of the iterators in the experimental namespace of ITK5? In particular the neighbours iterators may be very helpful.
Second, we are planning to investigate using the GPU quite soon, as some (non-ITK-based) operations that we do are expensive and really parallel. But is there support for the GPU also in ITK? And in SimpleITK? There’s no occurrence of the word GPU in the software guide.
Third, I’ve had quite some difficulties in using ConnectedThresholdImageFilter in SimpleITK because converting the array of seed points from dotnet to the SWIG type is terribly slow. In my use case I found an alternative method, but that left me wondering (but this is likely a problem also for #2 below). Providing low-level access to an uninitialised array could be a solution (similar to GetBufferAsXXX, but for arrays). BTW I’ve had to externally lock the images as GetBufferAsXXX is not thread-safe.
- I am also happy to get information about the wrappers architecture in ITK. I checked the java examples a bit closer. It would be very useful in my opinion to have access to the full ITK from dotnet, however, I am unsure about some technicalities (that’s also because I never used ITK myself, since I’ve been using SimpleITK.
First, the mangling of types goes against the fact that fsharp (and probably also csharp) have generics, so it would be useful to “demangle” again these types by auto-generating a higher-level fsharp library. Or just don’t mangle them in the beginning and generate sensible fsharp generic types. But this is something that would require some help from members of the fsharp community I believe. I don’t have the manpower to do such a reasoning on my own.
Second, what about pipelining? And parallel processing? VoxLogicA in essence builds a (large,sophisticated) processing pipeline and runs it in parallel on the available cpu cores. Using the pipelining functions in ITK could be a major reason to switch from SimpleITK to ITK, however I think it may be very difficult to get these right in languages different from C++ or am I wrong? And what about inserting also user-defined filters in the pipeline? Is it possible to write such filters outside of C++/python? Also: is it possible to access the ITK thread pool “externally” so that the thread pool of the dotnet virtual machine and the one that ITK uses don’t fight for processors?
Thanks for reading so far