GSoC/GCI Archive
Google Summer of Code 2012

OpenImageIO

Web Page: http://github.com/OpenImageIO/oiio/wiki/GSoC-Idea-Page

Mailing List: http://lists.openimageio.org

OpenImageIO is a library for reading and writing images, and a bunch of related classes, utilities, and applications.  There is a particular emphasis on formats and functionality used in professional, large-scale animation and visual effects work for film.  OpenImageIO is used extensively in animation and VFX studios all over the world, and is also incorporated into several commercial products.
Main features include:
  • Extremely simple but powerful ImageInput and ImageOutput APIs for reading and writing 2D images that is format agnostic -- that is, a "client app" doesn't need to know the details about any particular image file formats. Specific formats are implemented by DLL/DSO plugins.
  • Format plugins for TIFF, JPEG/JFIF, OpenEXR, PNG, HDR/RGBE, Targa, JPEG-2000, DPX, Cineon, FITS, BMP, ICO, RMan Zfile, Softimage PIC, DDS, SGI, Maya IFF, PNM/PPM/PGM/PBM, Field3d, WebP, Photoshop PSD, Wavefront RLA. More coming! The plugins are really good at understanding all the strange corners of the image formats, and are very careful about preserving image metadata (including Exif, GPS, and IPTC data).
  • An ImageCache class that transparently manages a cache so that it can access truly vast amounts of image data (thousands of image files totaling hundreds of GB) very efficiently using only a tiny amount (tens of megabytes at most) of runtime memory. Additionally, a TextureSystem class provides filtered MIP-map texture lookups, atop the nice caching behavior of ImageCache.
  • An ImageBuf class that makes it easy to deal with whole images, and a whole bunch of image processing algorithms that operate on them.
  • Several image tools based on these classes, including iinfo (print detailed info about images), iconvert (convert among formats, data types, or modify metadata), idiff (compare images),igrep (search images for matching metadata), and oiiotool (Swiss army knife tool that does practically everything). Because these tools are based on ImageInput/ImageOutput, they work with any image formats for which ImageIO plugins are available.
  • A really nice image viewer, iv, also based on OpenImageIO classes (and so will work with any formats for which plugins are available).
  • C++ and Python bindings.
  • Supported on Linux, OS X, Windows, and FreeBSD.
  • All available under the "new" BSD license, so you may modify it and use it in both open source or proprietary apps.

 

Projects

  • Add image processing algorithms to OpenImageIO I propose many image processing algorithms to be added to OpenImageIO. I have already implemented, tested and documented the algorithms, but many modifications are needed before they are accepted. The main categories are histograms, point operations, filters, edges, corners, lines and morphological operations. The modifications needed are working with image regions, using more threads, working with images with arbitrary number of channels, using arbitrary pixel data values, working in 3D, etc.
  • Image processing algorithms based on solving Poisson equations. My proposal is to add a set of image processing algorithms based on solving Poisson equations to the imageBufAlgo namespace.