Flir Blackfly S 工业相机:自动曝光配置及代码

这篇具有很好参考价值的文章主要介绍了Flir Blackfly S 工业相机:自动曝光配置及代码。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动曝光

自动曝光通过调整增益和曝光时间来优化图像的亮度。

自动曝光在相机中进行的话则减少了CPU后期的处理运算。

什么是目标灰度值(曝光值)

目标灰度值是一个参数,通过调整亮度,来实现在多种光线强度下输出优化后的图像结果
该值是线性的,是最大像素值的百分比。

在各种数码相机中,目标灰度值称为曝光值,是根据光圈大小、f-stop 和快门时间估算的。

如何辨别曝光值是否正确

图像像素强度通常用 n 位表示。常见的有 8 位、10 位或 16 位像素格式
单色图像每个像素有一个通道,而彩色图像通常每个像素有三个通道(R、G、B)。
将图像像素值在直方图中合并以显示图像的像素强度分布。
通过这种方式可以指示出图像何时曝光不足、正确曝光或曝光过度

下面的例子分别展示 一个 曝光不足,曝光过度和正确曝光的图像,并在下方给出其像素的直方图。

看图像的曝光是否合理一般常用看直方图的方式
Flir Blackfly S 工业相机:自动曝光配置及代码
Flir Blackfly S 工业相机:自动曝光配置及代码
上面是曝光不足的图片和直方图,可以明显的看到直方图大部分集中在左侧,这代表着相机传感器没有捕捉到足够的光来正确的消除黑暗区域

Flir Blackfly S 工业相机:自动曝光配置及代码
Flir Blackfly S 工业相机:自动曝光配置及代码
上面的图片是过度曝光的,直方图大部分集中在左侧,意味着,一些像素过饱和,像素信息丢失或被剪裁。

Flir Blackfly S 工业相机:自动曝光配置及代码
Flir Blackfly S 工业相机:自动曝光配置及代码
上面的图是曝光正确,可以看到直方图接近128,处在中间区域,代表着该图像曝光值合适,丢失数据信息最少。

自动曝光是工作流程

有三个图像参数影响相机的曝光:

  • 增益
  • 曝光时间
  • 虹膜(不是标准的 GenICam 功能)

自动曝光的步骤如下:

  • 1 以一个默认的参数值进行曝光获取图像
  • 2 创建直方图并比较统计的数据
    使用直方图比较图像统计信息。
    将得到的直方图与最佳均值和方差进行比较以确定最佳曝光。
    如果平均值/方差不在最佳范围内,则相机会调整增益或曝光。

就像下面的图一样,形成控制回路
Flir Blackfly S 工业相机:自动曝光配置及代码
可以自动设置最佳图像均值或使用目标灰度值定义它,该值控制图像直方图均值所在的位置。
目标灰度值是像素格式最大值的百分比。

例如,对于目标灰度值设置为 50% 的 8 位像素格式,增益和曝光时间通过一些分线性函数(例如gamma或者LUT)自动调整使得直方图的均值在128,来对图像进行曝光

当目标灰度值为自动设置时,相机基于图像像素方差确定最优均值。
这个模式下,增益、曝光时间和目标灰度值可以设置上下限。

当目标灰度值自动设置关闭的时候,可以自定义均值。可以通过使用曝光值计算这个均值,进行补偿。

曝光值是一种手动调整目标灰度值来适应特殊情况(比如阳光或者阴影),曝光值由-3到3

  • 3 调整增益和曝光时间
    当直方图和最佳灰度值不匹配的时候需要调整增益和曝光时间这两个图像参数

增益将传感器光子转换输出(电子)转换为数字值。数字值与增益设置成正比,因此单位位变化所需的电子数与增益设置成正比。白平衡是对传感器 R、G 和 B 输出差异的增益补偿。自动曝光考虑了白平衡的增益变化。

曝光时间(快门)决定了传感器收集光子并将其转换为电子的时间量。 它控制传感器收集多少光。

除了这些功能之外,还可以通过自动曝光启用两个附加功能,即减震和优先控制,以提供对自动曝光算法的补充控制。

如何设置自动曝光

Flir工业相机的上位机SpinView和Spinnaker API 提供了几种方法来配置自动曝光。

用SpinView配置自动曝光

下面是通过SpinView来开启自动曝光的方法:

  • 1 打开 SpinView 应用并且进入设置菜单
  • 2 设置Exposure Auto 为 Continuous
  • 3 设置Gain Auto 为 Continuous
    Flir Blackfly S 工业相机:自动曝光配置及代码
    可以在 SpinView 中设置的其他可选自动曝光相关功能如下所示,进入配置界面就是点击 Features 菜单然后选择 Auto Algorithm Control.
    Flir Blackfly S 工业相机:自动曝光配置及代码

通过Spinnaker API 来配置自动曝光

下面是通过Spinnaker API 来配置自动曝光的C++例程

将 Automatic Exposure Time和Gain Auto 设置为自动模式

