15463 Final Project by Scott Shih-yu Wang

A Web Interface to Create A Response Functions' Database of
Different Cameras and Its Applications

PowerPoint Slide!

Proposal:

Create a web page, let users upload several images taken with different exposure times like the image set below:
Image from Reference 1.

Then the system will use the uploaded image set to recover the camera's response function like this:
Image from Reference 1.

After the response curve is recovered, store it into the response curve database and use the information in the image's EXIF data to distinguish the curves between different cameras. Once we have the response functions, another user can simply adjust the image taken by the same camera's exposure by using the matching response function we have in the database, or it can even simulate the photo taken by another camera whose curve is also in the database.

Current Status:

Here's some information for the current server and its running environment:

Mac OS X 10.4.8 Tiger / 1.2 GHz PowerPC G4 / 768 MB DDR SDRAM
Apache 2.2.2 (Unix) + mod_python 3.2.10
Python 2.3.5 + NumPy 1.0 + Python Imaging Library 1.6

Here's the look of the main page:





The "Create Curve" Page:



Some sample response curve recovered by the system (smoothness factor=50):
FUJIFILM FinePix S5500 RICOH GR Digital NIKON D70s
Y-axis is pixel brightness(0~255); X-axis is ln(exposure); plots are from MATLAB
The method of picking pixel locations needs to be improved to achieve better results.
Another issue is that the cameras' auto white balancing under different lighting might disrupt the result.
Basically the recovering method followed the MATLAB code given in Reference 1. and then is adapted to Python code

The "Create HDR" Page:



After the processing is done...



You can choose to download the .hdr image (RGBE format),
or you can use another camera's response curve to convert the radiance map back to an 8-bit LDR image.

The HDR creation process is very slow especially with large image inputs because it does pixel-by-pixel operation.
The radiance map created here is actually like the RAW images files taken by professional digital cameras.
Given a jpeg file, we inverse the response process and recover it's raw data.
And the map back process is extremely slow because it contains a nested loop currently and it still has some bugs.
Here is the example of the map back function:

Input radiance map (compressed to show on the screen):

FUJIFILM FinePix S5500 Curve RICOH GR Digital Curve NIKON D70s

Where is the page located?

Here's a link to the page:
http://lunastorm.dyndns.org:8080/python/interface.py
It's running on my laptop, so don't expect it's fast and always reachable.

References:

1. Debevec, P. E., and Malik, J. 1997. Recovering high dynamic range radiance maps from photographs. In Proc. ACM SIGGRAPH 97.


Page by Scott Shih-yu Wang Dec.15 2006