Computational cameras use unconventional optics and software to produce new forms of visual information, including wide field-of-view images, high dynamic range images, multispectral images, and depth images. Using a controllable optical system to form the image and a programmable light source as the camera's flash can further enhance the capabilities of these cameras.