跳转到内容

Defect Pixel Correction#

Defect Pixel Correction 相机功能允许您将传感器各个像素的灵敏度差异的影响降至最低。

在采集的图像中,即使使用均匀的光线,部分像素也会显得比其他像素明显更亮或更暗。该问题是由于各个像素的灵敏度差异而引起的,而这些差异又是由于生产公差引起的。

该功能的使用#

The implementation of this feature varies by camera series:

ace 2 R/X, boost R, and dart M Cameras#

Basler ace 2 R, ace 2 X, boost R, and dart M cameras support static defect pixel correction. This correction is based on files that are stored on the camera and contain a list of defect pixel coordinates.

“静态”意味着始终使用相同的指定缺陷像素坐标执行校正过程。在图像采集期间,这些像素的强度值将根据其相邻像素的强度值进行替换。

以下 Defect Pixel Correction 文件可以存储在相机上:

  • 工厂文件:包含相机生产过程中检测到的缺陷像素的坐标。
  • 用户文件:包含用户定义的坐标。您可以将此文件上传到相机。这允许您定义随着时间的推移可能出现的新缺陷像素。

信息

Basler ace 2 X cameras also support dynamic pixel defect correction. For more information, see Pixel Correction Beyond.

使用 pylon Viewer 校正缺陷像素#

→ 请参阅静态 Defect Pixel Correction (pylon Viewer)

使用 pylon API 校正缺陷像素#

信息

Basler 建议使用 pylon Viewer 执行 Defect Pixel Correction。

仅当您想要在自己的应用中实现 Defect Pixel Correction 时,才使用 pylon API。

设置静态 Defect Pixel Correction 模式#

要设置静态 Defect Pixel Correction 模式,请将 BslStaticDefectPixelCorrectionMode 参数设置为以下值之一:

  • Factory(默认):静态 Defect Pixel Correction 基于存储在出厂校正文件中的缺陷像素。
  • 用户:静态缺陷像素校正基于存储在用户校正文件中的缺陷像素。
    请注意,通过 pylon API 设置此模式时,使用用户定义的像素。通过 pylon Viewer 设置用户(包括工厂)校正模式时,除了工厂文件中存储的像素之外,还将使用用户定义的像素。
  • Off:相机执行静态 Defect Pixel Correction。
上传用户 Defect Pixel Correction 文件#

在上传用户 Defect Pixel Correction 文件之前,请确保该文件符合以下文件格式:

文件必须以包含四个值为 0 的字节的 4 字节标题开头。在标题之后,文件必须包含缺陷像素条目(最多可以指定 4096 个缺陷像素)。每个条目由 32 位组成,顺序如下:14 位 y 坐标、14 位 x 坐标、4 位类型

示例:坐标为 x=1 和 y=2 的缺陷像素条目

Bit   |31          18| |17           4| |3  0|
Value |00000000000010| |00000000000001| |0000|
      | y = 2        | | X = 1        | |type|

使用 pylon Viewer 上传用户 Defect Pixel Correction 文件:

  1. 在 pylon Viewer 的相机菜单中,单击文件访问权限
  2. 相机文件下拉框中,选择用户 Defect Pixel Correction
    如果没有用户 Defect Pixel Correction 条目,您的相机不支持上传校正文件。
  3. 单击上传并导航到要上传的文件。
  4. 单击打开

要在上传后应用用户 Defect Pixel Correction 文件,请确保将 BslStaticDefectPixelCorrectionMode 参数设置为 User 并执行 BslStaticDefectPixelCorrectionReload 命令。

下载 Defect Pixel Correction 文件#

如果您想要将自己测量的缺陷像素添加到下载的文件中,下载 Defect Pixel Correction 文件(例如出厂校正文件)可能会很有用。您可以将缺陷像素条目的完整列表存储在新的用户校正文件中。

使用 pylon Viewer 下载 Defect Pixel Correction 文件:

  1. 在 pylon Viewer 的相机菜单中,单击文件访问权限
  2. 相机文件下拉框中,根据您要下载的文件,选择静态出厂 Defect Pixel Correction静态用户 Defect Pixel Correction
    如果没有适当的条目,则您的相机不支持下载文件。
  3. 单击下载,导航到要保存文件的目录,然后输入所需的文件名。
  4. 单击打开
静态 Defect Pixel Correction 文件状态#

