Single Pixel Camera

24 January, 2011

What is a camera?

In the broadest sense, cameras turn the light around them into an image. No matter if the camera is digital or analog, the appearance of that image is determined by the same set of factors: how much light is allowed into the camera, how sensitive the apparatus is, how the lens focuses the light, and how long the light is allowed to accumulate.

Most cameras, from the most expensive digital SLRs to homemade pinholes, cluster around the same range of values for these factors. They allow a small amount of light into a very sensitive sensitive sensor through sharp optics for a short amount of time.

But what if you chose a radically different set of values? For example, what if you made the camera incredibly insensitive, but then let it build up an image over an extremely long period of time to compensate? This is somewhat like what a pinhole camera does in comparison to a DSLR, but what if you went a lot further in that direction?

If you went far enough, you might hit the follow reducto ad absurdum: a camera with a single pixel that moves around step-by-step in order to form a full image.

Single Pixel Arduino Camera

I built this "camera" by attaching a TAOS light sensor to two servos. I programmed an Arduino to scan the servos in a grid pattern while reading the light value from the TAOS sensor at each point along the grid.

To my great surprise, the image formed is actually somewhat readable: you can start to see the side of the table and the floor that were in front of the apparatus. Because the image updates so slowly it ends up being a combination of the different things that happened to be in front of it at different times. Also, because the servos move the sensor in a kind a curved grid, the space of the image is highly non-square. Finally, since there's only the most primitive lens on the sensor, the image has a soft quality despite its ultra-low resolution pixellation.

Obviously, this version of a Single Pixel Camera is extremely primitive (it was built in a single class period on the last day of last semester), but I think it's an interesting topic with intriguing aesthetic possibilities that I'd like to explore further in the future. I've included the Arduino and processing code below if you'd like to experiment yourself.

Arduino firmware:

Processing sketch source: