Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)

news2024/12/29 14:33:03

Baumer工业相机堡盟工业相机如何联合BGAPISDK和Halcon实现图像的对数Log变换算法增强(C#)

  • Baumer工业相机
  • Baumer工业相机使用图像算法增加图像的技术背景
  • Baumer工业相机通过BGAPI SDK联合Halcon使用Log图像增强算法
    • 1.引用合适的类文件
    • 2.BGAPI SDK在图像回调中引用Halcon的对数Log变换增强算法
    • 3.Halcon进行对数Log变换算法进行图像增强
  • Baumer工业相机使用图像算法增强图像的优势
  • Baumer工业相机使用图像算法增强图像的行业应用

Baumer工业相机

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

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

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

Baumer工业相机使用图像算法增加图像的技术背景

工业相机通常使用各种图像算法来提高其捕获的图像的质量。这些算法旨在提高图像的清晰度、对比度、色彩准确性和整体图像质量。

最常用的算法之一是降噪算法。该算法用于消除图像中可能出现的任何随机噪声或颗粒。另一个流行的算法是图像稳定算法。该算法用于减少由相机抖动引起的模糊现象。

另一个用于工业相机的流行图像算法是边缘增强算法。该算法用于提高图像中边缘的清晰度。它通过检测图像中的边缘,然后增加这些边缘的对比度来工作。

直方图均衡化是另一种用于工业相机的图像算法。该算法通过重新分配像素值以覆盖图像中的整个可用值范围来改善图像的对比度。

总的来说,这些图像算法帮助工业相机捕获清晰和高质量的图像。它们在现代成像系统中起着至关重要的作用,在机器人、显微镜和医学成像等领域至关重要。

本文这里只简单使用Baumer工业相机联合Halcon进行对数Log变换的图像算法。

Baumer工业相机通过BGAPI SDK联合Halcon使用Log图像增强算法

下面介绍在C#里Baumer工业相机在回调函数里直接进行对数Log变换图像增强的演示

对数Log变换对于图像对比度偏低,并且整体亮度值偏高(对于于相机过曝)情况下的图像增强效果明显。

1.引用合适的类文件

代码如下(示例):

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using BGAPI2;
using System.Runtime.InteropServices;
using System.IO;
using CSCameraDemo.Properties;
using System.Globalization;
using WindowsFormsApplication1;
using System.Threading.Tasks;
using System.Threading;
using System.Drawing.Imaging;

using HalconDotNet;

2.BGAPI SDK在图像回调中引用Halcon的对数Log变换增强算法

代码如下(示例),C#调用代码如下所示:

void mDataStream_NewBufferEvent(object sender, BGAPI2.Events.NewBufferEventArgs mDSEvent)
{
    try
    {
        BGAPI2.Buffer mBufferFilled = null;              
        mBufferFilled = mDSEvent.BufferObj;
        if (mBufferFilled == null)
        {
            MessageBox.Show("Error: Buffer Timeout after 1000 ms!");
        }
        else if (mBufferFilled.IsIncomplete == true)
        {
            //MessageBox.Show("Error: Image is incomplete!");
            //queue buffer again
            mBufferFilled.QueueBuffer();
        }
        else
        {
            #region//获取当前FrameID
            FrameIDInt = (int)mBufferFilled.FrameID;
            OnNotifySetFrameID(FrameIDInt.ToString());
            #endregion

            //将相机内部图像内存数据转为bitmap数据
            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));
                                      
            #region//Mono图像数据转换。彩色图像数据转换于此不同
            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;
            #endregion


            #region//回调函数保存图像功能
            if (bSaveImg)
            {
                //使用bitmap自带函数保存
                string strtime = DateTime.Now.ToString("yyyyMMddhhmmssfff");
                string saveimagepath = pImgFileDir  +"\\"+ strtime + ".jpg";
                bitmap.Save(saveimagepath, System.Drawing.Imaging.ImageFormat.Bmp);
          
                bSaveImg = false;//变量控制单次保存图像
            }
            #endregion

           //将Bitmap数据转为Halcon的Hobject
			Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); 
			BitmapDat srcBmpData=bmp.LockBits(rect,ImageLockMode.ReadOnly,
			PixelFormat.Format8bppIndexed);
			HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
			bmp.UnlockBits(srcBmpData);

            #region//对灰度图像进行对数Log变换算法增强   
            Hobject LogImage;
			HOperatorSet.LogImage (image, LogImage, 'e')
			
            #endregion


            #region//bitmap的图像数据复制pBitmap
            Bitmap clonebitmap = (Bitmap)bmp.Clone();
            BitmapData data = clonebitmap.LockBits(new Rectangle(0, 0, clonebitmap.Width, clonebitmap.Height), ImageLockMode.ReadOnly, clonebitmap.PixelFormat);
            clonebitmap.UnlockBits(data);
            pBitmap = clonebitmap;
            #endregion
            #region//将pBitmap图像数据显示在UI界面PictureBox控件上
            prcSource.X = 0;prcSource.Y = 0;
            prcSource.Width = (int)mBufferFilled.Width;prcSource.Height = (int)mBufferFilled.Height;
            System.Drawing.Graphics graph = System.Drawing.Graphics.FromHwnd(pictureBoxA.Handle);
            graph.DrawImage(pBitmap, prcPBox, prcSource, GraphicsUnit.Pixel);
            #endregion

            clonebitmap.Dispose(); //清除临时变量clonebitmap所占内存空间
            mBufferFilled.QueueBuffer();

        }
    }
    catch (BGAPI2.Exceptions.IException ex)
    {
        {
            string str2;
            str2 = string.Format("ExceptionType:{0}! ErrorDescription:{1} in function:{2}", ex.GetType(), ex.GetErrorDescription(), ex.GetFunctionName());
            MessageBox.Show(str2);
        }
    }
    return;
}

