I thought I'd come back and give a quick update as to what I found.
I can now successfully undistort HazCam images using a slight variation on the methods given by Gennery in his paper and the help from the MARSCAHV program. At the moment, it projects points to and from a planar surface, rather than the ovoid shape that's mentioned. I had the most difficulty trying to compute theta (the angle from the shifted optical centre c' to the actual point in 3D space) -- in the end, I decided to discard this and use the initial approximation for theta, since the Newton's Method solution doesn't seem to want to converge for me for all points (I haven't checked yet, but I suspect it's points towards the edges of the image that are causing the most problems).
You can see the results of this in the image below:
The implementation is reasonably simple (and surprisingly quick for 1024x1024 pixel destination images):
- For each pixel in your corrected image, calculate the vector r from section 6.2
- Then, compute the corresponding pixel coordinate in the source image using the calculations for x_hat and y_hat in sections 5 and 3.
- You can then bilinearly interpolate to get the pixel value in the new image.
For me, these results are good enough -- I'm using them primarily to compare with another calibration method. Hopefully this might be of some use for others who are interested in using the HazCam images -- apparently it's necessary for the stereo depth computations...