StaticDefectPixelCorrectionFileStatus 参数可以采用以下值:

  • FileStatusUnknown:Defect Pixel Correction 文件的状态未知。获取图像以更改文件状态。
  • FileOk:Defect Pixel Correction 文件有效。
  • FileNotFound:找不到 Defect Pixel Correction 文件。它从未被上传或已被删除。
  • FileEmpty:Defect Pixel Correction 文件没有条目。文件头有效,但文件不包含任何缺陷像素。Defect Pixel Correction 过程会中止。
  • InvalidHeader:Defect Pixel Correction 文件头无效。该文件必须有一个 4 字节的文件头。
  • InvalidSize:Defect Pixel Correction 文件大小无效。最大缺陷像素数不得超过 4096。
  • InvalidSorting:Defect Pixel Correction 文件中的条目排序无效。Defect Pixel Correction 过程会中止。
  • InvalidFileEntry:Defect Pixel Correction 文件中至少有一个条目的大小无效。Defect Pixel Correction 过程会中止。
  • InvalidClustering:发现了一个无效的簇。一行中的三个或更多相邻像素被视为无效簇。其他缺陷像素之间的任何缺陷像素都无法校正。

Defect Pixel Correction 文件可以包含最大缺陷像素数。要获取此数量,请获取 BslStaticDefectPixelCorrectionMaxDefects 参数的值。

boost V 相机#

Basler boost V 相机支持静态 Defect Pixel Correction。此校正基于存储在相机上并包含缺陷像素坐标列表的文件。

“静态”意味着始终使用相同的指定缺陷像素坐标执行校正过程。在图像采集期间,这些像素的强度值将根据其相邻像素的强度值进行替换。

执行 Defect Pixel Correction#

信息

pylon Viewer 的内置静态 Defect Pixel Correction 功能不支持 boost V 相机。

使用 pylon Viewer 或 pylon API 的特征树对 boost V 相机进行 Defect Pixel Correction。

要对 boost V 相机执行 Defect Pixel Correction:

  1. BslStaticDefectPixelCorrectionMode 参数设置为所需的最大值:

    • Factory:仅校正坐标存储在出厂文件中的缺陷像素。出厂文件是在相机生产过程中生成,无法更改。
    • User:您可以指定自定义缺陷像素坐标。
    • Off:相机执行静态 Defect Pixel Correction。
  2. 如果选择用户

    1. 找出图像中的像素错误,并记下缺陷像素的 x 和 y 坐标。
    2. BslStaticDefectPixelCorrectionYCoordinate 参数设置为第一个缺陷像素的 y 坐标。
    3. BslStaticDefectPixelCorrectionXSelector 参数设置为 X0
    4. BslStaticDefectPixelCorrectionXCoordinate 参数设置为首个缺陷像素的 x 坐标。
    5. 如果存在另一个具有相同 y 坐标但不同 x 坐标的缺陷像素,请将 BslStaticDefectPixelCorrectionXSelector 参数设置为下一个条目,例如 X1,然后输入下一个 x 坐标。
    6. 对所有其他像素错误重复步骤 b。
    7. 执行 BslStaticDefectPixelCorrectionSave 命令将更改保存到闪存。

信息

  • 您可以使用 BslStaticDefectPixelCorrectionCount 参数来检查当前正在校正的图像像素数。
  • 您可以将 BslStaticDefectPixelCorrectionTestMode 参数设置为 On 以将所有校正像素设置为全白。这有助于找到图像中正在校正的像素。

删除缺陷像素坐标#

不能删除出厂文件中的像素坐标。

但是,您可以删除自定义缺陷像素坐标,即在“用户”校正模式下输入的坐标(请参阅上文)。为此:

  • 如果要移除单个自定义缺陷像素坐标:

    1. BslStaticDefectPixelCorrectionYCoordinate 参数设置为缺陷像素的 y 坐标。
    2. BslStaticDefectPixelCorrectionXSelector 参数设置为用于保存缺陷像素 x 坐标的条目,例如 X0
    3. BslStaticDefectPixelCorrectionXCoordinate 参数设置为 0xFFFF。
    4. 执行 BslStaticDefectPixelCorrectionSave 命令将更改保存到闪存。
  • 如果要移除所有自定义缺陷像素坐标:

    1. 执行 BslStaticDefectPixelCorrectionClearAll 命令。这会将所有 BslStaticDefectPixelCorrectionXCoordinate 参数值设置为 0xFFFF。
    2. 执行 BslStaticDefectPixelCorrectionSave 命令将更改保存到闪存。

dart 和 pulse 相机#

Basler dart 和 pulse 相机可以执行两种类型的像素校正:

  • The static pixel correction corrects pixels that have significantly lesser intensity values than their neighboring pixels, including completely black pixels.
  • The dynamic pixel correction corrects pixels that have significantly higher intensity values than their neighboring pixels, including completely white pixels. An internal threshold value defines when a pixel is detected as a "hot pixel". "Dynamic" means that the defect pixel correction is calculated individually for each acquired image.