3.Halcon进行对数Log变换算法进行图像增强

C#调用代码如下所示:

//将Bitmap数据转为Halcon的Hobject
Rectangle rect = new Rectangle(0, 0, bmp.Width, bmp.Height); 
BitmapDat srcBmpData=bmp.LockBits(rect,ImageLockMode.ReadOnly,
PixelFormat.Format8bppIndexed);
HOperatorSet.GenImage1(out image, "byte", bmp.Width, bmp.Height, srcBmpData.Scan0);
bmp.UnlockBits(srcBmpData);

#region//对灰度图像进行对数Log变换算法增强    
Hobject LogImage;
HOperatorSet.LogImage (image, LogImage, 'e')
#endregion

#endregion

呈现效果如下所示:
(未使用对数Log变换增强图像算法)
在这里插入图片描述

(使用对数Log变换增强图像算法)
在这里插入图片描述

Baumer工业相机使用图像算法增强图像的优势

  1. 提高图像质量: 随着图像算法的使用,工业相机可以产生高度详细和清晰的图像。这些算法可以减少噪音,突出边缘,并增加对比度,以产生更好的图像质量。

  2. 增加准确性:图像算法也可以提供高度准确的测量和数据。通过使用边缘检测和模式识别等图像分析技术,工业相机可以更精确地识别和测量物体。

  3. 成本效益: 通过提高图像质量和准确性,工业相机可以减少对人工检查的需求,从而降低与质量控制和产品拒绝相关的成本。

  4. 效率提高: 通过使图像分析过程自动化,工业相机可以提高产量,减少周期时间,使生产线更有效率。

  5. 更好的决策: 随着图像质量和准确性的提高,工业相机可以为决策者提供高度详细和可靠的数据,使他们能够对生产过程和质量控制做出更明智的决定。

Baumer工业相机使用图像算法增强图像的行业应用

带有图像算法的工业相机被广泛应用于各个行业,用于增强图像,以提高产品质量、安全和效率。以下是其应用的一些例子:

  1. 制造业: 具有图像算法的工业相机用于检查装配线的缺陷,检查产品的质量,并确保遵守安全标准。它们还可用于在制造过程中检查零件,这有助于及早发现缺陷,防止昂贵的生产延误。

  2. 汽车行业: 在汽车行业,具有图像算法的工业相机被广泛用于安全检查,检测汽车零部件的缺陷,并确保司机和乘客的安全。它们还可用于事故发生后的损害评估。

  3. 航空航天: 工业相机在航空航天工业中用于检查卫星、火箭和其他航天器在组装期间和组装后的部件。图像算法可以帮助检测关键部件的缺陷和故障,以确保宇航员的安全和太空任务的成功。

  4. 医疗:具有图像算法的工业相机被用于检测和诊断疾病和医疗状况的医疗应用。它们还被用于医学研究、分析和监测病人的健康。

  5. 农业: 工业相机可用于监测作物的生长,检查农产品的质量,并检测作物的病虫害。图像算法可以帮助早期发现问题,使农民能够采取纠正措施来保护他们的作物。

