Boost logo

Boost :

From: Stefan Seefeld (seefeld_at_[hidden])
Date: 2006-10-15 21:29:31


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...

Boost list run by bdawes at acm.org, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk