[Elphel-support] camera image undistortion rectification

support-list support-list at support.elphel.com
Wed Jul 10 13:18:27 PDT 2013


 > a.) For the calibration we use a giant LCD screen  with a chessboard displayed on it, so there is  
 > no problem of the material bend / thermal expansion, etc... 

We used LCD screen for measuring pixel cross-talk (photoelectrons from red pixel migrate to next pixels, green and blue - less so), but thought it is too small for the geometric calibration (we only calibrated fixed-focus lenses)

  
 > b.) Can you please point me to the modell used in your calibration / undistortion process ?  
 >     The one used  on OpenCV and Calib. Toolbox [1] seems unsufficient for this lens. 

We use our own calibration files. Each file (in tiff format) includes metadata with radial distortion model parameters and the image itself is the residual errors (after radial distortion) in X and Y directions, saved with 1/4 resolution. The same file also has the vignetting info (per color component). There is some description/examples in the blog posts.

There are sample calibration files uploaded on our web server, to look at them you may open them using imageJ. Metadata is available if you install our plugins (http://wiki.elphel.com/index.php?title=Elphel_Software_Kit_for_Ubuntu#Installation_of_Elphel_plugins_for_ImageJ ), then in ImageJ select:
Plugins -> Compile and Run -> ImageJ-Elphel -> JP46_Reader_camera.java.
Then open the calibration file (downloaded from http://community.elphel.com/files/eyesis4pi/imagej/sensor_calibration_files/ ), such as c13ff-08.calib-tiff, make sure it is in focus (i.e. click on it) and in the JP46 plugin window click "Decode image info to properties" - that will open parameters and their comments (see example below).


 > c.) All your calibration procedure involves laser points ? Or are you performing calibration 
 >     also using only image information (without laser) ? 

Yes, lasers are used for absolute matching of the periodic target grid to the image (to the nearest grid node) - our software really needs them.

 >  d.) When you say that 'the target is calibrated' you mean that the pattern points position 
 >       is measured with an independent method ? (i.e. for example the real world position of the  
 >       corners of the chessboard). 

Target is calibrated simultaneously with the camera. But when calibrating multi-sensor cameras and single-sensor ones we use the target calibration from the multi-camera system. Eyesis4pi has 2 sensors near the bottom of the tube body, about 850mm from the center of the optical head. That gives higher precision of the target pattern measurements than just from a single camera from multiple positions.

Below is the metadata from the sample sensor calibration file (parameters are in no particular order, unfortunately):
------------
py0    958.7668601641257
height    -0.6207874764096263
subchannel    1
comment_subcamera    number of the subcamera with individual IP, starting with 0
distortionRadius    2.8512
comment_subchannel    number of the sensor port on a subcamera (0..2)
focalLength_units    mm
distortionA8    0.0
elevation    0.4456435396130725
comment_channel    number of the sensor (channel) in the camera
distortionA7    0.0
comment_azimuth    lens center azimuth, CW from top, degrees
distortionA6    0.029856778749971072
distortionA5    -0.04255900732648876
comment_heading    lens heading - added to azimuth
comment_arrays    Array corrections from acquired image to radially distorted, in pixels
comment_radius    lens center distance from the camera vertical axis, mm
px0    1263.8849164543408
VERSION    1.0
pixelCorrectionDecimation    4
pixelCorrectionWidth    2592
comment_elevation    lens elevation from horizontal, positive - above horizon, degrees
focalLength    4.508217484459606
comment_roll    lens rotation around the lens axis. Positive - CW looking to the target, degrees
pixelSize_units    um
comment_height    lens center vertical position from the head center, mm
comment_px0_py0    lens center on the sensor, in pixels
roll    90.94386362046363
distortionC    0.0058847953953892335
distortionB    -0.07076971111019477
distortionA    0.05963687885890879
comment_decimation    when decimation use integer divide to find the index, corection values are in non-decimated pixels
entrancePupilForward    -1.1988297137736406
distortionRadius_unuts    mm
channel    8
azimuth    -0.5805897763960011
heading    -0.7690861475199168
radius    55.496144447474606
subcamera    0
pixelSize    2.2
distortion_formula    (normalized by distortionRadius in mm) Rdist/R=A8*R^7+A7*R^6+A6*R^5+A5*R^4+A*R^3+B*R^2+C*R+(1-A6-A7-A6-A5-A-B-C)
pixelCorrectionHeight    1936
arraysSet    true
comment_entrancePupilForward    entrance pupil distance from the azimuth/radius/height, outwards in mm
maskSet    true





More information about the Support-list mailing list