在所有这些行业中,使用带有图像算法的工业相机大大改善了图像分析的效率和准确性,从而提高了产品质量,增加了安全性,并降低了成本。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ChatGLM】本地版ChatGPT ?6G显存即可轻松使用 !ChatGLM-6B 清华开源模型本地部署教程

目录 感谢B站秋葉aaaki大佬 前言 部署资源 部署流程 实机演示 ChatGML微调&#xff08;人格炼成&#xff09;&#xff08;个人感觉蛮有趣的地方&#xff09; 分享有趣の微调人格 实机演示&#xff08;潘金莲人格&#xff09; 感谢B站秋葉aaaki大佬 秋葉aaaki的个人空间…

《可穿戴监测中的数据质量评估》阅读笔记

目录 一、论文摘要 二、论文十问 三、论文亮点与不足之处 四、与其他研究的比较 五、实际应用与影响 六、个人思考与启示 参考文献 一、论文摘要 从手腕捕获的神经生理信号的可穿戴记录为癫痫监测提供了巨大的潜力。然而&#xff0c;数据质量仍然是影响数据可靠性的最具…

康耐视Visionpro常见问题汇总-视觉人机器视觉粉丝-千问之六十五解答

(2023年5月2日更,下次更新2023年10月1日-10月7日) Question0: 康耐视visionpro9.8/9.9-BeadInspect工具详细使用流程 原因分析或解决办法 康耐视visionpro9.8-BeadInspect工具详细使用流程 (qq.com) Question1: C#与visisionpro联合开发exe文件开机启动设置 原因分析…

Java 基础进阶篇(八)—— 匿名内部类与 Lambda 表达式

文章目录 一、内部类概述二、需要了解的内部类2.1 静态内部类2.2 成员内部类2.3 局部内部类2.4 面试笔试题 三、匿名内部类 ★四、Lambda表达式 ★4.1 Lambda 表达式的概述4.2 Lambda 表达式的省略规则4.3 Lambda 的使用 一、内部类概述 内部类就是定义在一个类里面的类&#…

SPSS如何管理数据之案例实训?

文章目录 0.引言1.数据文件的分解2.数据文件的横向合并3.数据文件的纵向合并4.数据文件的变换5.观测量的加权6.根据已存在的变量建立新变量7.产生计数变量8.对变量自身重新赋值9.赋值生成新的变量10.变量取值的求等级11.缺失数据的处理12.数据的汇总13.由变量组到观测量组的重组…

hd debug - DAPLink的资料

文章目录 DAPLink的资料概述笔记库迁出的技巧END DAPLink的资料 概述 查资料时, 看到有DAPLink的资料, 记录一下. 笔记 DAPLink项目分为软件和硬件2部分, 不在一个库中. 总览 : https://daplink.io/ 这个页面上说了软件和硬件项目的库地址. 软件库地址 : https://github.…

余弦相似度算法进行客户流失分类预测

余弦相似性是一种用于计算两个向量之间相似度的方法&#xff0c;常被用于文本分类和信息检索领域。具体来说&#xff0c;假设有两个向量A和B&#xff0c;它们的余弦相似度可以通过以下公式计算&#xff1a; 其中&#xff0c;dot_product(A, B)表示向量A和B的点积&#xff0c;no…

什么是链接库 | 动态库与静态库

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab&#xff0c;机器人运动控制、多机器人协作&#xff0c;智能优化算法&#xff0c;滤波估计、多传感器信息融合&#xff0c;机器学习&#xff0c;人工智能等相关领域的知识和…

SPSS如何进行基本统计分析之案例实训?

文章目录 0.引言1.描述性分析2.频数分析3.探索分析4.列联表分析5.比率分析 0.引言 因科研等多场景需要进行绘图处理&#xff0c;笔者对SPSS进行了学习&#xff0c;本文通过《SPSS统计分析从入门到精通》及其配套素材结合网上相关资料进行学习笔记总结&#xff0c;本文对基本统计…

深度学习卷积神经网络学习小结2

