Baumer工业相机

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

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

Baumer工业相机由于其性能和质量的优越和稳定,常用于高速同步采集领域,通常使用各种图像算法来提高其捕获的图像的质量。

Baumer工业相机NEOAPI SDK是用于Baumer工业相机的一款最新的软件开发工具包(SDK)。它为开发人员提供了一系列API和工具,用于与Baumer工业相机进行通信和控制,控制方式极为便捷类似Halcon的相机助手类控制方式。​

Baumer工业相机堡盟相机在SDK中的原始图像可以和微软提供的图像压缩算法进行联合,从而实现外部图像进行压缩的功能设置。

Baumer工业相机通过NEOSDK进行图像压缩的技术背景

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等。

微软的图像压缩算法是基于JPEG XR标准的。这个标准是由微软与其他公司合作开发的,后来在2009年被采纳为一个国际标准(ISO/IEC 29199-2)。

JPEG XR 旨在提供比标准 JPEG 算法更好的压缩,同时保持高图像质量。它通过使用更复杂的压缩方法来实现这一点,该方法可以处理更广泛的颜色范围,并提供对透明度和无损压缩的更好支持。

微软对JPEG XR标准的实施包括一些额外的功能和优化,以进一步提高其性能。这些包括对渐进式解码的支持,子带编码,以及对色度适应和色彩空间转换的改进处理。

总的来说,微软的图像压缩算法是一个非常有效和广泛使用的解决方案,用于压缩图像,同时保持高质量和保真度。

这里主要描述如何在C#的平台下实现通过BGAPI SDK实现微软图像质量压缩的核心代码

代码分析

本文介绍使用NEOAPI SDK对Baumer的工业相机进行开发时,使用通过NEOAPI SDK和微软的图像压缩算法进行图像转换的功能,注意Image算法的使用需要将Buffer图像先转为Bitmap数据,再进行压缩算法的使用。

第一步:先引用对应的NET框架的DLL文件

C#环境下引用System.Drawing.dll作为图像处理库代码如下所示:

using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Drawing.Imaging;
using NEOAPI;

第二步:在回调函数里进行Buffer图像转换为Image图像进行压缩

下面为图像转换为Image图像的核心代码,如下所示:

//回调函数中直接将buffer转为Bitmap
#region//Convert BGAPI2.Buffer to Bitmap(it will reduce the additional cost time of callback function)
System.Drawing.Bitmap bitmap = new System.Drawing.Bitmap((int)mBufferFilled.Width, (int)mBufferFilled.Height, (int)mBufferFilled.Width, System.Drawing.Imaging.PixelFormat.Format8bppIndexed, (IntPtr)((ulong)mBufferFilled.MemPtr + mBufferFilled.ImageOffset));
System.Drawing.Imaging.ColorPalette palette = bitmap.Palette;
int nColors = 256;
for (int ix = 0; ix < nColors; ix++)
{
    uint Alpha = 0xFF;
    uint Intensity = (uint)(ix * 0xFF / (nColors - 1));
    palette.Entries[ix] = System.Drawing.Color.FromArgb((int)Alpha, (int)Intensity, (int)Intensity, (int)Intensity);
}
bitmap.Palette = palette;
                      
string filenameBMP = mBufferFilled.Parent.Parent.Model + "_ImageMono8_" + mBufferFilled.FrameID + "_time_" + mBufferFilled.Timestamp + ".bmp";
string filenameBMP2 = strPath;
 
//将Bitmap图像转为Image
#region//Copy the Bitmap to a new Bitmap instance and add it to the list of bitmaps(memory) 
Bitmap clone = (Bitmap)bitmap.Clone();
BitmapData data = clone.LockBits(new Rectangle(0, 0, clone.Width, clone.Height), ImageLockMode.ReadOnly, clone.PixelFormat);
clone.UnlockBits(data);
Image image = clone; // 隐式类型转换
SaveImageForSpecifiedQuality(image , savePath, 75);//设置75%质量的压缩
#endregion

第三步:NET框架的Encoder图像压缩算法

下面为使用NET框架的Encoder图像压缩算法的核心代码,如下所示:

/// <summary>
/// 按指定的压缩质量及格式保存图片(微软的Image.Save方法保存到图片压缩质量为75)
/// </summary>
/// <param name="sourceImage">要保存的图片的Image对象</param>
/// <param name="savePath">图片要保存的绝对路径</param>
/// <param name="imageQualityValue">图片要保存的压缩质量,该参数的值为1至100的整数,数值越大,保存质量越好</param>
/// <returns>保存成功,返回true;反之,返回false</returns>
public bool SaveImageForSpecifiedQuality(System.Drawing.Image sourceImage, string savePath, int imageQualityValue)
{
    //以下代码为保存图片时,设置压缩质量
    EncoderParameters encoderParameters = new EncoderParameters();
    EncoderParameter encoderParameter = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, imageQualityValue);
    encoderParameters.Param[0] = encoderParameter;
    try
    {
        ImageCodecInfo[] ImageCodecInfoArray = ImageCodecInfo.GetImageEncoders();
        ImageCodecInfo jpegImageCodecInfo = null;
        for (int i = 0; i < ImageCodecInfoArray.Length; i++)
        {
            if (ImageCodecInfoArray[i].FormatDescription.Equals("JPEG"))
            {
                jpegImageCodecInfo = ImageCodecInfoArray[i];
                break;
            }
        }
        sourceImage.Save(savePath, jpegImageCodecInfo, encoderParameters);
        return true;
    }
    catch
    {
        return false;
    }
}

