Getting there

After fixing some inlining problems and comparing the Python and C++ versions in a fairer way (read: with equal amounts of makeUnion calls), the C++ implementation is now blazingly fast. Compared to raw pointer arithmetics, it takes just 1.5 times as long, and the numpy version is much slower when the arrays are non-trivial. This means I actually got time to write lazyflow operators now!


More Iterations

I experimented a bit with different iteration schemes in vigra, and ended up in stealing the one used in labelVolume: Some nested functions that split the multi array into a list of iterators, shapes and accessors. I am not quite sure why this works so much better than the CoupledIterator approach (about a factor of 10 I’d say), but I will stick to that. The original algorithm from which I’m stealing is regrettably just for 3-dimensional arrays, but I wanted to be a bit more generic.

The new and improved mergeLabels function calls itself recursively for


Numpy is pretty impressive

As it turns out, my C++ functions suck. Really bad. Since my python functions turned out to be alright, I started developing their vigra counterparts. After a long night I finally got the python interface to the UnionFind data structure somewhat right, and I turned to the implementation of the mergeLabels function.

This function should simply inspect two adjacent chunks, find labeled regions that cross the boundary and merge the corresponding labels in the global UnionFind structure. A fairly simple task, as you can see from my python implementation:


Region Growing

Yay, I got accepted into the Google Summer of Code project ‘Lazy Connected Components’! The official start of development will be on May 17, but I have lectures to visit and excercises to do, so I decided to extend the community bonding phase and do some real development. In fact I feel quite bonded to the HCI already, so I guess this is fine.

For my first steps I created a repo outside ilastik / vigra so I can do some experimenting. In the latter stages of the project my code will have to be ported from there to the respective project’s git repository though.