New version of GEGL: more HDR features, new tools
Oyvind Kolas released new version of GEGL — new GIMP's core. The first release in a year brings several compelling new features. Quite a lot of important new features were implemented by two Google Summer of Code 2010 students: Michael Murй and Danny Robson.
Danny Robson is in charge for several new features. The first part of his work was implementing blending of exposures into HDR, support for loading and saving RGBE and several tonemapping operations: reinhard05, fattal02, mantiuk06. Exposure blending is based on well known algorithms: calculation of response curve with robertson03 and exposure blending with debevec97. For testing purposes a simple console tool was written (tools/exp_combine). The tonemapping operations are well known to any Qtpfsgui/Luminance HDR users as well.
With complete support for exposures merging, loading/saving of RGBE and OpenEXR, as well as tonemapping, GEGL gets the basic featureset required by HDR production tools and VFX solutions. Further work might involve using align_image_stack from Hugin for intelligent alignment of source images and support for more HDR file formats.
The second part of Danny's work was implementation of "A Closed Form Solution to Natural Image Matting" paper by Anat Levin et al. In digital imaging matting refers to creating selections of objects to assist separating them from background. The operation takes two inputs: an original image and a so-called tri-map: an image that defines known foreground, known background, and unknown parts of the image. To boost performance a Levels parameter was implemented; what it does is downsampling original image, so that you work on a smaller version, and the changes are then propagated on the full-resolution version. It's very much like working on mipmaps or proxy editing in NLEs.
The industry hasn't quite finished with this topic: even Photoshop CS5 got a "Refine Edge" feature. For GIMP an interactive tool for selecting objects in the foreground has been available since v2.4 released in 2007. It was subseqently improved during GSoC2009 when a selection refinement brush was implemented, but sadly the code hasn't been merged yet for being unfinished by the student. When GIMP becomes completely GEGL-based, it will be quite interesting to see how exactly matting will be implemented.
If you want to know more details and see examples, Danny wrote a very extensive explanation of his GSoC project here. The page covers both support for RGBE, HDR merging, tonemapping and matting.
The GSoC project by Michael Mure has already been discussed in the past. The new Cage transform tool in upcoming GIMP 2.8 is based on map-absolute GEGL operation written specifically for the tool (the algo comes from "Green Coordinates" paper published at SIGGRAPH 2008). Some bits of this code can later be used to create an interactive version of iWarp filter (similar to Liquify tool in Photoshop).
Mukund Sivaraman, who some of you know as co-maintainer of Graphics Planet, implemented loaders and savers for JPEG2000 (based on libjasper) and PPM (a quite usual file format in VFX pipelines).
A couple of new operations, mirrors and whirl and pinch, were implemented by Alexia (GIMP developer in charge for painting related features) and Barak Itkin.
Once thing worth noting is that the project seems to be gaining more love lately: Andy Gill joined the project recently to port some existing GIMP filters to GEGL operations and metaoperations. He started with a simplified version of Grid Render filter (available n 0.1.4) and proceeded with ports of various blurs (to be merged later). There's stil a lot of work to do, so if you are interested to help, don't hesitate to join gegl-developer mailing list.
The new operations written by Danny (except HDR merging and probably matting), Alexia, Barak and Andy will be immediately available to GIMP users via experimental GEGL tool. But that means you have a new version of GEGL compiled and installed. For Windows users this mostly likely means waiting for release of GIMP 2.7.2.
Finally, more work has been put into making GEGL thread-safe. Still, a lot more work has to be done yet, and two more branches need some love as well: the GPU branch (a GSoC2009 project) and pluggable-buffer branch.
A new version of babl was released alongside GEGL. One thing worth mentioning here is that the new version features support for n-component formats. Apart from other interesting uses it means foundation of DeviceN support in the future.