Open Source Camera For Computational Photography
David Orenstein writes "Stanford Computer Science researchers are developing Frankencamera, an open source, fully programmable and finely tunable camera that will allow computational photography researchers and enthusiasts to develop and test new ideas and applications — no longer limited by the features a camera manufacturer sees fit to supply. Disclosure: The submitter is a science writer for Stanford and wrote the linked article."
http://sdk.nikonimaging.com/apply/
D5000, D3x, D90, D700, D40, D60, D3, D300, D200, D80
And NEF (RAW) files
i wish i could stop
The Canon lens-to-camera communication protocol has been reverse-engineered for a while. Manufacturers like Sigma and Tamron are making (very good) lenses compatible with Canon (and everyone else's) bodies.
The existence of prior art doesn't mean we shouldn't try and do it better. There's plenty of related work and similar projects.
We're aware of chdk (and have used it for a bunch of stuff), and it's close in some respects, but it's not the same thing. Chdk doesn't turn your camera into a fully functioning linux box, which is part of what we're trying to do, though this has also been done before sans viewfinder (www.elphel.com). You can plug random stuff in over USB, you can control the sensor with extremely low latency (by hacking the kernel if all else fails), you can ssh in, you could even run a web-server off your camera if you wanted to like the elphel cameras. Last week I plugged an SSD drive in over USB (alas no sata interface yet) to save off raw data faster. It's a fairly standard linux so it just worked.
You also have a lot more compute than you might get in something like chdk. You have access to a unified shader architecture GPU, a DSP, a CPU with an SSE-like vector coprocessor, and a fixed-function set of image processing tools (like histogram generation).
The other half of what we're trying to do is make a really good API for a programmable camera, including stuff for synchronization of multiple external devices (eg flashes), optimized image processing routines, frame-level control of the sensor at high frame rates, and camera user interface stuff, including physical widgets like buttons and dials (we use a phidgets board for this).
- Andrew (One of the grad students working on the frankencamera)
I hear you - we want the same thing. Our target is basically a Nokia N900 (which covers 1, 2, 3, 4 and runs linux to boot), plus a much higher quality sensor and lens.
- Andrew (one of the grad students working on the project).
It's not a Nokia imaging chip, it's just the one that happens to be used in Nokia N95s. Aptina makes it and sells it to anyone who wants one. They do make you sign an NDA to get the full data sheet, but that's pretty much impossible to avoid.
As the poster above mentioned, Canon lenses have been thoroughly reverse-engineered.
The lenses would be fairly easy to swap out for a different optical system - we communicate with the lens controller over a simple serial link. The sensor is more involved - for one you'd need a linux kernel driver for your new sensor. Also, it's a pain to properly mount a sensor and get the all support circuitry working. None of it is secret or proprietary though, beyond the NDA you usually need to sign to get the register map for the sensor you want to use.
- Andrew (one of the grad students working on the project)
Computational photography is the accepted term for this subfield of computer graphics and computer vision: http://lmgtfy.com/?q=computational+photography
Secondly, we're not making an open source camera OS for existing hardware, we're making camera hardware that runs an existing open source OS - linux - with particular drivers and APIs to help you program the camera.
We're very well aware of CHDK and have used it for many projects. This is not like that (I have an earlier post that elaborates above).