ViewVC Help
View File | Revision Log | Show Annotations | Download File | Root Listing
root/radiance/ray/src/cal/cal/fisheye_corr.cal
Revision: 1.6
Committed: Fri Aug 28 19:39:22 2020 UTC (3 years, 8 months ago) by greg
Branch: MAIN
CVS Tags: rad5R4, rad5R3, HEAD
Changes since 1.5: +1 -11 lines
Log Message:
docs: Updated comment as pcomb now preserves the VIEW= line from header

File Contents

# Content
1 { RCSid $Id: fisheye_corr.cal,v 1.5 2016/09/14 20:39:08 greg Exp $ }
2 {
3 Correct fisheye image using a distortion function:
4
5 rad(r) = function of r in [0,.5] range, returing same
6
7 This function takes the pixel distance from the image center, where
8 1.0 is the full width of the image constituting 180-degrees of view.
9 The output is the corrected distance from the center for the output.
10 (If your function is the inverse of this, set map_inverse=1.)
11
12 pcomb -f fisheye_corr.cal -e 'rad(r)=my_function(r)' \
13 -o fisheye.hdr > corrected.hdr
14
15 We also clear the region outside the r=[0,.5] circle to black.
16 If this is all you want to do, use "rad(r)=r".
17
18 If you know you have a solid-angle preserving distortion, use
19 "rad(r)=mapsolid(r)" or leave off definition, as this is the default.
20 }
21 xc : xres/2;
22 yc : yres/2;
23 sq(x) : x*x;
24 map_inverse = -1; { change to 1 if rad(r) is inverse mapping }
25 inp_r = sqrt(sq((x-xc)/xres) + sq((y-yc)/yres));
26 mapped_r = rad(inp_r);
27 rmult = if(map_inverse, inp_r/(mapped_r+1e-7), mapped_r/(inp_r+1e-7));
28 xoff = (x-xc)*(1-rmult);
29 yoff = (y-yc)*(1-rmult);
30 ro = if(.5-inp_r, ri(1,xoff,yoff), 0);
31 go = if(.5-inp_r, gi(1,xoff,yoff), 0);
32 bo = if(.5-inp_r, bi(1,xoff,yoff), 0);
33
34 { Radius adjustment for equisolid-angle projection to equidistant (-vta) }
35 mapsolid(r) : 2/PI*asin(sqrt(2)*r);
36
37 { Default correction function }
38 rad(r) = mapsolid(r);