简介 经过大约两周左右的学习&#xff0c;对深度学习有了一个初步的了解&#xff0c;最近的任务主要是精读深度学习方向的文献&#xff0c;由于搭建caffe平台失败而且比较耗费时间就没有再尝试&#xff0c;所以并没有做实践方面的工作&#xff0c;本文只介绍了阅读文献学到的知…

JdbcTemplate常用语句代码示例

目录 JdbcTemplate 需求 官方文档 JdbcTemplate-基本介绍 JdbcTemplate 使用实例 需求说明 创建数据库 spring 和表 monster 创建配置文件 src/jdbc.properties 创建配置文件 src/JdbcTemplate_ioc.xml 创建类JdbcTemplateTest测试是否可以正确得到数据源 配置 J…

《程序员面试金典(第6版)面试题 16.10. 生存人数(前缀和思想)

题目描述 给定 N 个人的出生年份和死亡年份&#xff0c;第 i 个人的出生年份为 birth[i]&#xff0c;死亡年份为 death[i]&#xff0c;实现一个方法以计算生存人数最多的年份。 你可以假设所有人都出生于 1900 年至 2000 年&#xff08;含 1900 和 2000 &#xff09;之间。如果…

Spring源码解读——高频面试题

Spring IoC的底层实现 1.先通过createBeanFactory创建出一个Bean工厂&#xff08;DefaultListableBeanFactory&#xff09; 2.开始循环创建对象&#xff0c;因为容器中的bean默认都是单例的&#xff0c;所以优先通过getBean、doGetBean从容器中查找&#xff0c;如果找不到的…

LeetCode-1003. 检查替换后的词是否有效

题目链接 LeetCode-1003. 检查替换后的词是否有效 题目描述 题解 题解一&#xff08;Java&#xff09; 作者&#xff1a;仲景 题挺难懂的&#xff0c;很绕&#xff0c;然后读懂了就很简单了 就是说本来是一个字符串s&#xff0c;abc三个字符可以随便放在s原本字符串的左边或…

删除游戏-类似打家劫舍

198. 打家劫舍 - 力扣&#xff08;LeetCode&#xff09; 1 熟悉打家劫舍 你是一个专业的小偷&#xff0c;计划偷窃沿街的房屋。每间房内都藏有一定的现金&#xff0c;影响你偷窃的唯一制约因素就是相邻的房屋装有相互连通的防盗系统&#xff0c;如果两间相邻的房屋在同一晚上被…

java+微信小程序,实现chatgpt聊天小程序

chatgp持续火爆,然鹅会用的人其实挺少的,现在使用异步请求的方式,基本可以实现秒回复。并且还基于webSocket编写了一个微信小程序来进行交互,可以直接使用微信小程序来进行体验。 现在我将所有代码都上传了github(链接在文章结尾),大家可以clone下来,部署到服务器上,真…

shell命令

shell命令 打开文本编辑器(可以使用vi/vim创建文本),新建一个test.sh文件&#xff0c;输入一些代码&#xff0c;第一行为固定写法 #!/bin/bash echo hello word#!是一个约定的标记&#xff0c;他告诉系统这个脚本使用什么解释器执行 shell中注释 1.单行注释使用# 2.多行注释…

在Linux服务器上(非root权限)配置anaconda和pytorch的GPU环境

本人小白一枚&#xff0c;加入了导师的课题组之后使用学校的服务器开始炼丹&#xff0c;但是光是配环境就花了好几天&#xff0c;特此记录下。。。。 选择你趁手的工具 链接远程服务器的终端工具有很多&#xff0c;例如xshell等&#xff0c;我选择是的finalshell 下载教程 【…

敏捷ACP.敏捷估计与规划.Mike Cohn.

第一部分 传统规划失败的原因 vs 敏捷规划有效的原因 传统的项目规划方式往往会让我们失望。要回答-一个 新产品的范围/进度/资源的组合问题&#xff0c;传统规划过程不一定会产生令人非常满意的答案和最终产品。以下- -些论据可以支持这个结论: ●大约2/3的项目会显著超…

Linux设备驱动模型(一)

一、sysfs文件系统 sysfs是一个虚拟文件系统&#xff0c;将内核总的设备对象的链接关系&#xff0c;以文件目录的方式表示出来&#xff0c;并提对设备的供读写接口。 二、kobject kobject是内核中对象表示的基类&#xff0c;可以认为所有的内核对象都是一个kobject kobject单…