Baumer工业相机中偏振相机如何使用Baumer堡盟GAPI SDK来进行偏振数据的计算转换输出(C#)

简介: Baumer工业相机中偏振相机如何使用Baumer堡盟GAPI SDK来进行偏振数据的计算转换输出(C#)

项目场景

Baumer工业相机堡盟相机是一种高性能、高质量的工业相机,可用于各种应用场景,如物体检测、计数和识别、运动分析和图像处理。  


Baumer的万兆网相机拥有出色的图像处理性能,可以实时传输高分辨率图像。此外,该相机还具有快速数据传输、低功耗、易于集成以及高度可扩展性等特点。


Baumer工业相机的BGAPI SDK给新型偏振照相机提供了测量所获图像的强度和偏振的能力。因此,它能够在应用程序中利用偏振信息。本应用说明描述了如何获得偏振信息。


工业相机产品:

Baumer堡盟VCXU-50MP和堡盟VCXG-50MP,GAPI SDK v2.9.2及以上。


Baumer工业相机的偏振功能的详细介绍应用可以参考下面的技术博客,本文只介绍偏振数据的使用:


Baumer工业相机堡盟相机如何使用偏振功能(偏振相机优点和行业应用)(C++)_格林威的博客-CSDN博客


技术背景

Baumer工业相机的BGAPI SDK可以提供相机的图像原始数据,Halcon具有极为巨大的图像处理库,在图像处理领域非常强大,功能丰富,使用于工业视觉检测。


工业相机的SDK(Software Development Kit)是为了方便开发人员对工业相机进行控制和图像采集而提供的一套软件工具。而Halcon是一款强大的机器视觉软件,能够进行图像处理、分析、识别等多种任务。


Baumer工业相机中的偏振相机是基于索尼IMC250MZR传感器的。该传感器涂有一层金属网,可以过滤4个相邻像素的偏振信息。偏振角度被过滤以0°、45°、90°、135°的方式排列。

有了这些信息,就可以计算出以下数据:

 偏振角(AOP)。

 直线极化度(DOLP)

 角度和直角极化度(ADOLP)

 图像的强度。


使用BGAPI SDK的偏振相机的用法:

该相机只提供有关偏振的原始数据。不同偏振格式的计算格式的计算在主机系统上通过堡盟GAPI SDK完成。


这就减少了接口的必要带宽,因为数据只传输一次,而不是针对每种偏振格式(AOP、DOLP、ADOLP.Intensity)单独传输、强度)分别传输。


功能分析

偏振相机功能的描述

使用标准化的SFNC特性 "ComponentSelector "和 "ComponentEnable",GenICam

兼容的软件可以识别该相机提供原始偏振数据。这些特征不能被改变(只读)。

为了进行识别,应检查以下特征:

ComponentSelector = PolarizedRaw

ComponentEnable = True

为了实现对广泛的GenICam兼容软件的兼容性,堡盟没有引入自定义图像格式。

原始偏振数据使用标准格式Mono8、Mono10、Mono12或Mono13传输、Mono10、Mono12或Mono12p。

此外,该相机还提供了用于校准相机的必要功能,这些功能属于以下类别"校准控制" 这些功能充满了堡盟的校准值。


如有必要,还可使用"DeviceResetToDeliveryState "将把这些值重置为堡盟提供的校准值。


代码分析

为了确保计算尽可能少地使用资源并实现高帧率,有两种方法方法来处理数据。这里我们解释一下最重要的配置和使用的软件功能的使用。

如果一个应用只需要一种偏振格式(AOP、DOLP或ADOLP),最好使用一个单部分图像对象。单部分图像对象正好包含一个图像。


下面核心代码提供了偏振图像原始数据进行转换的相关用法。


核心代码如下所示:

BGAPI2.Buffer bufferFilled = dataStream.GetFilledBuffer(1000); //timeout 1000 msec
if (bufferFilled == null)
{
    System.Console.Write("Error: Buffer Timeout after 1000 msec\r\n");
}
else
{
    try
    {
        if (bufferFilled.IsIncomplete)
        {
            System.Console.Write("Error: Image is incomplete\r\n");
        }
        else if (bufferFilled.ImagePresent != true)
        {
            System.Console.Write("Error: Image not present\r\n");
        }
        else
        {
            // get information about the image from the buffer object
            uint width = (uint)(bufferFilled.Width);
            uint height = (uint)(bufferFilled.Height);
            IntPtr pBufferData = bufferFilled.MemPtr;
            ulong bufferDataSize = bufferFilled.MemSize;
            ulong imageOffset = bufferFilled.ImageOffset;
            ulong imageDataSize = (bufferDataSize > imageOffset) ? (bufferDataSize - imageOffset) : 0;
            IntPtr pImageData = (IntPtr)((ulong)(pBufferData) + imageOffset);
            System.Console.Write(" Image {0, 5:d} received in memory address {1:X}\r\n", bufferFilled.FrameID, pBufferData);
            /* For the first image, a new image object is created, all further images reuse the object and
                therefore just initialize it with new data */
            if (imagePolarized == null)
            {
                imagePolarized = imageProcessor.CreateImage(width, height, sPixelFormatRaw, pImageData, imageDataSize);
                // Enable the component to be calculated, disable all others
                EnableSingleComponent(imagePolarized, sComponent);
            }
            else
            {
                imagePolarized.Init(width, height, sPixelFormatRaw, pImageData, imageDataSize);
                /* As the pixel format is the same for all images captured, the enabled components and the active component selector
                    are preserved, so you don't need to enable components on every image. */
            }
            // Calculate the required Polarisation format using a direct transformation from raw polarized image.
            BGAPI2.Image component = imageProcessor.CreateTransformedImage(imagePolarized
                , (sComponent != "ADOLP") ? "Mono8" : "RGB8");
            System.Console.Write("  component image: {0}\r\n", component.NodeList["ComponentSelector"].Value);
            if (bSaveBrw)
            {
                string sFilename = sComponent + ".brw";
                component.NodeList["SaveBrw"].Value = sFilename;
            }
            component.Release();
            bSaveBrw = false;
        }
    }
    catch (BGAPI2.Exceptions.IException ex)
    {
        returncode = (returncode == 0) ? 1 : returncode;
        System.Console.Write("ExceptionType:    {0}\r\n", ex.GetType());
        System.Console.Write("ErrorDescription: {0}\r\n", ex.GetErrorDescription());
        System.Console.Write("in function:      {0}\r\n", ex.GetFunctionName());
    }
}
if (bufferFilled != null)
{
    // Queue buffer again
    bufferFilled.QueueBuffer();
}

CameraExplorer软件使用偏振功能

我们可以通过CameraExplorer软件用于查看和保存以下格式的偏振数据

AOP、DOLP、ADOLP和Intensity。

配置是可以在基本视图中使用 "偏振 "类别来完成。


如下图所示:

3.png

2.png

1.png

目录
相关文章
|
3月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C#)
48 0
|
3月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Force IP强制修改网口IP功能(C++)
29 0
|
3月前
|
数据采集 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用ForceIP强制修改网口IP功能(C#)
29 0
|
3月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C#)
19 0
|
3月前
|
编解码 监控 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK使用Binning像素合并功能(C++)
49 0
|
3月前
|
监控 API 开发工具
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
Baumer工业相机堡盟工业相机如何通过NEOAPI SDK获取每张图像的微秒时间和FrameID功能(C++)
35 0
|
7天前
|
JavaScript Java Maven
云效产品使用常见问题之android sdk 构建出aar后,上传到私有maven仓库失败如何解决
云效作为一款全面覆盖研发全生命周期管理的云端效能平台,致力于帮助企业实现高效协同、敏捷研发和持续交付。本合集收集整理了用户在使用云效过程中遇到的常见问题,问题涉及项目创建与管理、需求规划与迭代、代码托管与版本控制、自动化测试、持续集成与发布等方面。
|
3月前
|
安全 开发工具 Android开发
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
几个Flutter常见诊断错误与解决Android toolchain - develop for Android devices X Unable to locate Android SDK
300 0
|
6月前
|
API 开发工具 Android开发
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
解决 Android App 上架 Google play后 ,签名变更,第三方sdk无法登录
148 0
|
3月前
|
开发工具 Android开发
Android获取SDK的版本信息
Android获取SDK的版本信息
39 0