MATRIX VISION - mvBlueCOUGAR-X/-XD Technical Documentation
Working with the dual gain feature of mvBlueCOUGAR-XD107/XD1031 and mvBlueCOUGAR-X102m/X107

Introduction

The IMX420/425/428 used in the mvBlueCOUGAR-XD107/XD1031 and mvBlueCOUGAR-X102m/X107 are Pregius sensors of the third generation.

Those sensors feature a dual gain mode, i.e. after a trigger event, for example, different image areas can be amplified at the same time differently.

To activate the dual gain mode it is necessary to enable the multi area mode by using the mvMultiAreaMode property. At least two different AOIs have to be defined.

Note
Both AOIs must not overlap or touch each other!

Once the AOIs are configured the GainSelector has to be set to one of the new implemented options called mvHorizontalZone0 and mvHorizontalZone1.

The gain value of the different zones can be specified using the "Gain Selector". And the corresponding gain property. Possible zones are

  • mvHorizontalZone0
  • mvHorizontalZone1

If this mode is selected you can set the "mv Gain Horizontal Zone Divider". This property indicates where the zones are divided horizontally once more than two AOIs are configured. In this case the e.g. 25% means that the upper 25% of the image are defined by the gain value of mvHorizontalZone0 and the lower 75% are defined by the gain value of mvHorizontalZone1.

Note
Some sensors may only allow to change the gain at certain positions e.g. the last line of a defined ROI. In this case the first possible switching point above the actual line will be used.

Setting the dual gain using wxPropView

To activate the dual gain, just

  1. Use the Multi AOI Wizard to adjust the different AOIs. (They must not overlap or touch each other!)
  2. Select mvMultiZone in "Setting -> Base -> Camera -> GenICam -> Analog Control -> mvGainMode".
  3. Select mvHorizontalZone0 in "Setting -> Base -> Camera -> GenICam -> Analog Control -> GainSelector".
  4. Adjust the gain value for the first AOI in "Setting -> Base -> Camera -> GenICam -> Analog Control -> GainSelector -> Gain".
  5. Adjust the gain divider position "Setting -> Base -> Camera -> GenICam -> Analog Control -> GainSelector -> mvGainHorizontalZoneDivider".
  6. Select mvHorizontalZone1 in "Setting -> Base -> Camera -> GenICam -> Analog Control -> GainSelector".
  7. Adjust the gain value for the second AOI in "Setting -> Base -> Camera -> GenICam -> Analog Control -> GainSelector -> Gain".
Figure 1: wxPropView - configuring multiple AOIs
Figure 2: wxPropView - configuring the gain of the first zone
Figure 3: Example image with two different amplified zones

Programming the dual gain mode

As an example the IMX425 sensor is used for the sample. The goal is to configure three AOIs which have a similar height. Since the AOIs must not overlap or touch each other, it is important to increase the offset of the next AOI by the smallest increment size. Which is 8 in this case.

#include <mvIMPACT_CPP/mvIMPACT_acquire_GenICam.h>

  // more code
    GenICam::ImageFormatControl ifc( pDev );
    
    ifc.mvMultiAreaMode.writeS( "mvMultiAreasCombined" );

    ifc.mvAreaSelector.writeS( "mvArea0" );
    ifc.mvAreaOffsetX.write( 0 );
    ifc.mvAreaOffsetY.write( 0 );
    ifc.mvAreaWidth.write( ifc.mvAreaWidth.getMaxValue( ) );
    ifc.mvAreaHeight.write( 360 );
    ifc.mvAreaEnable.writeS( "1" );

    ifc.mvAreaSelector.writeS( "mvArea1" );
    ifc.mvAreaOffsetX.write( 0 );
    ifc.mvAreaOffsetY.write( 368 );
    ifc.mvAreaWidth.write( ifc.mvAreaWidth.getMaxValue( ) );
    ifc.mvAreaHeight.write( 360 );
    ifc.mvAreaEnable.writeS( "1" );

    ifc.mvAreaSelector.writeS( "mvArea2" );
    ifc.mvAreaOffsetX.write( 0 );
    ifc.mvAreaOffsetY.write( 736 );
    ifc.mvAreaWidth.write( ifc.mvAreaWidth.getMaxValue( ) );
    ifc.mvAreaHeight.write( 360 );
    ifc.mvAreaEnable.writeS( "1" );

    GenICam::AnalogControl anc( pDev );
    anc.mvGainMode.writeS( "mvMultiZone" );

    anc.gainSelector.writeS( "mvHorizontalZone0" );
    anc.gain.write( 12 );
    anc.mvGainHorizontalZoneDivider.write( 80 );

    anc.gainSelector.writeS( "mvHorizontalZone1" );
    anc.gain.write( 0 );
  // more code