LabVIEW调用Halcon实现深度学习之DeepCounting
LabVIEW调用Halcon实现深度学习之DeepCounting视频号B站https://www.bilibili.com/video/BV1XupxeGEGG/在之前的《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图像中的十字靶标来看,位置都不是很准。所以这种深度计数的方法,用于计数会更好一些,用于定位的话,返回的坐标值就不太准了。
页:
[1]