工业相机图像通过NEOAPI SDK使用.NET框架的Encoder方法进行图像压缩的优点

  1. 高质量和可控的图像压缩
    通过使用 System.Drawing.Imaging.Encoder,开发者可以详细指定压缩的质量。例如,对于JPEG格式的图像,可以通过调整质量参数来平衡图像质量与文件大小。这是通过设置 Encoder.Quality 参数来实现的,该参数允许指定从0到100的质量级别(100是最高质量但文件大小也最大)。

  2. 支持多种文件格式
    System.Drawing.Imaging.Encoder 支持多种图像格式的编码和压缩,包括但不限于JPEG, GIF, TIFF, 和 PNG。这意味着开发者可以根据需要选择最合适的格式,以满足不同的图像质量要求和文件大小限制。

  3. 细粒度控制图像保存参数
    Encoder 类与 EncoderParameters 一起工作,后者提供了一种方式来传递多个编码参数。这包括但不限于压缩质量。例如,对于TIFF文件,可以控制图像是否以单页或多页格式保存,这在处理文档扫描时特别有用。

  4. 改善性能
    通过适当的压缩设置,可以显著减少图像文件的大小,这将节省存储空间并可能改善应用程序的性能,特别是在加载和传输大量图像时。

  5. 可透过元数据设置对图像的额外控制
    System.Drawing.Imaging.Encoder 不仅能控制图像的压缩,还可以处理图像的元数据。例如,可添加或修改EXIF信息,这对于摄影和图像档案管理非常重要。

  6. 与.NET集成
    由于 System.Drawing.Imaging.Encoder 是.NET框架的一部分,因此与C#或其他.NET语言紧密集成,无需额外学习或使用第三方库,简化了开发过程。

工业相机图像通过NEOAPI SDK使用使用.NET框架的Encoder方法图像压缩的行业应用

在工业领域,工业相机广泛应用于自动化检测、质量控制、机器视觉等环节。工业相机捕获的图像常常需要进行高效的压缩与保存,以便于存储或进一步分析处理。使用 .NETSystem.Drawing.Imaging.Encoder 类可以在这些应用中发挥重要作用,具体包括以下几个方面的行业应用:

  1. 自动化质量控制

在制造业中,通过工业相机捕捉产品在生产线上的图像,用于检测和分析产品是否存在缺陷。图像数据量通常很大,使用 System.Drawing.Imaging.Encoder 可以有效地压缩图像文件,降低存储空间需求,同时便于在网络中传输这些图像到质量检测系统进行进一步分析。

  1. 机器视觉系统

机器视觉系统广泛用于汽车组装、电子装配和包装等行业。这些系统依靠工业相机捕获的高分辨率图像来指导机器人进行精确作业。通过 System.Drawing.Imaging.Encoder 压缩图像,可以在保持图像质量的同时减小文件尺寸,从而提高系统的响应速度和处理效率。
3. 无人车和自动导航系统

在物流和运输领域,无人车和自动导航系统需要实时处理大量来自工业相机的视觉数据。通过使用 System.Drawing.Imaging.Encoder 进行高效的图像压缩,可以加快图像的处理和分析速度,降低系统的延迟,提高导航的准确性和安全性。

  1. 远程监控

在石油、化工、电力等行业,工业相机常用于难以接近或危险区域的远程监控。通过 System.Drawing.Imaging.Encoder 对图像进行压缩,可以通过网络实时传输大量监控图像到控制中心,不仅节省了传输带宽,还能提高监控效率。

  1. 文档和图像存档

对于需要长期保存的工业设计图、技术图纸等图像文件,利用 System.Drawing.Imaging.Encoder 进行压缩,既能保证图像的可读性,又能显著减少存储空间的占用,便于数据的长期管理和快速检索。

总结

在工业应用中,System.Drawing.Imaging.Encoder 提供的压缩功能使得图像在保持必要质量的前提下,能够以更小的文件大小进行存储和传输,这对提升工业自动化和远程监控系统的效率和效果具有重要意义。这种技术的实施不仅优化了数据处理流程,也为行业用户带来了可观的成本节约和操作便利。

04-15 20:26