- 博客(81)
- 问答 (2)
- 收藏
- 关注
原创 C#标准Mes接口框架(持续更新)
由于近期我做了好几个客户的接入工厂Mes系统的需求。但是每个客户的Mes都有不同程度的定制需求,原有的代码复用难度其实很大。所以打算将整个接入Mes系统的框架单独拿出来作为一个项目使用,同时因为不同的设备接入同一个Mes系统,所以代码的迁移规范同样非常重要。
2025-01-24 10:30:15
1423
原创 C#Object类型的索引,序列化和反序列化
最近在编写一篇关于标准Mes接口框架的文章。其中有一个非常需要考究的内容时如果实现数据灵活和可使用性强。因为考虑数据灵活性,所以我一开始选取了Object类型作为数据类型,Object作为数据Value字段,String作为数据Key字段,形态与Dic的模式比较相似。但是在实际使用过程中,由于Object可以存储任意类型,但是显性类型指向Object,Type指向数据源类型。
2025-01-23 16:35:00
681
原创 C# OpenCV 通过高度图去生成轮廓点集
我们通过高度图找到了我们想要的点集,但是通常情况,点集过于复杂,实际生成的轮廓不够好看。所以我们需要对点集进行筛选。同时一开始我是仅生成矩形轮廓,对于部分形状特别的检测内容会出现检测轮廓的面积于实际面积相差过多的情况,所以需要生成成多边形形状,但是多边形的边数不易过多。最终选取10边形作为参考。
2024-11-18 11:03:27
598
1
原创 C# OpenCV 根据点集截取图像
常用的转换为List《Point》的代码。通用方法,适用于各种形式的图像类型。仅适用于CV_8UC1的图像。
2024-11-18 10:50:32
358
原创 C#由窗体原子表溢出造成的软件闪退的问题解决方法
由于在MS.Win32.UnsafeNativeMethods.RegisterClassEx产生了报错信息,但是一直向外部抛出错误但始终没有被捕捉成功,直到报错被UI线程捕获,但是仍然没有进行处理,所有造成WPF的应用闪退。至此,从上到下大概花费了2天半的时间(加上重写好算法内容),算是按时完成。由于这个报错的关键是,这个报错的全部信息都来自于微软的官方库,我们不能通过报错信息去定位我们的代码区域。并且由于此设备的代码多达几十万行,所以我也不能通过梳理代码逻辑去检查这个问题,事实证明这个小问题确实发现不了
2024-09-28 09:16:17
1674
原创 C#异步方法的简介和常用所遇到的异步任务的解决办法
异步编程的概念,如何取消异步编程,异步任务如何超时,异步线程通讯,再同步方法中调用异步方法,ValueTask,在异步应用和取消长时间执行的同步任务,同时完成任务
2024-08-27 23:01:13
1200
原创 halcon瓶身表面缺陷检测-滤波差值法
滤波差值法的核心在于如何对滤波器的选择和测试参数。其中,在有大量噪点的缺陷检测项目和有大量边缘的项目中不适合使用。例如皮质表面脏污检测等。滤波差值法受到边缘和噪点的影响非常大,可以在实际使用中多加尝试即可。
2024-04-17 09:59:39
811
原创 Halcon颜色抽取-多产品颜色(MLP)
有不清楚的地方,可以移步前言的链接查看。mlp常用的场景一般都是单颜色区分,相当多时候是在预处理中进行。但是作为项目上,常见于各种颜色有色差的分类。比如产品有色差的情况,也是可以用颜色抽取实现。
2024-04-11 23:50:20
809
原创 halcon,快速hobject转bitmap格式(20ms以下)
在实际项目中经常会将halcon的图像格式转化为bitmap的格式。例如在载入tensorflow的训练模型时,一般不支持对hobject格式的输入,包括很多程序。所以就需要一个具有较快速度的转化方式。本文中的转化方式,在24位彩色图中平均在15ms(4096*2160),32位彩色图18ms,8位灰度图,10ms。
2024-04-10 18:15:41
1209
1
原创 halcon缺陷检测-印刷品检测(差异化模型),键盘字符缺陷检测
上面其中重点提到了对ROI的选取。核心的关键在于如何去矫正图像,矫正区域。这个图像,由于已经预先固定在一个指定的区域,所以在检测时可以通过ROI去框选检测。而且每个检测区域有着较大的距离,所以在框选ROI时误差相对会比较的少。对于上图而言20个检测区域,实际总共检测耗时在70ms左右。检测速度可以达到相当快,并且检测精度高。
2024-04-09 19:22:43
3409
1
原创 Halcon3D表面平面度和缺陷检测-平面矫正法
我的上一篇博客针对了对常见的平面度检测的方法——平面差值法做了简单的讲解。但是我也提到平面差值法有诸多的缺点,如无法定位异常位置,无法忽略噪点的影响等。所以现在使用平面矫正法可以有效的避免上述情况在文章开头,我写上了一篇使用平面差值法的平面度检测,他们互相的差距在于,平面差值法更简单,适用于条件良好的产品,或者无法进行平面矫正的产品。但是通常情况来说,使用平面矫正法是最为常见的表面度检测和平面缺陷检测。
2024-03-30 10:48:04
2153
1
原创 Halcon3D表面平面度检测-平面差值法
通常我们对表面平面度进行检测时,通常使用2种方式。1:通过大卷积核的高斯滤波进行拟合平面,然后求取拟合平面与3D模型间的点间的距离。2:通过平面矫正,将被测试平面矫正到水平面后,对平面以上和平面以下的点云进行筛选。(关于平面矫正,可以点击文章开头链接查看)。本文主要讨论通过大卷积核的高斯滤波进行平面拟合,求取拟合平面与3D模型的距离。此方法,适用于对3D相机采集效果良好,并且无需标记,只输出NG情况的方案。
2024-03-29 16:43:37
2187
原创 Halcon3D倾斜平面矫正至水平面
当平面进行矫正后,即可对新的3d模型进行处理和检测。由于矫正平面受到倾斜平面上的噪点影响,可以预先进行高斯滤波,可以有效的提高矫正精度。*获取灰阶平面,计算灰阶平面位姿*创建平行于灰阶平面的面如上2行所述,获取到矫正参数后,可以对任意区域进行矫正。
2024-03-29 16:02:08
2915
7
原创 halcon模板匹配和旋转矫正
先预先定义一个固定的带角度的矩形ROI,角度为我们所需要修正的角度的方向,然后进行生成和创建模板,然后匹配模板,并将匹配成功的横纵坐标与角度进行图像旋转即可
2024-03-14 11:18:57
1194
原创 Halcon测量专栏-平行度
针对线线平行度的评价标准,所以预先定义直线1作为基准线,直线2作为被测线。对直线2上的2个端点对基准线计算距离,并求2个距离的差值,差值的数额即为平行度的误差
2024-03-12 11:24:48
848
原创 Halcon测量专栏-圆倒角
针对圆角的特性,由2条直线构成的圆弧,所以圆弧上位于2相交直线的中间。所以先获得2条直线的坐标,获取到2条直线的交点,然后再绘制2条线段的内接圆,然后以交点为起始点,内切圆圆心为终点,做一条线段,在做线段的垂线,相切于圆角,以垂线做为起始点,内切圆圆心作为终点,做N条采样直线,将获取到的采样点拟合成圆即可。
2024-03-12 09:39:54
666
原创 Halcon测量专栏-圆弧测量
圆上任意两点间的部分叫做圆弧。由于圆弧有正反的特性,即为有顺时针方向和逆时针方向,在确定圆弧时,也需要确定圆弧的方向。针对圆弧的问题。1:它与圆是相似的,都具备中心坐标和半径,还有起始和终点角度;2:定义一个圆弧方向,以顺时针为测量方向。
2024-03-11 17:27:49
1348
原创 Halcon测量专栏-直线度
直线度公差指单一实际直线允许的变动全量。用于控制平面或空间直线的形状误差,其公差带根据不同的情况有几种不同的形式。针对直线度的评价方式进行直线测量。1:先对初始直线进行直线测量,精准的判断出当前直线的起始和终点坐标。2:根据直线的角度和长度,以10个像素单位间隔进行测量矩形逐个测量,用于判断直线的误差。halcon所采取的实现方式,是如上所述。绘制理想直线,然后判断边缘在直线上的波动值
2024-03-11 11:46:17
1664
2
原创 Halcon测量专栏-圆度
圆度是指工件的横截面接近理论圆的程度,最大半径与最小半径之差为0时,圆度为0,测量工具为圆度仪,用途是测环形工件的圆度。圆度是限制实际圆对理想圆变动量的一项指标,其公差带是以公差值t为半径差的两同心圆之间的区域。圆度公差属于形状公差,圆度误差值不大于相应的公差值,则认为合格1.2圆度评价方式最小外接圆法:只适用于外圆。以包容被测圆轮廓且半径为最小的外接圆圆心为圆心,所作包容被测圆轮廓的两同心圆半径差即为圆度误差。最大内接圆法:只适用于内圆。以内接于被测圆轮廓且半径为最大的内接圆圆心为圆心,所作包
2024-03-11 11:02:52
2047
原创 Halcon棋盘格畸变矫正
通常我们使用的相机都是带有一定的畸变的,只是畸变的大小不同。对于我们常见的测量项目来说,对测量精度的要求很高,通常从相机镜头上进行优化,但是即使镜头优化或者成本原因,造成图像仍有一定的畸变时,我们就可是使用棋盘格标定板,进行畸变矫正。
2024-03-09 16:59:23
2073
原创 Halcon深度学习,异常值缺陷检测
异常值检测不同于语义分割的项目,异常值检测可以仅训练OK图像,不训练NG图像,但是使用NG图像训练可以显著提高准确度异常值检测通常运用在缺陷检测的项目里面,他的特点是,可以不训练NG图,训练速度快,多特殊缺陷可以快速识别。其次,可以针对图像中的缺陷类型不固定,缺陷区域不固定,物体大小不一等语义分割无法准确识别的缺陷。
2024-03-09 16:29:50
2928
8
原创 Halcon自动对焦技术验证
由于相当多的产品是具备封装好的软件和机械机构,不能在人为的控制相机的调焦。与此同时,使用的客户有可能为工厂的普工和技术工程师,所以在对客户的培训上有较大的难度,使用一个可以判断当前图像清晰程度的程序可以帮助完成相机的自动对焦。
2024-03-09 14:11:54
937
原创 Halcon3D篇-深度图与halcon模型互转
关于3D相机采图部分,可以参考我们LMISDK的二次开发程序:https://blog.youkuaiyun.com/m0_51559565/article/details/134404394彩色融合图效果。由于Win自带的图片查看并不能正常渲染Tiff图像。所有推荐一个免费tiff查看器:irfanview
2024-01-03 14:22:22
2708
1
原创 Halcon颜色提取,基于MLP自动颜色提取功能
算子中的2代表具有2种需要被区分的颜色。如果我们训练里面需要被区分的颜色有多种,那么我们需要修改指定的参数。并且效果显著,主要针对具有物体颜色需要被区分,或者由于打光效果或者来料不稳定造成的图像异常的情况,并且可以通过颜色快速提取特征的方式。第一:先对图像明显的区域进行需要区分的颜色进行选取,还有对背景选取。对于背景的选取,应尽可能的包含常见的元素,有助于大量提升背景的识别效率。需要注意的时查看对应的区域数组。这样子我们就可以避免出现对同颜色的部分,因为打光不均匀造成颜色识别异常的情况。
2023-12-26 14:14:38
1875
原创 Halcon深度学习,语义分割,预处理和部署过程
halcon在深度学习中提供了7种学习方式和例子。其中最为常见的为语义分割,一般使用与在需要标注显示的缺陷检测项目中。几乎所有的2D缺陷检测都可以使用语义分割作为项目部署。先上完整程序。
2023-12-06 16:04:08
3901
2
原创 上位机模块之圆形测量,基于halcon的二次开发
在编写通用上位机或普通上位机时,我们经常会遇到对多个产品或者有新增产品的情况,但是直接修改代码又会非常麻烦,所以直接使用通用的上位机模块与序列化可以快速解决不同产品的问题。在halcon的算子中针对常见的几何图像进行测量。其中add_metrology_object_generic可以对圆,椭圆,矩形,直线进行测量。主要内容可以直接查看文档。在halcon的文档中,对通用参数与位置的描述比较的模糊。通用参数与位置并不是一一对应的情况,而是相对的,在程序和上文列举了部分最常用到的参数。halcon文档解析。
2023-11-15 17:23:07
461
2
原创 上位机模块之序列化与反序列化,二进制序列化
在计算机中,任何数据的本质都是二进制编码的数据,所以我们在使用二进制序列化时可以将任意的数据进行序列化。在halcon中自带的算子提供了许多序列化方式,当然都是针对某些特殊的形式,比如模板匹配的模板文件.shm或者仿射变换矩阵等。由于他们本质上都是二进制的数据,所以在使用.net的序列化时,我们可以将我们的模块文件(Halconhandle)进行序列化保存。在常规的上位机编写中需要用到许多存储数据,存储对象的时候,我们存储数据的过程就是序列化,我们提取数据的过程就是反序列化。
2023-11-15 16:46:44
473
原创 上位机模块之halcon绘制ROI与获取ROI,在hsmartwindow实现
1.Halcon自带的.netROI是通过调用HDrawingObject中的算子实现的,获取ROI同样也是,如何去得到延申的其他ROI。在Halcon的帮助文档中,搜索SetDrawingObjectParams并在.net格式中我们可以找到halcon所支持的全部ROI区域的参数,我们根据区域参数去获取即可。在上位机中通常需要使用到绘制ROI模块或者获取已经绘制好的ROI区域的参数,在这里通过使用hsmartwindow窗体控件进行对ROI的绘制和获取。
2023-11-15 16:03:08
2172
1
原创 使用Halcon的HsmartWindows窗体控件显示3D模型
通常我们需要在上位机查看我们采集到的3D图像,但是我们采集的3D图像通常都是深度图或者数据形式,我们在转换成halcon的3D模型后在上位机上直接查看。所以需要单独显示一个类控件。第二:在程序中,由于显示3D模型是一个无限循环的过程,所以需要使用多线程显示,不然会出现程序卡死的情况。第一:在程序代码中,我们第一步需要将显示窗口绑定在我们的控件中,不然窗体上是什么都没有显示的。由于halcon的导出代码量非常大,所以以文件的形式上传。
2023-11-15 14:49:07
760
原创 LMI相机配置步骤,使用Gocator2550相机
启动加速器后,IP地址选择电脑主机IP地址,本机端口号,输入除8080外,随后启动加速器。若加速器启动失败,是由于加速器的版本与相机固件包版本不同导致,联系供应商提供对应加速器版本即可。使用浏览器启动IP地址:192.168.1.10随后点击进入即可(未开加速器则直接进入)进入后显示是当前电脑IP地址+加速器端口号。LMI加速器用于将相机cpu与电脑相连,通过共享电脑cpu算力,实现对行频的提高。1.设置移动速度,将频率=Y方向的像素量/(测量距离/移动速度)
2023-11-15 14:29:33
2332
原创 相机通用类之LMI激光三角相机(3D),软触发硬触发(飞拍),并输出halcon格式对象
LMI相机的运行逻辑并不难,一个主要是如何配置LMI相机,另一个是如何转换格式图像。代码中提供了3种转换方式,分别有:GenTL格式,带标定数据的halcon类型,不带标定数据的halcon类型。最近完成一个关于LMI激光三角(3D相机)采图的demo,记录并说明用法。如何配置LMI相机后面会再开一份博客进行讲解。
2023-11-14 17:53:32
2520
10
原创 相机通用类之海康相机,软触发硬触发(飞拍),并输出halcon格式对象
如何显示图像:可以访问我文章开头的博客,通过编写相机通用类即可,程序中是有继承通用类,通过访问相机通用的获取图像数据,从而传输图像数据。具体可以查看相机通用类。整体过程其实比较简单,由于海康相机没有像一些品牌相机一样可以直接使用序列号开启相机,所以我们需要通过对相机信息进行索引,根据索引到的相机序列号来开启相机。
2023-11-14 17:36:29
5737
10
原创 上位机模块之通用重写相机类
通用的相机类包含我们需要继承和重写的内容,其中方式有很多种,暂定列举现在常用的通用功能。分为:查找相机,根据相机序列号开启相机,关闭相机,软触发一次,硬触发(飞拍),重连相机,设置参数。在常用的视觉上位机中,我们通常会使用单个上位机匹配多个相机或者多品牌相机,所以在此记录一个可重写的通用相机类,用于后续长期维护开发。如果有新增通用功能在另外编写修改。
2023-11-14 17:25:55
1252
1
原创 上位机模块之TCP数据解析类
上位机通常会与PLC进行数据通讯在通讯时一般使用16进制与ACS2码进行发送,所以工具类中提供4个方法进行解析数据。1.将字符串集合转换为字节数组,集合为数字(十进制)3.将字符串指定区域的转换为ACS2,其他区域为数字。2.将字符串集合转换为字节数组,集合全为字母。使用方法,全部复制粘贴,创建对象即可使用。4.将字节数组的指定区域转换为字符串。对TCP首发数据提供4个方法。
2023-03-29 11:54:08
485
原创 C#上位机之NG选点
使用方式,将NG选点窗口复制到项目中,并链接好完成NG选点按钮控件,和picbox控件。通过使用提前将NG原图保存下来,并将路径传入方法中,在从NG选点窗口中创建的CSV进行获取到数据即可。获取数据经过处理,可以直接输出图像上的坐标而不是控件坐标。在定位项目中,经常会在生产的时候出现模板匹配找不到或者匹配错误的情况,在匹配不正确的时候需要快速人工确认方向,所以就需要一个人工选点的功能——NG选点。
2023-03-28 16:24:00
293
1
原创 C#上位机模块之独立窗口进度条
在上位机开启时,由于需要加载大量的控件,类和相关的文件。所以在加载时需要创建一个独立窗口的进度条用于在加载主窗口前预留一定的时间,并使得上位机更加美观。对进度条窗口进行设置,将图标与边框去除。对进度条设置:属性为public共有。第一步:新建一个窗体类。
2023-03-27 16:43:21
473
在vs2013的qt项目运行halcon的程序出现中断的错误
2021-11-19
TA创建的收藏夹 TA关注的收藏夹
TA关注的人