跳转到内容

Defect Pixel Correction#

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

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

该功能的使用#

ace 2 相机#

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

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

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

  • 出厂文件:包含在相机生产过程中检测到的缺陷像素的坐标。使用此文件,相机可以校正强度值显著低于相邻像素(包括全黑像素)的像素。
  • 用户文件:包含用户定义的坐标。您可以将此文件上传到相机。这允许您定义随着时间的推移可能出现的新缺陷像素,无论这些像素是太暗还是太亮。

使用 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 基于存储在出厂校正文件中的缺陷像素。
  • User:静态 Defect Pixel Correction 基于存储在用户校正文件中的缺陷像素。
  • 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 参数的值。

dart 和 pulse 相机#

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

  • 静态像素校正会校正强度值明显小于其相邻像素(包括全黑像素)的像素。
  • 动态像素校正会校正强度值显著大于其相邻像素(包括全白像素)的像素。内部阈值定义何时将像素检测为“热像素”。“动态”是指为每个获取的图像单独计算 Defect Pixel Correction。

设置 Defect Pixel Correction 模式#

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

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

示例代码#

ace 2 相机#
// 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);
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);

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