Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)
Baumer工业相机
Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。
Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。
Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。
Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。
Baumer工业相机堡盟相机在SDK中提供了一种在收到单个触发信号时记录多张图像的方法。。
Baumer工业相机定序器功能的技术背景
Baumer工业相机的NEOAPI SDK是Baumer公司开发的针对其相机产品系列的一套软件开发工具包。该SDK提供了一组API,使开发人员可以编写专业应用程序,从而控制、捕获、处理和显示Baumer相机的图像和数据。BGAPI SDK支持多种编程语言,包括C++、C#、Visual Basic、LabVIEW、Matlab等,并提供了大量示例代码和文档,以帮助用户轻松上手,快速完成应用程序的开发。
NEOAPI SDK提供了丰富的功能,可以控制Baumer相机的所有参数,包括曝光时间、增益、白平衡、触发模式等,以及支持各种数据格式,例如Raw、BMP、JPG等,同时还提供了实时显示、数据采集、图像处理等功能,为开发人员提供了高度定制化的解决方案。此外,BGAPI SDK还支持多相机系统的开发,并可支持各种计算机操作系统,如Windows、Linux、Mac OS等。
工业相机的 定序器Sequencer 功能是一种高级的编程功能,允许用户将多种拍摄参数设置成独立的序列,实现对相机的自动切换控制以满足多种不同的应用需求。使用 Sequencer 功能可以实现在一个拍摄周期内,完成多个曝光、图像传输和处理任务,从而提高工程效率和质量。
Baumer工业相机通过NEOAPI SDK使用定序器功能
下面介绍在C#里Baumer工业相机如何通过NEOAPI进行定序器编程:借助双快门,可在较短的时间间隔内采集两张曝光时间非常短的图像。
预期的相机动作
从理论上讲,该方法首先要求相机设置为触发模式,当每次收到触发信号时,在同样的曝光时间内采集两张图像。
技术限制
双快门方法要使用闪光灯,因此在采集每张图像时都需要闪光,这样环境光将被抑制。
图像曝光时间非常短”意味着设定的曝光时间和相机内部处理时间比传感器的读取时间短。在此,设定的第二次曝光时间应大于等于传感器的读取时间。
为了避免传感器的读取时间超过第二次曝光时间,需要再进行一次短促的闪光,同时必须避免所有环境光。
定序器的工作原理
考虑到定序器的基本原理以及双快门的技术限制,定序器的参数设置比预想的要复杂得多:
由于第一张图像的采集由硬件触发,随后必须在不同的曝光时间内立即自动采集第二张图像,因此两组不同的定序器必不可少。
第一组定序器(Set0)包含用于配置TriggerMode的必要参数,以及第一张图像的预期曝光时间。
第二组定序器(Set1)将相机重新设置为自由运行操作模式。设定的曝光时间将大于等于传感器的读取时间。
此外,两组定序器都需要提供定序器组及路径的相关信息。
Baumer工业相机通过NEOAPI SDK使用定序器功能具体实现方法
下面介绍在C#里Baumer工业相机如何通过NEOAPI SDK使用定序器实现双快门采集两张曝光时间非常短的图像.
在收到触发信号后,序列便会开始运行,因此必须将TriggerSource设置为Line0。
第一组定序器
Set0提供由定序器控制的相机功能:ExposureTime和已开启的TriggerMode。
定序器组及路径相关功能:
SequencerPathSelector = 0
对切换至下一组定序器的路径进行定义,本例中为Path0。
SequencerTriggerSource = ExposureActive
对用作定序器触发源的内部或外部信号进行定义,本例中为内部信号ExposureActive。
SequencerTriggerActivation = RisingEdge
对触发切换至下一组定序器的信号状态变化进行定义,本例中为RisingEdge。
SequencerSetNext = 1
定义本路径中的下一组定序器,本例中为Set1。
第二组定序器
Set1中的ExposureTime更长,并关闭了TriggerMode。该组定序器及路径相关功能:
SequencerPathSelector = 0
对切换至下一组定序器的路径进行定义,使用Path0返回至Set0。
SequencerTriggerSource = ExposureActive
对用作定序器触发源的内部或外部信号进行定义,本例中为内部信号ExposureActive。
SequencerTriggerActivation = RisingEdge
对触发切定序器组切换的信号状态变化进行定义,本例中为RisingEdge。
SequencerSetNext = 0
定义相关路径中的下一组定序器。使用Set0返回。
本示例介绍了如何通过硬件触发实现双快门操作的定序器编程。双快门操作旨在在很短的时间内采集2张图像。该操作使用了一种特殊的技术,让相机还在读取第一张图像的时候可以采集第二张图像。
下图所示为以信号曲线表示的双快门效果:在第二次曝光的最终阶段消除外界光(曝光信号中的灰色阴影区域),可确保相机实现预期动作。
1.引用合适的类文件
代码如下(示例):
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.InteropServices;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Data;
using System.Globalization;
using System.Diagnostics;
using System.IO;
using NeoAPI;
2.通过NEOAPI SDK开启两组定序器功能
Baumer工业相机设置定序器功能模式核心代码如下所示:
NeoAPI.Cam camera = new NeoAPI.Cam();
camera.Connect(); // connect to a camera
MatType type;
bool isColor = true;
Feature pixelformat = new Feature();
camera.f.ExposureTime.Value = 10000;
if (camera.IsConnected)
{
// 停止启动并加载默认参数
camera.f.AcquisitionStop.Execute();
camera.f.UserSetSelector.Set(UserSetSelector.Default); //选择相机Default设置
camera.f.UserSetLoad.Execute(); //执行UserSet1载入
// 配置硬件触发输入
// 这需要在配置定序器之前完成
camera.f.TriggerMode.ValueString = "On";
camera.f.TriggerSource.ValueString = "Line0";
camera.f.TriggerActivation.ValueString = "RisingEdge";
camera.f.TriggerDelay.Value =(double)0.0;
camera.f.LineSelector.ValueString = "Line0";
camera.f.LineInverter.Value = false;
camera.f.LineDebouncerHighTimeAbs.Value =(double)1.0;
camera.f.LineDebouncerLowTimeAbs.Value =(double)1.0;
// 为闪光灯配置计时器
// 每次开始曝光时启动计时器,持续时间为 100 微秒
camera.f.TimerSelector.ValueString = "Timer1";
camera.f.TimerTriggerSource.ValueString = "ExposureStart";
camera.f.TimerTriggerActivation.ValueString = "RisingEdge";
camera.f.TriggerDelay.Value = (double)0.0;
// (闪光灯的)定时器持续时间等于下面的 Set0 曝光时间
camera.f.TimerDuration.Value = (double)100.0; //100.0 µsec
// 配置 GPIO "线路 3",用于控制闪存
camera.f.LineSelector.ValueString = "Line3";
camera.f.LineSource.ValueString = "Timer1Active";
// 当之前设置的定时器 1 工作时,3 号线为高电平
camera.f.LineInverter.Value = false;
// 切换到定序器设置模式
camera.f.SequencerConfigurationMode.ValueString = "On";
// 设置第一组定序器功能Set0
camera.f.SequencerSetSelector.Value = (long)0;
camera.f.SequencerSetLoad.Execute(); //执行第一组定序器参数载入
camera.f.TriggerMode.ValueString = "On";
camera.f.CounterSelector.ValueString = "Counter1";
camera.f.CounterEventSource.ValueString = "Off";
// 设置第一组定序器Set0的曝光参数
camera.f.ExposureTime.Value = (double)15000.0;
camera.f.SequencerPathSelector.Value = (long)0;
camera.f.SequencerTriggerSource.ValueString = "ExposureActive";
camera.f.SequencerTriggerActivation.ValueString = "RisingEdge";
camera.f.SequencerSetNext.Value = (long)1;
camera.f.SequencerSetSave.Execute(); //执行第一组定序器参数保存
// 设置第二组定序器功能Set1
camera.f.SequencerSetSelector.Value = (long)1;
camera.f.SequencerSetLoad.Execute(); //开启第二组定序器参数
// 将触发模式(TriggerMode)设置为关,否则相机将等待下一次硬件触发,这是不可用的。将触发模式(TriggerMode)更改为关(Off)将使摄像机返回自由运行模式,曝光一次后,我们将回到设置 0,此时触发模式(TriggerMode)将再次打开,以便摄像机等待下一次硬件触发。
camera.f.TriggerMode.ValueString = "Off";
camera.f.CounterSelector.ValueString = "Counter1";
camera.f.CounterEventSource.ValueString = "ExposureActive";
camera.f.CounterEventActivation.ValueString = "RisingEdge";
camera.f.CounterDuration.Value = (long)2;
camera.f.CounterResetSource.ValueString = "Counter1End";
camera.f.CounterResetActivation.ValueString = "RisingEdge";
// 设置第二组定序器Set1的曝光参数
// 这里是双快门技巧,对于第二次曝光,我们将曝光时间设置为与第一幅图像的读出时间(由相机计算得出)相同。这样 相机将识别到,只有在第一幅图像的读出时间结束后,第二幅图像才可以读出。
// 第一幅图像的读出完成后,第二幅图像才可以读出,因此会立即开始曝光。
// 而不是等待第一幅图像完成读出
double fReadOutTime_Set1 = (double)camera.f.ReadOutTime.Value;
camera.f.ExposureTime.Value = (double)fReadOutTime_Set1 ;
camera.f.SequencerPathSelector.Value = (long)0;
camera.f.SequencerTriggerSource.ValueString = "ExposureActive";
camera.f.SequencerTriggerActivation.ValueString = "RisingEdge";
// 定序器的下一步将再次是步骤 0
camera.f.SequencerSetNext.Value = (long)0;
//执行第二组定序器参数保存
camera.f.SequencerSetSave.Execute();
// 从 Set0 开始
camera.f.SequencerSetStart.Value = (long)0;
// 开启相机定序器功能
camera.f.SequencerMode.ValueString = "On";
camera.f.AcquisitionStart.Execute();
// 开始采集图像
// 停止相机定序器功能
camera.f.AcquisitionStop.Execute();
camera.f.SequencerMode.ValueString = "Off";
}
Baumer工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的优势
使用工业相机的定序器功能实现双快门采集两张曝时间非常短的图像有以下优势:
-
高速度: 双快门采集允许瞬间拍摄两张曝时间非常短的图像,使相机能够在极其短的时间内捕捉高速运动或快速变化的场景,有助于保持图像清晰度和准确度。
-
减少模糊: 通过使用定序器实现双快门采集,可以避免在移动或高速运动场景下因快门曝光时间长导致的运动模糊问题。两个瞬间的曝光时间可以在快速变化的情况下捕捉图像并有效减少图像模。
-
提高精度: 双快门采集可以在同一位置获得两个不同曝光时间的图像,结合和分析这两幅图,能提高图像处理的精度和准确性,尤其在要求测量和分辨率要求的应用场景下有很大的帮助。
-
灵活性: 使用定序器实现双快门采集,可以根据不同需求调整两张图像之间的曝光时间差和参数设置,灵可以适应不同的拍摄场景和要求。
-
数据多样性: 通过实施定序器功能和双快门采集,可以获取同一场景下不同曝光下的图像,有助于在后续处理和分析中增加数据的多样性和信息量。
综上所述,使用工业相机的定序器功能实现双快门采集两张曝时间非常短的图像可以显著提高图像捕捉速度和准确性,并适用于对快速运动进行高精度和清晰度要求的场景。
Baumer工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的行业应用
工业相机使用定序器实现双快门采集两张曝光时间非常短的图像在许多行业中具有重要应用价值,以下是一些典型的行业应用:
-
制造业: 在制造业中,双快门采集可用于捕捉快速运动的生产线以及高精度的零件、机器、设备等图像,有助于质量控制和产品检验。
-
机器视觉: 工业相机的双快门采集可应用于机器视觉系统中,对运动中的物体进行高速拍摄和分析,用于自动化生产、无人驾驶车辆和智能机器人等应用。
-
医疗影像: 在医学影像领域,双快门采集可用于捕捉活体器官、血流等的快速变化图像,有助于医学影像诊断和手术支持。
-
军事与航空航天: 在军事和航空航天领域,工业相机的双快门采集可用于高速飞行器、导弹、火箭等的图像捕捉和分析,有助于飞行器性能测试和目标跟踪等应用。
-
科学研究: 在科学研究领域,双快门采集可用于快速动态现象的记录和分析,如化学反应过程、生物学事件等,有助于科学实验和研究。
通过工业相机的定序器实现双快门采集两张曝光时间非常短的图像,可以满足许多行业对高速运动和瞬时事件的图像捕捉需求,为各种应用提供了高速、精度和数据多样性的图像采集解决方案。