在前面的博客里面
我有发布过两个例子
一个是识别条码 一个是识别回形针个数和方向
识别条码用到了内置的算子
create_bar_code_model
halcon这个算子还是蛮强大的
我当时用工业相机去实时采集 很多拍下来的条码都能显示正确
既然后面涉及到了个数的识别
然后我想看更多的例子
好的 这个时候 我们点击一下halcon示例
在搜索栏输入 count
可以看到 关于个数的识别 halcon有三个示例程序
给大家翻译一下哈
第一个是识别瓶子个数,可以看到是用瓶口来识别的
第二个是识别鱼条个数(我不知道是什么,感觉想在识别超市里卖的小香肠)
第三个是识别小球,或者说是小石头什么的吧
那么在识别糖豆的时候接触到了两个很有意思的函数
腐蚀与膨胀
在识别中 :这是一个非常重要的概念
大家可以看图中紧挨着的小球
当我们直接去识别的时候
截图来自教程三
用connect 函数进行区域连通处理
这些紧挨着的小球 会被识别成一个
后面如果直接获取个数对象 那么这些玩意是识别不出来的
当然如果你给的识别区域面积足够大 他们会被识别成一个
这个时候 我们需要做一件什么事情呢
那就是进行开运算
那就介绍一下开运算和闭运算吧
不对 应该先介绍腐蚀与膨胀
膨胀操作会扩大(粗化)图像中物体的轮廓,可以用来弥补(填充)物体间的孔洞,强化离散点,代价是导致物体的面积比原来的面积要大。
腐蚀操作会收缩(细化)图像中物体的轮廓,可以用来断开(分离)物体间的连接,消除离散点,代价是导致物体的面积比原来的面积要小。
开运算是使用同一结构元素对图像进行先腐蚀后膨胀的操作,可以用来平滑物体的轮廓,断开物体间较窄的连接,消除物体边沿尖锐的突出部分。
闭运算是使用同一结构元素对图像进行先膨胀后腐蚀的操作,可以用来修正物体的轮廓,填充物体间较窄的连接。
直接看文字应该只能理解一般 那我们图文并茂
第一张是原图
第二张进行了腐蚀操作
第三张进行了 膨胀操作
就行进行了我们所说的开运算
现在大家可以看到 图一中那些最开始连接着的小球
到了第三张图去还原的时候全部都分开识别了
原halcon示例太长 我们取核心代码
read_image (Image, 'pellets')
get_image_size (Image, Width, Height)
binary_threshold (Image, LightRegion, 'max_separability', 'light', UsedThreshold)
opening_circle (LightRegion, Region, 3.5)
connection (Region, ConnectedRegionsWrong)
erosion_circle (Region, RegionErosion, 7.5)
connection (RegionErosion, ConnectedRegions)
dilation_circle (ConnectedRegions, RegionDilation, 7.5)
count_obj (RegionDilation, Number)
解释一下他的操作
打开图片
进行二值化阈值处理
使用开运算筛选半径大于3.5的圆形
然后进行连通处理
然后进行腐蚀操作分开小球
然后进行连通处理 小球分开
然后在进行膨胀操作 进行还原
然后数个数
这样就是完整的操作流程了
图像识别其实需要的知识面挺广的
我们这些小打小闹只是做一个入门的操作
熟悉了一下Halcon
当我们遇到更加有难度的图像时
我们该如何去识别
那就需要更多的知识体系了
我最近也开始看一本书了
准备把重点 给大家记录下来
让大家学习起来更轻松
有难度的事情就交给我吧!
如果要学习Halcond的话可以关注一下我哦