设置 Defect Pixel Correction 模式#

要设置 Defect Pixel Correction 模式,请将 BslDefectPixelCorrectionMode 参数设置为以下值之一:

  • On(默认):相机执行静态和动态像素校正。
  • StaticOnly:相机仅执行静态像素校正。
  • Off:相机执行像素修正。

示例代码#

ace 2 R/X, boost R, and dart M Cameras#
// Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set static user defect pixel correction
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Reload static defect pixel correction file
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionReload").Execute();
// Set static user defect pixel correction
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Reload static defect pixel correction file
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionReload].Execute();
/* 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 static user defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Reload static defect pixel correction file */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionReload");
CHECK(errRes);
# Set static user defect pixel correction
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Reload static defect pixel correction file
camera.BslStaticDefectPixelCorrectionReload.Execute()
boost V 相机#
// Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.SetValue(BslStaticDefectPixelCorrectionMode_User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X0);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.SetValue(BslStaticDefectPixelCorrectionXSelector_X1);
camera.BslStaticDefectPixelCorrectionXCoordinate.SetValue(182);
// Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Set the defect pixel correction mode to User
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionMode").SetValue("User");
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionYCoordinate").SetValue(430);
// Select entry X0 and assign the first x coordinate
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X0");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
CEnumParameter(nodemap, "BslStaticDefectPixelCorrectionXSelector").SetValue("X1");
CIntegerParameter(nodemap, "BslStaticDefectPixelCorrectionXCoordinate").SetValue(182);
// Save changes to flash memory
CCommandParameter(nodemap, "BslStaticDefectPixelCorrectionSave").Execute();
// Set the defect pixel correction mode to User
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionMode].SetValue(PLCamera.BslStaticDefectPixelCorrectionMode.User);
// Assume there are two defect pixels at coordinates (120,430) and (182,430)
// Set the y coordinate to 430
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionYCoordinate].SetValue(430);
// Select entry X0 and assign the first x coordinate
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X0);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(120);
// Select entry X1 and assign the second x coordinate, which is in the same line
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXSelector].SetValue(PLCamera.BslStaticDefectPixelCorrectionXSelector.X1);
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionXCoordinate].SetValue(182);
// Save changes to flash memory
camera.Parameters[PLCamera.BslStaticDefectPixelCorrectionSave].Execute();
/* 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 the defect pixel correction mode to User */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionMode", "User");
CHECK(errRes);
/* Assume there are two defect pixels at coordinates (120,430) and (182,430) */
/* Set the y coordinate to 430 */
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionYCoordinate", 430);
CHECK(errRes);
/* Select entry X0 and assign the first x coordinate */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X0");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 120);
CHECK(errRes);
/* Select entry X1 and assign the second x coordinate, which is in the same line */
errRes = PylonDeviceFeatureFromString(hdev, "BslStaticDefectPixelCorrectionXSelector", "X1");
CHECK(errRes);
errRes = PylonDeviceSetIntegerFeature(hdev, "BslStaticDefectPixelCorrectionXCoordinate", 182);
CHECK(errRes);
/* Save changes to flash memory */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslStaticDefectPixelCorrectionSave");
CHECK(errRes);
# Set the defect pixel correction mode to User
camera.BslStaticDefectPixelCorrectionMode.Value = "User"
# Assume there are two defect pixels at coordinates (120,430) and (182,430)
# Set the y coordinate to 430
camera.BslStaticDefectPixelCorrectionYCoordinate.Value = 430
# Select entry X0 and assign the first x coordinate
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X0"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 120
# Select entry X1 and assign the second x coordinate, which is in the same line
camera.BslStaticDefectPixelCorrectionXSelector.Value = "X1"
camera.BslStaticDefectPixelCorrectionXCoordinate.Value = 182
# Save changes to flash memory
camera.BslStaticDefectPixelCorrectionSave.Execute()
dart 和 pulse 相机#
// Disable defect pixel correction
camera.BslDefectPixelCorrectionMode.SetValue(BslDefectPixelCorrectionMode_Off);
INodeMap& nodemap = camera.GetNodeMap();
// Disable defect pixel correction
CEnumParameter(nodemap, "BslDefectPixelCorrectionMode").SetValue("Off");
// Disable defect pixel correction
camera.Parameters[PLCamera.BslDefectPixelCorrectionMode].SetValue(PLCamera.BslDefectPixelCorrectionMode.Off);
/* 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 defect pixel correction */
errRes = PylonDeviceFeatureFromString(hdev, "BslDefectPixelCorrectionMode", "Off");
CHECK(errRes);
# Disable defect pixel correction
camera.BslDefectPixelCorrectionMode.Value = "Off"

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