Up one Panoramic camera project. By Lee Davison. Up to top

Preamble.
For now this is just an idea. The problem with a project like this is it's not obvious whether it's worth doing until you've done it. By then it's a bit late! So with the (probably vain) hope that someone will be inspired .....
Introduction.
Much as I like taking panoramic pictures in segments and then stitching them together it is a rather labourious process. What I hope to do is build a camera, using a linear image sensor, that can take full, 360 degree plus, images in one go.

Prototype clock driver So far I have two RGB linear CCD arrays from scrapped flatbed scanners, one 2700 pixel (Sony ILX524) and one 5300 pixel (Sony ILX535), and a hastily thrown together clock circuit to test them (picture right).

This will not be part of the final circuit, in that all the clock waveforms will be generated by a microprocessor, but was built just to try out the sensors and see if I could get them to work.

So far, using the 2700 pixel sensor, I've managed to replicate the waveforms from the datasheet and got active video out from each of the Red, Green and Blue lines.

Start of line scan
As measured Individual cycle
As measured

The above traces can be compared with the idealised waveforms from the datasheet. (The noise on the upper trace in both images is caused by pick up on one of my cheap 'scope probes.)

Line scan
From datasheet Individual cycle
From datasheet

The optical path length of the scanner was about 30cm with a field of view width of about 22cm. This gives a view angle of about 40 degrees vertical which, assuming square pixels, means 1/9th of a complete panorama will be 2700 pixels. So a complete panoramic scan with a small overlap will be of the order of 25650 x 2700 pixels (equivalent to a 66 megapixel camera) which will take about 200MB to store the raw bitmap!

I can already see memory and bandwidth problems. Even buffering the current line will take 2700*3 = 8100 bytes and, as the Red, Green and Blue sensor lines are four pixels apart, you'll really want to buffer four lines, which is 32400 bytes, or even eight lines (for first to third line) which is 64800 bytes.

That won't include any memory you'll need for buffering the data to/from the host system, calculation memory (for exposure, black level etc.), general variables and so on. Hmmmmm this is going to take some serious onboard memory (I was planning to use an 8 bit micro, I may use a 16/32 bitter now).



Last page update: 30th July, 2003. e-mail me e-mail