 # vignetting correction on a fish-eye image

Dear list,

I am trying to implement a vignetting correction on a fish-eye image
taken with a rather inexpensive lens (Opteka 0.20 for Canon A570).

This is for a Post Occupancy Evaluation of an open plan workspace
using HDR at a number of workstations (n = ~15), paired with subjective
measures. (Thus the inexpensive camera + lens).

I am using Mehlika Inanici and Jim Galvin's method to derive a
polynomial from experimentation
to characterize the vignetting effect of my camera+lens at a given f-stop.

(EVALUATION OF HIGH DYNAMIC RANGE PHOTOGRAPHY
AS A LUMINANCE MAPPING TECHNIQUE, 2004)

"The vignetting effect is calculated as a polynomial function as
follows (x corresponds the pixel location):"
y = -1.28E -12 * x 4 + 3.43E - 09 * x3 - 3.38E - 06 * x2 +1.45E - 03 *
x + 7.70E - 01

Assuming the function that i derive is similar to the one above:

***I am curious how to develop a Radiance-based post-process from
this polynomial function to arrive at a script that will take a HDR
image and apply a vignette correction.

Below is Greg's implementation, but i am confused as to where to
apply/insert the polynomial function. (Or if an entirely different method is
being used here, since to me this is pretty cryptic).

···

#####################################################
# From NY Times acquisition cart (Sigma lens)

pcomb -e 'sq(x):x*x' -e \
'SigmaVig5_6(deg) : 0.97 + (0.5 + atan(0.1*deg - 4)/PI)*(0.38 -
0.0134*deg)' \
-e 'xne = x/xmax - .5; yne = y/ymax - .5' \
-e "deg_cent = 90*sqrt(sq(2/\$vfrac*xne) + sq(2/\$vfrac*yne))" \
-e 'corr = if(deg_cent-95, 0, 1.0/SigmaVig5_6(deg_cent))' \
-e 'ro=corr*ri(1);go=corr*gi(1);bo=corr*bi(1)' \
-o \$hdrf \
> pcompos -x \$new_res -y \$new_res \=00 - \
`ev "floor(\$new_res/2)" "floor(\$new_res/2)"` \
> /tmp/corr\$\$.hdr

#####################################################

I would appreciate any guidance that anyone may have!

One suggestion that I have received is to create a "filter" image with
the same resolution as my uncorrected image. The filter image will have
numbers 1 in the middle (meaning no vignetting) and the numbers drop
towards the periphery as measured and recorded.

Then I would use pcomb to divide the original image with the "filter"
to correct for the light loss.

Any suggestions (sample code!) to create this filter image in Radiance
from the above polynomial
function would also be appreciated!

best,

Kyle Konis
Ph.D Student
UC Berkeley

Hi!

***I am curious how to develop a Radiance-based post-process from
this polynomial function to arrive at a script that will take a HDR
image and apply a vignette correction.

All you have to do is to multiply your pixel values by your f(x) with x being the radius to the center. This can be done just using pcomb. Make sure to include the -o switch to eliminate any display settings (exposure etc).

Be aware that "center" is the optical axis and not necessarily the center of the sensor, so you must find out the pixel position of it.

Cheers

Lars.

Hi，
How to find out the pixel position of the optical axis ? I used to regard the center of the image as the ‘center’ , which may cause error . Any reply is appreciated. Thanks !