Computational photography refers broadly to sensing strategies and algorithmic techniques that enhance or extend the capabilities of digital photography. Representative techniques include high dynamic range imaging, flash-noflash imaging, coded aperture and coded exposure imaging, photography under structured illumination, multi-perspective and panoramic stitching, digital photomontage, all-focus imaging, and light field imaging.
Although interest in computational photography has been increasing, progress has been retarded by the lack of a portable, programmable camera with enough image quality and computing power for everyday photography. To address this problem, we have designed an open architecture for such cameras. Our architecture consists of a hardware specification, a software stack based on Linux, and an API with bindings for C++. Our architecture permits control and synchronization of the sensor and image processing pipeline at the microsecond
time scale, as well as the ability to incorporate and synchronize external hardware like lenses and flashes. We have also built two reference implementations: a Nokia N900 smartphone with a modified software stack, and a camera of our own design that accommodates SLR lenses and SLR-quality sensors. The latter is big and ugly - hence the name Frankencamera.
In this talk, I'll briefly survey the field of computational photography, I'll enumerate the characteristics we believe any open-source camera should have, and I'll describe our architecture, API, reference implementations, and first round of applications. Our immediate goal is to distribute this platform to computational photography researchers and students worldwide. Our long-term
goal is to spur the growth of an open-source camera community, leading
eventually to commercial cameras that accept plugins and apps.