FPN calibration

How to calibrate a uEye camera with PYTHON sensor

This application note affects the following camera models: UI-3130CP Rev.2, UI-3140CP Rev. 2, UI-3160CP Rev. 2, and UI-3180CP Rev.2.

Which camera models are affected?

Note that only models are affected that have a lower serial number than listed in the table:

Model

Up to serial number (monochrome)

Up to serial number (color)

UI-3130CP Rev. 2

4103039876

4103029919

UI-3140CP Rev. 2

4102866773

4103078619

UI-3160CP Rev. 2

4103099008

4103089849

UI-3180CP Rev. 2

4103079023

4103091599

You can also check in the IDS Camera Manager if you can calibrate the camera yourself:

1. Open the IDS Camera Manager.
2. Select the camera.
3. Click on “Camera information”.

If your camera displays either “uncalibrated” or “calibrated” under “FPN calibration”, you can calibrate it. If “Factory calibrated” is displayed or the “FPN Calibration” area is not visible, your camera model is not affected.

Why should I calibrate my camera?

Some sensors have a fixed-pattern noise (FPN) which often gets more noticeable with increasing image brightness. This causes visible vertical lines in the image. If you see such lines, you should calibrate the camera.

Checking the settings

1. Open the camera in uEye Cockpit (or uEye Demo under Linux)
2. Reset the camera to default values (menu entry under “uEye > Reset to defaults”).
3. Set the exposure time to 5 ms (see “Properties > Camera > Exposure time”).
4. Set all gains (master and RGB gains) to a factor of 1.0 by moving the corresponding sliders to their leftmost position (see “Properties > Image > Master gain” and “Properties > Image > Color gain”). So the gains are disabled.
5. Deactivate gamma (see “Properties > Image > Gamma”).

6. For color models: Disable the color correction (see “Properties > Color tab > IR color filter correction matrix”).
7. Check the histogram (menu entry under “View > Histogram”) and enable logarithmic scaling of the vertical axis by checking the “Logarithmic” option. For color models, only the green channel is relevant.

The bell-shaped peak (for color cameras: only the peak corresponding to the green color channel) should be in the right-most portion of the histogram and still be fully visible (i. e., no clipping/cutting away on its right tail).

The peak should be as symmetric and narrow as possible indicating a homogeneous illumination of the camera.

8. Change the brightness of the incident light and the way of lighting until the above-mentioned properties are set in the histogram.
9. Load the LUT (see Appendix: FPN_lut.xml). Check the image.

With the LUT enabled, a wave-like pattern in the image likely indicates that the illumination is not homogeneous. Ideally, the image does not display any kind of repeating pattern. Change the position of the camera with respect to the light source until the display of the uEye
Cockpit matches the example above (left). In case there still is some wave-like pattern visible in the uEye cockpit, rotate the camera such
that the stripes run horizontally. Avoid a diagonal or even a vertical orientation of the stripes. It may be possible that the original fixed pattern noise of the sensor becomes quite prominent in the LUT-enabled image. Those stripes always run from top to bottom and are fixed in position. Do not confuse them with any wave-like pattern from inhomogeneous illumination.

10. In the uEye Cockpit, close the camera.
11. Do not change the position of the camera nor the lighting situation.

Possible errors

  • Lighting error (dialog) --> the sensor gets too much/little light or the illumination is too inhomogeneous.
  • Other error (dialog) --> if this error occurs repeatedly, contact the IDS Machine Vision Consulting.

Appendix: FPN_lut.xml

<?xml version="1.0" encoding="utf-8"?>
<CameraLUT>
	<NumberOfEntries>64</NumberOfEntries>
	<ChannelsEqual>1</ChannelsEqual>
	<All>
		<Value_0>0</Value_0>
		<Value_1>1</Value_1>
		<Value_2>1</Value_2>
		<Value_3>0</Value_3>
		<Value_4>0</Value_4>
		<Value_5>1</Value_5>
		<Value_6>1</Value_6>
		<Value_7>0</Value_7>
		<Value_8>0</Value_8>
		<Value_9>1</Value_9>
		<Value_10>1</Value_10>
		<Value_11>0</Value_11>
		<Value_12>0</Value_12>
		<Value_13>1</Value_13>
		<Value_14>1</Value_14>
		<Value_15>0</Value_15>
		<Value_16>0</Value_16>
		<Value_17>1</Value_17>
		<Value_18>1</Value_18>
		<Value_19>0</Value_19>
		<Value_20>0</Value_20>
		<Value_21>1</Value_21>
		<Value_22>1</Value_22>
		<Value_23>0</Value_23>
		<Value_24>0</Value_24>
		<Value_25>1</Value_25>
		<Value_26>1</Value_26>
		<Value_27>0</Value_27>
		<Value_28>0</Value_28>
		<Value_29>1</Value_29>
		<Value_30>1</Value_30>
		<Value_31>0</Value_31>
		<Value_32>0</Value_32>
		<Value_33>1</Value_33>
		<Value_34>1</Value_34>
		<Value_35>0</Value_35>
		<Value_36>0</Value_36>
		<Value_37>1</Value_37>
		<Value_38>1</Value_38>
		<Value_39>0</Value_39>
		<Value_40>0</Value_40>
		<Value_41>1</Value_41>
		<Value_42>1</Value_42>
		<Value_43>0</Value_43>
		<Value_44>0</Value_44>
		<Value_45>1</Value_45>
		<Value_46>1</Value_46>
		<Value_47>0</Value_47>
		<Value_48>0</Value_48>
		<Value_49>1</Value_49>
		<Value_50>1</Value_50>
		<Value_51>0</Value_51>
		<Value_52>0</Value_52>
		<Value_53>1</Value_53>
		<Value_54>1</Value_54>
		<Value_55>0</Value_55>
		<Value_56>0</Value_56>
		<Value_57>1</Value_57>
		<Value_58>1</Value_58>
		<Value_59>0</Value_59>
		<Value_60>0</Value_60>
		<Value_61>1</Value_61>
		<Value_62>1</Value_62>
		<Value_63>0</Value_63>
	</All>
</CameraLUT>