Pixel Beyond#

The Pixel Beyond camera feature allows you to reduce the resolution of the images output by the camera.

This feature is similar to the Binning feature, but allows a more granular adjustment of the resolution.

For more information, see the feature description on the Basler website.

Using the Feature#

Why Use Pixel Beyond#

The Pixel Beyond feature works similar to the Binning feature. The camera combines the pixel values of neighboring pixels. This effectively reduces the resolution without changing the field of view.

Depending on your application and the characteristics of the image sensor, this may provide the following benefits:

  • Increased response to light
  • Reduced amount of data
  • Increased frame rate
  • Improved signal-to-noise ratio (SNR)
  • Ability to simulate the resolution of a different sensor. This allows you to, e.g., replace a discontinued sensor without redesigning your vision system.

While the Binning feature only allows you to reduce the resolution in integer steps (using, e.g., 2x2 or 3x3 binning), the Pixel Beyond feature lets you adjust the resolution using a float scaling value. This provides more flexibility.

Also, unlike with other scaling algorithms, the EMVA data of the resulting images is not affected by the interpolation.

Configuring Pixel Beyond#

To configure Pixel Beyond:

  1. Make sure that the camera is idle, i.e., not capturing images.
  2. If your camera is a color camera, set the pixel format to a non-Bayer color pixel format, i.e., to one of the available RGB, BGR, or YUV pixel formats.
  3. Set the BslScalingFactor to a value between 1.0 and 2.8.

With a factor of 1.0, the image resolution stays the same. A factor greater than 1.0 reduces the width and height of your images proportionally:

  • Width * (1 / BslScalingFactor) = Scaled Width
  • Height * (1 / BslScalingFactor) = Scaled Height

Example: Assume the width of the image ROI is set to 1936 and you set the scaling factor to 1.75. The width of the images output by the camera will be 1936 * (1 / 1.75) = 1106.

Info

Depending on the camera model, values are rounded differently. Therefore, the effective image size may differ from the image size calculated.

Calculating the Scaling Factor#

Image Size

If you want to scale images to a specific size and need to know the scaling factor, use the following formula:

Width / Desired Width = BslScalingFactor

Because scaling is always performed proportionally, you only need to specify the width.

Example: Assume the image ROI is 1936 x 1216 and you want to scale images to 800 x 600. The appropriate scaling factor is 1936 / 800 = 2.42.

Pixel Size

If you want to replace a discontinued sensor with a specific pixel size and need to know the scaling factor, use the following formula:

Previous Sensor Pixel Size / Current Sensor Pixel Size = BslScalingFactor

Example: Assume you want to replace an ICX424 sensor with a pixel size of 7.4 µm with the IMX392 sensor of the a2A1920-51gcPRO (3.45 µm pixel size). The appropriate scaling factor is 7.4 / 3.45 = 2.14.

Sample Code#

// Set scaling to 1.5, i.e., set the resolution
// to (1 / 1.5) = 66 % of the original resolution
camera.BslScalingFactor.SetValue(1.5);
// Disable scaling
camera.BslScalingFactor.SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set scaling to 1.5, i.e., set the resolution
// to (1 / 1.5) = 66 % of the original resolution
CFloatPtr(nodemap.GetNode("BslScalingFactor"))->SetValue(1.5);
// Disable scaling
CIntegerPtr(nodemap.GetNode("BslScalingFactor"))->SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set scaling to 1.5, i.e., set the resolution
// to (1 / 1.5) = 66 % of the original resolution
CFloatParameter(nodemap, "BslScalingFactor").SetValue(1.5);
// Disable scaling
CIntegerParameter(nodemap, "BslScalingFactor").SetValue(1);
// Set scaling to 1.5, i.e., set the resolution
// to (1 / 1.5) = 66 % of the original resolution
camera.Parameters[PLCamera.BslScalingFactor].SetValue(1.5);
// Disable scaling
camera.Parameters[PLCamera.BslScalingFactor].SetValue(1);
// Set scaling to 1.5, i.e., set the resolution
// to (1 / 1.5) = 66 % of the original resolution
Pylon.DeviceSetFloatFeature(hdev, "BslScalingFactor", 1.5);
// Disable scaling
Pylon.DeviceSetIntegerFeature(hdev, "BslScalingFactor", 1);
/* Macro to check for errors */
#define CHECK(errc) if (GENAPI_E_OK != errc) printErrorAndExit(errc)
GENAPIC_RESULT errRes = GENAPI_E_OK;  /* Return value of pylon methods */
/* Set scaling to 1.5, i.e., set the resolution */
/* to (1 / 1.5) = 66 % of the original resolution */
errRes = PylonDeviceSetFloatFeature(hdev, "BslScalingFactor", 1.5);
CHECK(errRes);
/* Disable scaling */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslScalingFactor", 1);
CHECK(errRes);

You can also use the pylon Viewer to easily set the parameters.