跳转到内容

Digital Shift#

相机的 Digital Shift 功能可让您将图像的像素值相乘。

这会增加图像的亮度。如果您的相机不支持数字移位功能,则可以使用 Gain 功能达到类似的效果。

该功能的使用#

运作原理#

将数字移位因数配置为 n 会导致所有像素值逻辑左移 n。这具有将所有像素值乘以 2n 的效果。

如果结果像素值大于当前像素格式可能达到的最大值(例如,对于 12 位像素格式为 4095),则将该值设置为最大值。

如需更多信息,请参见下面的示例

配置 Digital Shift#

要配置数字移位因数,请为 DigitalShift 参数输入所需的值。

默认情况下,该参数设置为 0,即禁用数字移位。

示例#

示例 1:数字移位 1 位,12 位图像数据#

假设您在使用 12 位像素格式的相机上输入了数字移位因数 1。则会产生以下效果:

数字移位 1 位,12 位图像数据输出

  • 每个 12 位图像数据字中的最低有效位设置为 0。
  • 像素值乘以 21 = 2。
  • 由于最低有效位设置为 0,因此相机仅发送偶数像素值,例如 2、4、6、8、10 等。

示例 2:数字移位 2 位,12 位图像数据#

假设您在使用 12 位像素格式的相机上输入了数字移位因数 2。则会产生以下效果:

数字移位 2 位,12 位图像数据输出

  • 每个 12 位图像数据字中的最低 2 位有效位设置为 0。
  • 像素值乘以 22 = 4。
  • 因为两个最低有效位设置为 0,所以相机仅每四个像素值发送一次,例如 4、8、12、16、20 等。

示例 3:数字移位 2 位,8 位图像数据#

假设相机的最大像素位深度为 12 位,但当前使用的是 8 位像素格式。

在这种情况下,照相机首先对 12 位图像数据执行数字移位计算。然后,相机丢弃 4 个最低有效位并发送 8 个最高有效位:

数字移位 2 位,8 位图像数据输出

信息

在以下相机型号上,如果设置了 8 位像素格式,则无论最大像素位深度如何,都会对 10 位图像数据执行数字移位:acA720-290gm/gc、acA1440-73gm/gc、acA1920-40gm/gc、acA1920-50gm/gc、acA1440-220um/uc、acA1920-40um/uc、acA1920-155um/uc、acA2040-120um/uc、acA2440-75um/uc、acA4096-40um/uc、acA4112-30um/uc。

示例 4:数字移位 1 位,12 位图像数据,高值#

假设您的相机使用的是 12 位像素格式。还要假设您的其中一个原始像素值是 2839:

数字移位 1 位,12 位图像数据输出,值为 2839

如果您对此像素值应用数字移位 1,则结果值将大于 12 位像素格式的最大可能值(4096 + 1024 + 512 + 32 + 8 + 4 + 2 = 5678;12 位格式的最大值:4095)。在这种情况下,该值设置为最大值,即所有位均设置为 1:

数字移位 1 位,12 位图像数据输出,结果值为 4095

信息

因此,请确保不要对成像方案应用过高的数字移位因数。否则,图像中的所有亮区都将设置为白色,即图像信息将会丢失。

示例代码#

// Disable digital shift
camera.DigitalShift.SetValue(0);
// Enable digital shift by 2
camera.DigitalShift.SetValue(2);
INodeMap& nodemap = camera.GetNodeMap();
// Disable digital shift
CIntegerPtr(nodemap.GetNode("DigitalShift"))->SetValue(0);
// Enable digital shift by 2
CIntegerPtr(nodemap.GetNode("DigitalShift"))->SetValue(2);
INodeMap& nodemap = camera.GetNodeMap();
// Disable digital shift
CIntegerParameter(nodemap, "DigitalShift").SetValue(0);
// Enable digital shift by 2
CIntegerParameter(nodemap, "DigitalShift").SetValue(2);
// Disable digital shift
camera.Parameters[PLCamera.DigitalShift].SetValue(0);
// Enable digital shift by 2
camera.Parameters[PLCamera.DigitalShift].SetValue(2);
// Disable digital shift
Pylon.DeviceSetIntegerFeature(hdev, "DigitalShift", 0);
// Enable digital shift by 2
Pylon.DeviceSetIntegerFeature(hdev, "DigitalShift", 2);
/* 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 */
/* Disable digital shift */
errRes = PylonDeviceSetIntegerFeature(hdev, "DigitalShift", 0);
CHECK(errRes);
/* Enable digital shift by 2 */
errRes = PylonDeviceSetIntegerFeature(hdev, "DigitalShift", 2);
CHECK(errRes);

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