How to write a .cal file for fisheye lens distortion

Hello everybody,
I’m trying to create the .cal file to do the fisheye lens projection distortion. I have a Sigma 4.5mm and f2.8. The manufacturer points out that it is an equisolid projection lens. I’d like to make the distortion to an equidistant -vta, but I’m having trouble creating the file. I do not know how to do it. I just know that it is a file with a .txt extension that must be changed to a .cal extension. I don’t know how this file should be written. Could someone explain it to me in detail? Thank you in advance.

Hi Eliana,

The file should be installed with the standard distribution, and can be accessed without specifying the full path using:

pcomb -f -o fisheye.hdr > corrected.hdr

This is explained in the comments at the top of, which should be installed in your Radiance library folder, wherever that is on your system.

Hope this helps!

Thank you very much for the help, it works now.

Yours sincerely


Hi @Greg_Ward,

Thanks for answering the same question.

Does the file work on all lens type? As far as I understand, different lenses may need different correction functions (Section 2.3.4 of this paper) so I am not sure this command will universally apply.

Just a bit more context, the lens I have is ArduCam LN074 fitted on RPi High Quality camera.


No, as the file comments state, you can define your own radius mapping function. Here are the comments:

        Correct fisheye image using a distortion function:

                rad(r) =        function of r in [0,.5] range, returing same

        This function takes the pixel distance from the image center, where
        1.0 is the full width of the image constituting 180-degrees of view.
        The output is the corrected distance from the center for the output.
        (If your function is the inverse of this, set map_inverse=1.)

                pcomb -f -e 'rad(r)=my_function(r)' \
                        -o fisheye.hdr > corrected.hdr

        We also clear the region outside the r=[0,.5] circle to black.
        If this is all you want to do, use "rad(r)=r".

        If you know you have a solid-angle preserving distortion, use
        "rad(r)=mapsolid(r)" or leave off definition, as this is the default.

I hope this helps.

P.S. I should add that the tabfunc program with the -i option is a good way to create a mapping function from measurements.

1 Like

Thanks @Greg_Ward for your help!

And it was nice seeing you in person this Wednesday!