跳转到内容

Vignetting Correction#

相机的 Vignetting Correction 功能可让您从图像中消除暗角伪影。

此功能与 pylon Viewer 中的 Vignetting Correction 功能共同发挥作用。

该功能的使用#

暗角是指图像的四角相对于中心较暗。这在数字成像中很常见。当传感器边缘的像素没有获得充足的光线时就会发生这种情况。例如,这可能是因为成像圆相对于传感器的尺寸而言太小,或者是因为光线在传感器中心处以直角入射,但在四角并非如此。这意味着边缘的像素具有较低的灰度值。

要消除这些伪影,您必须使用 pylon Viewer 创建一组校正数据。下图展示了此过程:

Vignetting Correction 流程图

在步骤 1 中,计算所有像素的校正值 (CV) 并将其保存在相机的内存中。在步骤 2 中,如果启用了 VignettingCorrectionMode 参数,则立即删除暗角伪影痕迹。为了消除伪影,将校正值与原始像素值 (OV) 相乘,获得改进的图像(结果值,RV)。

使用 VignettingCorrectionMode 参数,可以打开和关闭校正。仅当您使用 pylon Viewer 创建暗角校正数据后,此参数才可用。

如果您的相机具有与创建暗角校正数据所用的规格相似的规格,则也可以使用其他相机的渐晕校正数据。为此,请按照下列步骤操作。之后,执行 VignettingCorrectionLoad 命令。

信息

  • 为了获得最佳结果,请在创建校正数据之前禁用所有非线性功能,例如光源预设或 Gamma 校正。之后,您可以再次启用这些功能。
  • On color cameras, select a Bayer pixel format before creating the correction data. Once you have created the correction data, you can select any pixel format.
  • 执行 vignetting correction 时,重要的是,生成的参考图像仅显示相对于中心中等程度的拐角变暗效果。
  • 渐晕受所用镜头、光圈和焦距的影响。如果更换镜头、光圈或焦距,则必须创建一组新的 vignetting correction 数据。

示例代码#

ace 2 和 boost 相机#

// Turn vignetting correction on
camera.BslVignettingCorrectionMode.SetValue(BslVignettingCorrectionMode_On);
// Load vignetting correction data
camera.BslVignettingCorrectionLoad.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumerationPtr(nodemap.GetNode("BslVignettingCorrectionMode"))->FromString("On");
// Load vignetting correction data
CCommandPtr(nodemap.GetNode("BslVignettingCorrectionLoad"))->Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumParameter(nodemap, "BslVignettingCorrectionMode").SetValue("On");
// Load vignetting correction data
CCommandParameter(nodemap, "BslVignettingCorrectionLoad").Execute();
// Turn vignetting correction on
camera.Parameters[PLCamera.BslVignettingCorrectionMode].SetValue(PLCamera.BslVignettingCorrectionMode.On);
// Load vignetting correction data
camera.Parameters[PLCamera.BslVignettingCorrectionLoad].Execute();
// Turn vignetting correction on
Pylon.DeviceFeatureFromString(hdev, "BslVignettingCorrectionMode", "On");
// Load vignetting correction data
Pylon.DeviceExecuteCommandFeature(hdev, "BslVignettingCorrectionLoad");
/* 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 */
/* Turn vignetting correction on */
errRes = PylonDeviceFeatureFromString(hdev, "BslVignettingCorrectionMode", "On");
CHECK(errRes);
/* Load vignetting correction data */
errRes = PylonDeviceExecuteCommandFeature(hdev, "BslVignettingCorrectionLoad");
CHECK(errRes);

其他相机#

// Turn vignetting correction on
camera.VignettingCorrectionMode.SetValue(VignettingCorrectionMode_On);
// Load vignetting correction data
camera.VignettingCorrectionLoad.Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumerationPtr(nodemap.GetNode("VignettingCorrectionMode"))->FromString("On");
// Load vignetting correction data
CCommandPtr(nodemap.GetNode("VignettingCorrectionLoad"))->Execute();
INodeMap& nodemap = camera.GetNodeMap();
// Turn vignetting correction on
CEnumParameter(nodemap, "VignettingCorrectionMode").SetValue("On");
// Load vignetting correction data
CCommandParameter(nodemap, "VignettingCorrectionLoad").Execute();
// Turn vignetting correction on
camera.Parameters[PLCamera.VignettingCorrectionMode].SetValue(PLCamera.VignettingCorrectionMode.On);
// Load vignetting correction data
camera.Parameters[PLCamera.VignettingCorrectionLoad].Execute();
// Turn vignetting correction on
Pylon.DeviceFeatureFromString(hdev, "VignettingCorrectionMode", "On");
// Load vignetting correction data
Pylon.DeviceExecuteCommandFeature(hdev, "VignettingCorrectionLoad");
/* 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 */
/* Turn vignetting correction on */
errRes = PylonDeviceFeatureFromString(hdev, "VignettingCorrectionMode", "On");
CHECK(errRes);
/* Load vignetting correction data */
errRes = PylonDeviceExecuteCommandFeature(hdev, "VignettingCorrectionLoad");
CHECK(errRes);

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