石鑫华视觉 手机微信QQ:13450001061 / 18038383457

公司新闻

LabVIEW调用Halcon实现深度学习之DeepCounting

文章来源:石鑫华视觉网时间:2024-09-10 15:44:51 点击:67

LabVIEW调用Halcon实现深度学习之DeepCounting

视频号

B站

在之前的《LabVIEW HALCON图像处理入门教程(2024Q3)》增加了一个基于深度学习的Deep OCR的字符识别的例子。持续更新的《LabVIEW HALCON图像处理入门教程(24.09)》版本中,增加了一个基于深度学习的例子——模板匹配(DeepCounting深度计数)。这个例子同样是基于深度学习的。在深度学习的基础上,Halcon专门封装了一个HDlModelCounting (Class)深度计数的类。使用该类可以实现模板匹配功能。因为是基于深度学习的,所以效果上,比其他传统的算法,如基于灰度值、基于形状等,更容易匹配到目标。模板匹配的两个主要用途一个是用来计数,另一个是用来定位。这里基于深度学习的DeepCounting主要是用来计数。当然,要用来定位也可以,但是这个定位可能并没有传统算法那么精准。用来计数,则要实用很多,很差的特征也是可以统计数量的。

基于深度计数的模板匹配,还可以创建多个模板,从而同时匹配多个模板,这也是一个优势。在NI视觉的模式匹配中,早期其实也是基于特征的多模板匹配,不过性能很差,速度慢,所以后面放弃了。后面基于边缘的匹配,只有单个模板的匹配。要想再实现多模板匹配,则只能调用早期的基于特征的几何匹配,效率相对比较低下。而使用Halcon中的基于深度学习的多模板DeepCounting,则轻松处理多个模板,不同比例、角度的目标,均很容易匹配上。当然了,模板越多,比例要求越精密、角度要求越精密,则匹配速度越慢。

Halcon官方示例-管子

Halcon官方示例-烧杯

Halcon官方示例-杆子

深度计数在HDevelop环境中同样提供了两个示例,一个deep_counting.hdev,如上面的效果所示。另一个deep_counting_wordflow.hdev如下图所示:

创建模板

设置最小分数

匹配效果1

匹配效果2

匹配效果3

通常上面的Halcon官方的两个实例,参考其实现原理,调用HDlModelCounting (Class)类中的相关算子,可以在LabVIEW中实现相同的功能:

LabVIEW中实现基于深度学习的模板匹配DeepCounting

上面的效果中,实际上是有创建三个模板,匹配结果也是有三种颜色进行描述的(模板1红色,模板2绿色,模板3蓝色……参考二值调色板的颜色定义)。再看一下管子的其他两幅图像的效果:

管子图像2的效果

管子图像3的效果

基于深度学习的模板匹配,无论是单个模板,还是多个模板,不像深度OCR那样,需要采集大量的字符图像,然后进行标注训练,得到字符集。这里的模板本身都只需要一幅模板图像,在模型创建过程中,好像并不存在深度学习功能,深度计数模型创建时,根据设置的角度范围精度和比例范围精度来准备模型,在准备模型这个过程,实际上和NI视觉中的基于金字塔的模式匹配的模板创建过程是比较类似的,指定模板的角度、比例、金字塔级别等。这里的准备模型没有太多说明信息,感觉是没有涉及到太多深度学习的功能,只是一幅图像来处理,应该是没有涉及到深度学习的。但是从得到的模型文件来看,角度比例范围越大,精度越细致,则模型越大。感觉准备模型又像是有深度学习的介入。而后面的应用深度计数模型过程(搜索模板过程),好像也没有太多深度学习的介入。这个深度计数的深度学习模型,感觉上深度学习的介绍不是很深,甚至可以简单的认为是创建了多种模板、多个角度、多个比例的去在图像中搜索目标。所以这里深度计数的模板匹配比深度OCR要容易实现得多。

Halcon官方示例的杆子

创建一个烧杯的新模型并准备模型

图像分析

创建单个模板时,只匹配到了24个目标。所以,像上面这种图像,实际上是需要创建多个模板进行匹配的。

创建包含比例的模型图像分析

上面的效果是橙子树上的橙子进行计数的应用。创建了一个橙子的模板(原始图像中的绿色ROI是模板),然后比例范围是0.8~1.2,比例精度是0.1,这时就匹配到了10个橙子。

创建多个模板

而创建2个模板时(原始图像中画的绿色ROI即为模板图像),则匹配到了45个目标。数量有比较大的提升。

苹果计数

像水果这类的要计数,因为形状基本上都是不相同的,所以通常需要多做几个模板。而像下面这种包装类的,因为形状基本上是一样的,则通常只需要一个模板即可:

香烟装箱

饮料装箱

上面这些匹配计数,可以看到数量都是很准的,但是位置上,则可能使用者差一些了,从右边ROI图像中的十字靶标来看,位置都不是很准。所以这种深度计数的方法,用于计数会更好一些,用于定位的话,返回的坐标值就不太准了。


首页
84162741QQ
联系