系列文章目录
家人们,小杨说事系列文章将保持一直更新的状态,将小杨哥在工作和生活中的心得分享给大家,后续计划将常见的2D定位类项目使用纯理论推导方式更新2D定位系列文章,将3D点云处理相关和深度学习相关(这两块目前也在学习ing)这两块也开放系列学习文章,当然还少不了分享学习机器视觉框架(从零到一搭建,基于WPF和QT两个版本),当然也需要更新一些其他人生感悟和其他领域的知识,有什么好建议希望家人们提出来哈,以下是已经发布的文章目录链接。
小杨说事-Halcon+LMI-Gocator测试让3D点云与2D灰度图融合效果,还你一个真实的三维世界-CSDN博客https://blog.csdn.net/qq_34836838/article/details/133971078?spm=1001.2014.3001.5501小杨说事-笨方法实现二维码棋盘格角点查找_果汁分你一半哈哈的博客-CSDN博客
https://blog.csdn.net/qq_34836838/article/details/133218301?spm=1001.2014.3001.5501【精选】小杨说事-基于Halcon的多相机坐标系统一原理个人理解_halcon多相机统一-CSDN博客
https://blog.csdn.net/qq_34836838/article/details/124059280?spm=1001.2014.3001.5501【精选】小杨说事-基于海康机器视觉算法平台的对位贴合项目个人理解_小杨说事视觉-CSDN博客
https://blog.csdn.net/qq_34836838/article/details/102856605?spm=1001.2014.3001.5501
前言
家人们是不是在2D机器视觉项目中,经常会使用模板匹配、边缘查找、卡尺找线等工作做一些粗定位工作,虽然说前期光源选型已经覆盖了大多数场景,但是总是会有一些特殊情况,比如对比度低、噪声高、物料类型多样等等,这些传统的定位工具需要一直调参,无法做到自适应,对于调试人员验收项目来说是相当苦恼。这不,小杨哥之前有幸听说过康耐视的VisionPro软件有一个智能抓边工具SmartLine,以下是官网的介绍及动态效果图,其中比较厉害的点有用了深度学习还能输出亚像素精度、训练运行都可以在CPU上。
一直苦于看看国内有没有那家机器视觉公司已经有类似功能,但是找了一圈发现没有,偶然间发现还是强大的Halcon在20.11版本上已经有类似的功能集成到深度学习语义分割模块中,当然目前他这个只能做到像素级别,但是也可以解决很多烦恼了。
好了,按道理该啰嗦几句专业术语,这是CSDN创作助手自动生成的,看起来这些名词可以引流,提高文章阅读率吧,哈哈。
深度学习边缘提取是指利用深度神经网络模型来检测并提取图像中的边缘信息。传统的边缘检测算法通常使用一些手工设计的特征来进行边缘检测,这些算法的性能往往依赖于特征选择的效果。而深度学习边缘提取方法则是通过训练卷积神经网络自动学习边缘特征,从而实现更加精确的边缘检测。
一、语义分割和特殊的边缘提取
首先带家人们看看Halcon中对语义分割的定义,图像语义分割是利用深度学习网络把一张输入图像上的每个像素进行归类,语义分割的结果是输出图像,其中像素值表示输入图像中对应像素的分配类。因此,在HALCON中,输出图像与输入图像具有相同的大小。对于一般的深度学习网络,表示更复杂特征的深层特征映射通常比输入图像小。为了获得与输入相同大小的输出,HALCON使用具有两个组件的分割网络:编码器和解码器。编码器确定输入图像的特征,例如,用于基于深度学习的分类。由于这些信息是以压缩格式“编码”的,因此需要解码器将信息重构为期望的结果,在这种情况下,就是将每个像素分配给一个类。注意,在对像素进行分类时,不会将同一类的重叠实例区分为不同的。
一张图来讲,Halcon语义分割可以输入图片中的苹果、柠檬、橘子和背景分开来,但是呢,三个苹果之间是单独属于哪个苹果、两个橘子之间是单独属于哪个橘子是分不开的。
这里说的边缘提取说的是语义分割中的一种特殊应用,他的模型被训练成只把图片分成两类,一个是“边缘”一个是“背景”,例如下图中就直接把菠萝在图像中的边缘提取出来了,剩下的都是当作背景处理了。
所以在Halcon中基于深度学习的边缘提取是基于深度学习的语义分割的一个特殊用例。因此,他的模型是为了提取边缘而专门设计和训练的分割模型。所以它保留了这种方法的优点和缺点。也就是说,该模型允许应用程序图像的广泛变化,而无需更改设置。
关于语义分割的更加详细的内容可以参考以下文章,因为以上只是介绍Halcon中的说明书部分内容,翻译的难免有些不到位之处,还要敬请谅解。
halcon 深度学习 语意分割 深度语义分割_mob6454cc6ba5a5的技术博客_51CTO博客https://blog.51cto.com/u_16099237/7910493
二、边缘提取的两种应用场景
Halcon中比较人性化的是,为分类和语义分割提供了预训练的神经网络。当训练自定义网络时,这些神经网络是很好的起点。它们已经在一个大型图像数据集上进行了预训练。我们在执行边缘提取任务的时候,相当于是直接使用这些预先训练的网络模型,类似的迁移学习一样。
边缘提取的第一种场景就是直接读取预先训练模型,对不同对比度的、不同脏污程度的、不同噪声程度的图像中的边缘进行提取,当然也是可以支持GPU和CPU的,这个Demo的名字大家可以在Demo集合中搜索segment_edges_deep_learning.hdev,然后在自己的电脑上跑一下效果。
上图效果可以看到,直接应用模型在如此低对比度情况下,边缘提取依然找到了所有的边缘,当然这个还要看置信度设置多少了,传统的模板匹配可能连模型都提取不出来,而且图像中的目标可能是各种各样的形状,模板匹配根本不适用,泛化能力差。小杨哥想到了一个好的应用场景,就是屏幕AOI检测中一些比较微弱的MURA缺陷其实可以直接使用这个边缘检测。
边缘检测的第二种场景就是针对特定边缘的提取,第一种场景是把图像中所有的边缘提取出来,但是有些任务需要提取特定边,那么Halcon早就替咱们考虑到了,他提供的预训练模型支持自己重新训练,也就是收集一些图片作为训练集,对每张图片想要的边缘标注,标注只需要把你感兴趣的边缘绘制出来即可,不一定是直线,可以是任意形状,这个Halcon也提供了一个Demo,可以在Demo集合中搜索segment_edges_deep_learning_with_retraining.hdev。下图是Demo中,读取训练集中的原图和手动标注过的边缘的位置及骨骼化处理提取的亚像素边缘效果。
这个案例只提供了10张训练图像,然后在另外10张测试集图片上就取得了比较好的效果,即使布的纹理不是直线状态,只要出现了类似训练集中的十字白色边缘就可以准确提取,效果比较好。
其实第二种场景还是有很多应用场景的,比如物料有很多厂家生产,材质、加工工艺不同导致咱们的定位特征成像效果不稳定(但是至少人眼能看到)我们可以直接搜集这样的图片,进行标注,让模型重新训练,应该会具有较好的泛化能力,兼容多种物料,从而省掉了反复调参的烦恼。
三、总结
当然,对于每一种深度学习方法,提取边缘的准确性都无法保证。然而,对于不需要高精度的应用程序,结果通常是令人满意的,Halcon本身也说了是像素级别的。其实,小杨哥也想学习一下Halcon中的预训练模型是怎么样的,奈何找了一圈资料很少,只找到了一篇知乎博客如下。
Halcon深度学习(预训练网络模型介绍) - 知乎 (zhihu.com)https://zhuanlan.zhihu.com/p/432956443?utm_id=0&wd=&eqid=e23db5a800000a34000000046492b832 最后啰嗦几句,咱们总是想去网上找资料学习,要么就是需要付费,要么就是基本没有,有的时候其实感觉挺孤独的,尤其是咱们自动化-机器视觉这一行,小杨哥希望以自己的绵薄之力,为大家提供一点思路,说不定咱万一哪天也火了,咱也可以知识付费赚点小生活费呢。
又水了一篇博客,哈哈,祝大家早日成为自己想成为的那个人,加油!