
I vote for GIL to be accepted into boost. Design ====== GIL provides a very powerful representation of Pixels, Images, and related concepts. They are very generic, yet allow highly efficient code to be written. The models fall into two categories: pixel-related (channels, color-space, etc.), and pixel-container-related (image, locator, iterator, etc.). I believe the pixel-model is very well done. I asked for a special-case representation of packed heterogeneous pixels (such as rgb565), and Lubomir demonstrated how to provide such pixel types using the existing concepts. While the pixel-container part is quite good, I believe it can be refined a bit: * It should be possible to create row-major, as well as column-major images, to speed up column-based algorithms. As pixels have 'channels' as well as 'semantic channels', images may have 'rows' as well as 'semantic rows'. * It may be worthwhile generalizing some of the API in parametrizing dimensions (for example to have a 'size(axis)' method instead of 'width()' / 'height()', or having a stride(axis) method returning the step size along rows and columns... Implementation ============== I think the implementation is very clean. I have only some minor points: * The io extensions should use iostream instead of stdio (i.e. std::iostreams instead of FILE *) * Variable names should not start with an underscore, as such names are reserved. * The implementation should be extended to provide unit tests (many of them !). (A little anecdote: I tried to assign an image A to an image B with A and B of different types. The code didn't compile since the copy constructor attempts to access A's private member _alloc. This is a fairly simple case that would have been detected easily had there been a unit test for it.) Documentation ============= I think the existing documentation is very good. The presentation certainly helps a lot ! I think it would be very helpful to add sections to the tutorial that describe how to introduce custom pixel and image (well, locator) types. That would demonstrate the reasoning behind lots of the chosen concepts. The library should contain example programs to demonstrate all the individual aspects of the library. Applicability ============= I believe the library is extremely useful in its domain. Thus far it mostly provides types and some 'core' algorithms. I'm certain that, once accepted, implementations for all the common image processing algorithms will emerge quickly. Evaluation ========== My evaluation is based on my reading (and listening to) the documentation, as well as using GIL to write some sample applets. I have used the new packed pixel types, combined GILs pixel types with my own Matrix types (VSIPL++), etc. I used g++ 4.1.1. While I wouldn't call me an expert in the problem domain, I think I am sufficiently knowledgeable to judge GIL's usefulness. Regards, Stefan -- ...ich hab' noch einen Koffer in Berlin...