High Dynamic Range Imaging

R96944043 PB



One of the picture from the images of different exposures
Exposure time 1/20 sec

The final image from my project #1 by Robertson method
tone mapping by PhotoMatrix


Project #1

High dynamic range (HDR) images have much larger dynamic ranges than traditional images' 256 levels. In addition, they correspond linearly to physical irradiance values of the scene.

1.Taking photographs

I take series of pictures with different exposures by using the SONY Cyber-shot DSC-W200 with a tripod.

2.Write a program to assemble an HDR image

Program brief:

Stand-alone executable program created & compiled by visual c++ 2005, HDR.exe with library zlImageLib , zlCore, zlGDIRDev , gsl , jhead

I read the external data by using a HDR.ini file which define as follow:

//Weight table
Weight Triangle
Weight Gauss

//Method used to Recover Radiance map
Method Robertson
Method Debevec

//Source image, auto discover exposure time from EXIF of jpg
Image DSC01218.JPG
Image DSC01219.JPG

//tonemap parameter
ToneExposure 1
ToneScalar 0.8

//for output filename
Response response.txt
HDRImage image.hdr
ToneImage tonemap.hdr

Processing of HDR.exe:

exposure time 1/2 sec

exposure time 1/20 sec

Gauss weight table

Paul Debevec's method:
I translate his matlab code into c++ code, and using GSL to solve SVD problem.

other image created by Paul Debevec's method

Robertson's method:

Response curve by Robertson's method

3.Develop your radiance map using tone mapping

I use Photographic Tone Reproduction:

Find luminance by the following equation:

Source pictures

Radiance Map

Recovering HDR Radiance Maps by Robertson's Algorithm in this case.

Final Image

Apply tone mapping by Photomatrix

Other artifact

Problem Found

If the intensity of pictures with different exposures are almost the same, we can found some black holes like the following image. I found that both Paul Debevec's method and Robertson's method have the same problem.

I check each pixel of Radiance Maps in RGB channel, if the value is 0, then i check the same pixel of source images. If the intensity of the source image is greater then 128, then i reset the pixel value of Radiance Maps to maximum. the result