//设置 Exposure time mode 为自动模式
CEnumerationPtr ptrExposureAuto = nodeMap.GetNode("ExposureAuto");
CEnumEntryPtr ptrExposureAutoCts = ptrExposureAuto->GetEntryByName("Continuous");
ptrExposureAuto->SetIntValue(ptrExposureAutoCts->GetValue());

//设置 gain 为自动模式
CEnumerationPtr ptrGainAuto = nodeMap.GetNode("GainAuto");
CEnumEntryPtr ptrGainAutoCts = ptrGainAuto->GetEntryByName("Continuous");
ptrGainAuto->SetIntValue(ptrGainAutoCts->GetValue());

感兴趣区域 (ROI) 可以应用于自动曝光功能。 这个 AE ROI 可以等于或小于捕获的 ROI 的面积。

//自动曝光 ROI
//开启 ROI用于白平衡
CBooleanPtrptrAasRoiEnable = nodeMap.GetNode("AasRoiEnable");
ptrAasRoiEnable-> SetValue(1);
CEnumerationPtr ptrAutoAlgorithmSelector = nodeMap.GetNode("AutoAlgorithmSelector");
CEnumEntryPtr ptrAutoAlgorithmSelectorAWB = ptrAutoAlgorithmSelector ->GetEntryByName("AutoWhiteBalance");
ptrAutoAlgorithmSelector->SetIntValue(ptrAutoAlgorithmSelectorAWB->GetValue());

//设置ROI的尺寸和偏移 
CIntptrptrAasRoiHeight = nodemap.GetNode("AasRoiHeight");
ptrAasRoiHeight->SetValue([insert ROI height]);
CIntptrptrAasRoWidth = nodemap.GetNode("AasRoiWidth");
ptrAasRoiWidth->SetValue([insert ROI width]);
CIntptrptrAasRoiOffsetX = nodemap.GetNode("AasRoiOffsetX");
ptrAasRoiOffsetX->SetValue([insert X offset]);
CIntptr ptrAasRoiOffsetY = nodemap.GetNode("AasRoiOffsetY");
ptrAasRoiOffsetY->SetValue([insert Y offset]);

目标灰度值设置为自动(continuous)允许相机根据图像方差确定最佳平均值。

//目标灰度值设置为自动
CEnumerationPtr, ptrAutoXTargetGreyValueAuto = nodeMap.GetNode("AutoExposureTargetGreyValueAuto");
CEnumEntryPtr ptrAutoXTargetGreyValueAutoCts = ptrAutoXTargetGreyValueAuto ->GetEntryByName("Continuous");
ptrAutoXTargetGreyValueAuto -> ptrAutoXTargetGreyValueAutoCts ->GetValue());

当图像中的照明不均匀时,照明模式会调整曝光值以适应图像直方图中的特征。 标准设置为正常。 另外两个选项是背光补偿和前光补偿:

背光补偿:
当强光从物体后面射进来时,使用背光补偿模式。 在这种情况下,自动曝光算法会使对象曝光不足。 实施背光补偿调整成像参数以正确曝光图像,而不管物体相对于相机和照明位置的位置。

//背光补偿
CEnumerationPtr ptrAutoXLightingMode = nodeMap.GetNode("AutoExposureLightingMode");
CEnumEntryPtr ptrAutoXLightingModeBacklight=ptrAutoXLightingMode->GetEntryByName("Backlight");
ptrAutoXLightingMode->SetIntValue(ptrAutoXLightingModeBacklight->GetValue());

前光补偿:
当物体前方有强光照射而背景较暗时,使用前光补偿模式。 在这种情况下,自动曝光算法会使对象过度曝光。 前光补偿调整成像参数以正确曝光图像,而不管物体相对于相机和照明的位置的位置。

//前光补偿
CEnumerationPtrptrAutoXLightingMode = nodeMap.GetNode("AutoExposureLightingMode");
CEnumEntrPtr ptrAutoXLightingModeFrontlight=ptrAutoXLightingMode->GetEntryByName("Frontlight");
ptrAutoXLightingMode->SetIntValue(ptrAutoXLightingModeFrontlight->GetValue());

设置各种自动曝光参数限制,设置目标灰度值下限和上限。

//目标灰度值范围设置
CFloatPtr ptrAutoXGreyValueLowerLimit = nodeMap.GetNode("AutoExposureGreyValueLowerLimit");
ptrAutoXGreyValueLowerLimit->SetValue([insert lower limit]);
CFloatPtr ptrAutoXGreyValueUpperLimit = nodeMap.GetNode("AutoExposureGreyValueUpperLimit");
ptrAutoXGreyValueUpperLimit->SetValue([insert upper limit]);

//增益范围设置
CFloatPtr ptrAutoXGainLowerLimit = nodeMap.GetNode("AutoExposureGainLowerLimit");
ptrAutoXGainValueLowerLimit->SetValue([insert lower limit]);
CFloatPtr ptrAutoXGainValueUpperLimit = nodeMap.GetNode("AutoExposureGainUpperLimit"); ptrAutoXGainValueUpperLimit->SetValue([insert upper limit]);

