Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现双快门采集两张曝光时间非常短的图像(C#)

  • Baumer工业相机
  • Baumer工业相机定序器功能的技术背景
  • Baumer工业相机通过NEOAPI SDK使用定序器功能
    • 预期的相机动作
    • 技术限制
    • 定序器的工作原理
  • Baumer工业相机通过NEOAPI SDK使用定序器功能具体实现方法
    • 第一组定序器
    • 第二组定序器
    • 1.引用合适的类文件
    • 2.通过NEOAPI SDK开启两组定序器功能
  • Baumer工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的优势
  • Baumer工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的行业应用

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工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的优势

使用工业相机的定序器功能实现双快门采集两张曝时间非常短的图像有以下优势:

  1. 高速度: 双快门采集允许瞬间拍摄两张曝时间非常短的图像,使相机能够在极其短的时间内捕捉高速运动或快速变化的场景,有助于保持图像清晰度和准确度。

  2. 减少模糊: 通过使用定序器实现双快门采集,可以避免在移动或高速运动场景下因快门曝光时间长导致的运动模糊问题。两个瞬间的曝光时间可以在快速变化的情况下捕捉图像并有效减少图像模。

  3. 提高精度: 双快门采集可以在同一位置获得两个不同曝光时间的图像,结合和分析这两幅图,能提高图像处理的精度和准确性,尤其在要求测量和分辨率要求的应用场景下有很大的帮助。

  4. 灵活性: 使用定序器实现双快门采集,可以根据不同需求调整两张图像之间的曝光时间差和参数设置,灵可以适应不同的拍摄场景和要求。

  5. 数据多样性: 通过实施定序器功能和双快门采集,可以获取同一场景下不同曝光下的图像,有助于在后续处理和分析中增加数据的多样性和信息量。

综上所述,使用工业相机的定序器功能实现双快门采集两张曝时间非常短的图像可以显著提高图像捕捉速度和准确性,并适用于对快速运动进行高精度和清晰度要求的场景。

Baumer工业相机使用定序器实现双快门采集两张曝光时间非常短的图像的行业应用

工业相机使用定序器实现双快门采集两张曝光时间非常短的图像在许多行业中具有重要应用价值,以下是一些典型的行业应用:

  1. 制造业: 在制造业中,双快门采集可用于捕捉快速运动的生产线以及高精度的零件、机器、设备等图像,有助于质量控制和产品检验。

  2. 机器视觉: 工业相机的双快门采集可应用于机器视觉系统中,对运动中的物体进行高速拍摄和分析,用于自动化生产、无人驾驶车辆和智能机器人等应用。

  3. 医疗影像: 在医学影像领域,双快门采集可用于捕捉活体器官、血流等的快速变化图像,有助于医学影像诊断和手术支持。

  4. 军事与航空航天: 在军事和航空航天领域,工业相机的双快门采集可用于高速飞行器、导弹、火箭等的图像捕捉和分析,有助于飞行器性能测试和目标跟踪等应用。

  5. 科学研究: 在科学研究领域,双快门采集可用于快速动态现象的记录和分析,如化学反应过程、生物学事件等,有助于科学实验和研究。

通过工业相机的定序器实现双快门采集两张曝光时间非常短的图像,可以满足许多行业对高速运动和瞬时事件的图像捕捉需求,为各种应用提供了高速、精度和数据多样性的图像采集解决方案。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/440130.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

获取C语言语句对应的汇编码和机器指令

借助IDE的调试功能 以CodeBlocks为例,先设置断点,然后点击红色三角形调试。 然后选择Debug➡ Debugging Windows➡Disassembly 就可以看到了 使用命令行 在工程文件中,一般可以找到一个.o文件。如果没有,可以先在program.c的目录下…

【JavaEE初阶】 关于JVM垃圾回收

文章目录 🍃前言🎋死亡对象的判断算法🚩引用计数算法🚩可达性分析算法 🌳垃圾回收算法🚩标记-清除算法🚩复制算法🚩标记-整理算法🚩分代算法🎈哪些对象会进入…

在哪里可以下载大自然短视频素材?大自然短视频素材网分享

如果你想要制作短视频但又担心找不到那些让人心旷神怡的大自然素材,别急,我这就给你安利几个可以下载到高清、无水印的大自然短视频素材的网站。这样,你不仅能让作品视觉效果大大提升,还能让观众感受到大自然的魅力,一…

C语言之指针习题一

1. 解析:全选 2. 解析:A.当内存空间释放后,指针将指向其他的区域,成为野指针 3. 解析:B,assert只会在调试模式(debug)下使用,release不会使用 4. 解析: A…

【CSP试题回顾】202109-1-数组推导

CSP-202109-1-数组推导 解题代码 #include<iostream> #include<vector> #include<algorithm> using namespace std;long long maxSum, minSum;int main() { int n;cin >> n;vector<int>B(n);for (auto& it : B){cin >> it;maxSum …

day38 动态规划part1

509. 斐波那契数 简单 斐波那契数 &#xff08;通常用 F(n) 表示&#xff09;形成的序列称为 斐波那契数列 。该数列由 0 和 1 开始&#xff0c;后面的每一项数字都是前面两项数字的和。也就是&#xff1a; F(0) 0&#xff0c;F(1) 1 F(n) F(n - 1) F(n - 2)&#xff0c;…

PR:添加MTV动态歌词

MTV的歌词效果如下&#xff1a; 1.用文字工具编辑歌词&#xff0c;选择合适的字体 2.点中素材&#xff0c;按住Alt键向上拖拽复制一份 3.文字填充色选择蓝色&#xff0c;描边选择白色加粗 4.添加不透明度蒙版&#xff0c;拖拽至歌词前面 5.打开蒙版路径前的秒表 6.在歌词结尾处…

C语言实现回调函数

C语言实现回调函数 一、回调函数概念1.1 什么叫函数指针 二、回调函数案例 一、回调函数概念 回调函数就是一个被作为参数传递的函数。在C语言中&#xff0c;回调函数只能使用函数指针实现&#xff0c;在C、Python、ECMAScript等更现代的编程语言中还可以使用仿函数或匿名函数…

unity学习(49)——服务器三次注册限制以及数据库化角色信息4--角色信息数据库化

1.此处下断开始调试,list函数内就有问题&#xff1a; 2. 现在的问题是只读不写&#xff01;32行就是写入部分的代码&#xff1a; 3. 很奇怪&#xff0c;调试的时候确实是写进来了 程序正常执行后&#xff0c;文件中数据也没有消失 关闭服务器文件内容依旧正常。 players包含所…

【深度学习笔记】6_2 循环神经网络RNN(recurrent neural network)

注&#xff1a;本文为《动手学深度学习》开源内容&#xff0c;部分标注了个人理解&#xff0c;仅为个人学习记录&#xff0c;无抄袭搬运意图 6.2 循环神经网络 上一节介绍的 n n n元语法中&#xff0c;时间步 t t t的词 w t w_t wt​基于前面所有词的条件概率只考虑了最近时间…

APP测试功能点总结

1、功能性测试&#xff1a; 根据产品需求文档编写测试用例。 软件设计文档编写用例。  注意&#xff1a;就是根据产品需求文档编写测试用例而进行测试。 2、兼容性测试: Android版本的兼容性 手机分辨率兼容性 网络的兼容性&#xff1a;2G\3G\4G\WIFI,弱网下、断网时 APP跨…

Newman基本使用

简介 Newman 是 Postman 推出的一个 nodejs 库&#xff0c;直接来说就是 Postman 的json文件可以在命令行执行的插件。   Newman 可以方便地运行和测试集合&#xff0c;并用之构造接口自动化测试和持续集成。 安装 安装需要通过 npm 命令来完成&#xff0c;可以直接安装 nod…

ai克隆配音!AI大模型应用开发带来的惊喜

AI大模型应用开发的进步给我们带来了许多惊喜。随着技术不断发展&#xff0c;AI克隆配音已经成为一种热门趋势。这项技术不仅可以为影视作品提供更加优质和多样化的配音选择&#xff0c;还可以帮助演员和制片人节省大量时间和精力。 通过AI克隆配音技术&#xff0c;只需输入一…

【方法】如何打开7Z分卷压缩文件?

什么是7Z分卷压缩文件&#xff1f;就是在压缩文件时&#xff0c;将文件压缩成若干个大小一样、以“文件名.7z.序号”格式命名的7Z压缩包&#xff0c;可以方便存储和传输&#xff0c;如下图所示。 一、7Z分卷压缩文件如何打开&#xff1f; 我们只需要按照普通压缩包的打开方式&…

为什么大学讲授 C 语言比讲授 C++ 的更多?

为什么大学讲授 C 语言比讲授 C 的更多&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&…

moi3D安装

下载文件双击文件 下一步 同意下一步 下一步 下一步 下一步 安装下一步 完成 破解 将如图中的文件复制到文件目录下 汉化 在目录中进入ui文件夹下 在安装包中找到如下的文件复制到ui目录下 在打开 另存为 另存为时改一下编码格式如图 打开软件 找到如图options进入…

【广度优先搜索】【图论】【并集查找】2493. 将节点分成尽可能多的组

作者推荐 视频算法专题 本文涉及知识点 广度优先搜索 图论 并集查找 LeetCod2493. 将节点分成尽可能多的组 给你一个正整数 n &#xff0c;表示一个 无向 图中的节点数目&#xff0c;节点编号从 1 到 n 。 同时给你一个二维整数数组 edges &#xff0c;其中 edges[i] [ai…

LLMs在BI中的运用

现有的BI分析存在以下一些问题&#xff1a; 原始数据入库规整要求比较高。业务过程产生的数据需要经过一些清洗等前置处理后才能够进行后续的BI分析使用。业务部门的数据分析过度依赖于技术部门。而业务与技术之间由于对分析需求理解上的差异&#xff0c;往往需要繁琐的沟通与…

基于SSM的大王门店管理系统设计与实现

目 录 摘 要 I Abstract II 引 言 1 1 相关技术 3 1.1 SSM 3 1.1.1 Spring 3 1.1.2 Spring MVC 3 1.1.3 MyBatis 4 1.2 Shiro 4 1.3 前端技术 4 1.3.1 Bootstrap 4 1.3.2 jQuery 4 1.3.3 Ajax 5 1.3.4 Layui 5 1.3.5 Thymeleaf 5 1.4 本章小结 6 2 系统分析 7 2.1 功能需求分析…

【web网页制作】html+css网页制作企业网站办公用品主题(3页面)【附源码】

企业网站目录 涉及知识写在前面一、网页主题二、网页效果Page1、主页Page2、用品展示Page3、关于我们 三、网页架构与技术3.1 脑海构思3.2 整体布局3.3 技术说明书 四、网页源码4.1 主页模块源码4.2 源码获取方式 作者寄语 涉及知识 办公用品企业主题HTML网页制作&#xff0c;…