跳转到内容

Scaling#

相机的 Scaling 功能可让您降低相机输出图像的分辨率。

Scaling 功能类似于 Pixel Beyond 功能,仅适用于 ace 2 相机。

该功能的使用#

运作原理#

在缩放期间,图像大小通过插值按比例减小。根据需要将像素值相加并取平均值,以将其映射到缩放后图像的像素。这能提高信噪比。

Scaling 由您选择的缩放比例系数控制。在水平和垂直方向上应用相同的系数。系数为 1.0 时,图像大小保持不变。小于 1.0 的系数会使图像的宽度和高度缩小。

配置 Scaling#

配置 Scaling:

  1. 确保相机空闲,即未在捕获图像。
  2. 通过将像素合并和采样系数设置为 1 来禁用 DecimationBinning
  3. 设置 ScalingHorizontal parameter to the desired scaling value.

信息

  • Changing the ScalingHorizontal parameter value automatically adapts the ScalingVertical parameter value. This maintains the original height-to-width ratio.
  • 使用 Scaling 功能时,BinningDecimation 不可用。

缩放值#

您可以在 0.1251 之间选择缩放系数。但是,只有 112 个离散值可用。如果输入的值不可用,则浮动控件会自动向上或向下舍入到最接近的可用值。

要计算有效值,请使用以下公式:16/x,其中 x = 16 到 128 之间的任何自然数。

示例 得到的缩放系数 结果
16 / 16 1.0 默认设置。Scaling 禁用。原始图像尺寸不变。可以使用
Binning 和 Decimation
16 / 17 0.941
16 / 18 0.888
等等
16 / 32 0.5 图像尺寸减半(系数 2)。
16 / 64 0.25 图像尺寸缩小 4 倍。
等等
16 / 128 0.125 图像尺寸缩小 8 倍(最大减小量)。

Scaling 使用注意事项#

对 ROI 设置的影响#

使用缩放时,图像 ROI自动功能 ROI 设置是指经过修改的图像缩放后的行和列,而不是传感器的物理行和列。

例如,假设您使用的相机采用 3840 x 2748 的传感器。缩放系数 0.5 适用于全分辨率。在这种情况下,最大 ROI 宽度为 1918,最大 ROI 高度为 1372。ROI 宽度和高度参数会自动调整。同样,在启用缩放之前定义的所有偏移量都会自动调整。

禁用缩放后,ROI 会再次增加,但可能小于原始 ROI。

信息

Basler 建议您在禁用缩放后始终检查图像 ROI 设置,并在必要时手动将图像 ROI 还原到所需的大小和位置。

分辨率降低#

使用缩放可以有效地降低相机成像传感器的分辨率。例如,如果您在具有 3840 x 2748 传感器的相机上将缩放系数配置为 0.25,则相机的有效分辨率将降低为 954 x 682。

舍入损失#

在缩放期间,图像尺寸会频繁进行四舍五入处理。如果反复更改缩放系数,则舍入所产生的效果会累积。这样在恢复以前的图像尺寸时,由于四舍五入而丢失的尺寸无法恢复。

为避免累积舍入损失,请手动恢复以前的图像尺寸。此外也可以返回“参考”图像尺寸,例如恢复到全分辨率,并手动指定图像尺寸以避免舍入误差。

示例代码#

ace Classic/U/L GigE 相机#
// Set horizontal scaling to 0.5
camera.ScalingHorizontalAbs.SetValue(0.5);
// Disable scaling
camera.ScalingHorizontalAbs.SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set horizontal scaling to 0.5
CFloatParameter(nodemap, "ScalingHorizontalAbs").SetValue(0.5);
// Disable scaling
CIntegerParameter(nodemap, "ScalingHorizontalAbs").SetValue(1);
// Set horizontal scaling to 0.5
camera.Parameters[PLCamera.ScalingHorizontalAbs].SetValue(0.5);
// Disable scaling
camera.Parameters[PLCamera.ScalingHorizontalAbs].SetValue(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 horizontal scaling to 0.5 */
errRes = PylonDeviceSetFloatFeature(hdev, "ScalingHorizontalAbs", 0.5);
CHECK(errRes);
/* Disable scaling */
errRes = PylonDeviceSetIntegerFeature(hdev, "ScalingHorizontalAbs", 1);
CHECK(errRes);
# Set horizontal scaling to 0.5
camera.ScalingHorizontalAbs.Value = 0.5
# Disable scaling
camera.ScalingHorizontalAbs.Value = 1
其他相机#
// Set horizontal scaling to 0.5
camera.ScalingHorizontal.SetValue(0.5);
// Disable scaling
camera.ScalingHorizontal.SetValue(1);
INodeMap& nodemap = camera.GetNodeMap();
// Set horizontal scaling to 0.5
CFloatParameter(nodemap, "ScalingHorizontal").SetValue(0.5);
// Disable scaling
CIntegerParameter(nodemap, "ScalingHorizontal").SetValue(1);
// Set horizontal scaling to 0.5
camera.Parameters[PLCamera.ScalingHorizontal].SetValue(0.5);
// Disable scaling
camera.Parameters[PLCamera.ScalingHorizontal].SetValue(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 horizontal scaling to 0.5 */
errRes = PylonDeviceSetFloatFeature(hdev, "ScalingHorizontal", 0.5);
CHECK(errRes);
/* Disable scaling */
errRes = PylonDeviceSetIntegerFeature(hdev, "ScalingHorizontal", 1);
CHECK(errRes);
# Set horizontal scaling to 0.5
camera.ScalingHorizontal.Value = 0.5
# Disable scaling
camera.ScalingHorizontal.Value = 1

您也可以使用 pylon Viewer 轻松设置参数。