//曝光时间限制
CFloatPtr ptrAutoXExposureTimeLowerLimit = nodeMap.GetNode("AutoExposureExposureTimeLowerLimit");
ptrAutoXExposureTimeLowerLimit->SetValue([insert lower limit]);
CFloatPtr ptrAutoXExposureTimeUpperLimit = nodeMap.GetNode("AutoExposureExposureTimeUpperLimit ");
ptrAutoXExposureTimeUpperLimit->SetValue([insert upper limit]);

相机优先保持增益
使用此模式可将噪音降至最低。 相机保持尽可能低的增益,并根据目标灰度调整曝光时间。 如果在达到目标灰度级之前达到最大曝光,则增益开始增加,直到达到目标灰度级。

//相机优先处理增益
CEnumerationPtr ptrAutoXControlPriority = nodeMap.GetNode("AutoExposureControlPriority");
CEnumEntryPtr ptrAutoXControlPriorityGain = ptrAutoXControlPriority->GetEntryByName("Gain");
ptrAutoControlPriority->SetIntValue(ptrAutoXControlPriorityGain->GetValue());

相机优先保持曝光时间
使用此模式捕捉快速动作。 选择它时,相机保持尽可能短的曝光时间,并根据目标灰度值调整增益。 如果在达到目标灰度级之前达到最大增益,则曝光时间会改变,直到达到目标灰度级。文章来源地址https://www.toymoban.com/news/detail-486734.html

//优先保持曝光时间
CEnumerationPtr ptrAutoXControlPriority = nodeMap.GetNode("AutoExposureControlPriority");
CEnumEntryPtr ptrAutoXControlExposureTimePriority = ptrAutoXControlPriority->GetEntryByName("ExposureTime");
ptrAutoControlPriority->SetIntValue(ptrAutoXControlExposureTimePriority ->GetValue());

到了这里,关于Flir Blackfly S 工业相机:自动曝光配置及代码的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 工业相机的帧率和曝光(快门)之间的关系

    工业相机是常用与工业视觉领域的常用专业视觉核心部件,拥有多种属性,是机器视觉系统中的核心部件,具有不可替代的重要功能。 工业相机已经被广泛应用于工业生产线在线检测、智能交通,机器视觉,科研,军事科学,航天航空等众多领域 工业相机的主要参数包括:分辨率、

    2024年02月04日
    浏览(42)
  • Baumer工业相机堡盟工业相机如何通过NEOAPISDK实现双快门采集两张曝光时间非常短的图像(C++)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年03月15日
    浏览(49)
  • Baumer工业相机中曝光与增益两种功能的优点和作用以及使用方法

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年02月09日
    浏览(49)
  • Baumer工业相机堡盟工业相机如何通过NEOAPISDK使用PnPEventHandler实现相机掉线自动重连 (C#)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年04月26日
    浏览(34)
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK使用AutoFocus自动对焦功能(C++)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年02月09日
    浏览(51)
  • Baumer工业相机堡盟工业相机如何通过BGAPISDK使用AutoFocusHelper自动对焦补充功能(C++)

    Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩

    2024年02月09日
    浏览(41)
  • Baumer工业相机堡盟工业相机如何联合BGAPISDK和佳能EF变焦镜头实现相机的自动变焦(C++)

    持之以恒挑战赛 Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。 Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于

    2023年04月21日
    浏览(43)
  • 机器视觉之Basler工业相机使用和配置方法(C++)

    basler工业相机做双目视觉用,出现很多问题记录一下: 首先是多看手册:https://zh.docs.baslerweb.com/software 手册内有所有的源码和参考示例,实际上在使用过程中,大部分都是这些源码,具体项目选择对应的示例代码。 可以通过balser的镜头选型工具,按照自己需要测量目标的距

    2024年02月07日
    浏览(41)
  • 解读手机相机的各个参数(长曝光)

     长曝光,就是长时间曝光的意思。通过控制快门速度来完成。快门速度是控制进光时间的。长时间曝光就是把相机调整的快门尽量慢。 长曝光是选慢快门(曝光时间长)的一种曝光方式。好处就是可以把光线暗的景色拍的更清晰,也可以拍出如梦幻般的画面,比如瀑布和城市

    2024年02月15日
    浏览(39)
  • 深度理解相机中的各个参数(对比度、饱和度、亮度、曝光度、锐度)

    相机中和很多参数,包括对比度、饱和度、亮度、曝光度、锐度等等。不论我们是在拍照还是后期的剪辑,都缺少不了对这些参数的调整。那么接下来来详细的叙述一下这些参数以及它们的作用。 对比度指的是一幅图像中明暗区域最亮的白和最暗的黑之间不同亮度层级的测量

    2023年04月14日
    浏览(53)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包