Halcon实现实时骰子识别

Halcon实现实时骰子识别

输入形式:.avi视频文件

视频内容:背景书上分批掷骰子
手机拍摄,效果有限
目标:锁定图书区域;完整的图像校正;确定每个骰子的点数,计算骰子的总数和总点数

效果:bilibili

1. 锁定书本区域

rgb图像的1通道对书本的颜色最敏感,在1通道内做阈值分割
Halcon实现实时骰子识别

按图书面积最大的特征选择图书

2. 完成图像矫正

目标是将窗口锁定到书的区域

  • 使用 open 操作去除所选区域的毛刺
  • 将选定区域转换为凸多边形
  • 化为凸多边形化为xld格式
  • 使用 segment_contours_xld 算子分割xld为多条直线,并选择分割依据为直线,这样得到了四个xld部分
    Halcon实现实时骰子识别
  • 根据点的横纵坐标大小,得到四个角点,从左上角开始按顺时针顺序存入数组。
  • 将四个角形成的四边形转换为水平矩形,裁剪掉四边形区域
    Halcon实现实时骰子识别

3. 识别骰子

3.1 锁定ROI

如何确定:

使用灰度来选择骰子的区域效果不是很好:

1.背景中也有偏白色的部分,加上书本和骰子有时反光,很难完全隔开

2.骰子部分和背景部分的白色重叠起来时很难分开这两部分
Halcon实现实时骰子识别

利用骰子中圆点的圆度特性并不理想:有很多部分与圆点的形状和大小比较接近,

结合以上两种:

首先利用灰度选出包含骰子的范围,然后利用骰子的形状特征来进一步选定ROI

  • 增加对比度,灰度阈值分割
    Halcon实现实时骰子识别
  • 使用面积和空隙数选择面积
    Halcon实现实时骰子识别
  • 填充,做膨胀操作,防止边界上的部分筛区被过滤掉
  • 确定大的ROI区域
    Halcon实现实时骰子识别
  • 使用边缘找到点
    Halcon实现实时骰子识别
  • 骨骼
    Halcon实现实时骰子识别
  • 筛选圆 [‘width’,’height’,’anisometry’,’holes_num’,’roundness’]
    Halcon实现实时骰子识别

​ 发现还有一小部分筛不出来,再过筛

  • 圆核做膨胀,选定ROI
    Halcon实现实时骰子识别
  • 再次做阈值分割,根据特征筛选,划定最终ROI
    Halcon实现实时骰子识别
    Halcon实现实时骰子识别

3.2 划分每一个骰子

核心:解决相邻骰子之间的粘附问题,解决骰子与背景之间的粘附问题

方法:使用分水岭算法放大各个区域的分离度

  • 做距离分布图 distance_transform
    Halcon实现实时骰子识别
  • 分水岭算法 watersheds_threshold
    Halcon实现实时骰子识别
  • 将盆地图与原区域图做交集运算,筛选一下特征 intersection
    Halcon实现实时骰子识别Halcon实现实时骰子识别

3.3 对每个个筛子计数

  • 选择单个区域
    Halcon实现实时骰子识别
  • 数数
    Halcon实现实时骰子识别
  • 循环通过每个区域

参考文章:https://blog.csdn.net/m0_47472749/article/details/120185047

若想参考halcon代码:https://download.csdn.net/download/weixin_42691563/85006520

C#部分非常简单,没有分享的必要

文章出处登录后可见!

已经登录?立即刷新

共计人评分,平均

到目前为止还没有投票!成为第一位评论此文章。

(0)
社会演员多的头像社会演员多普通用户
上一篇 2022年3月21日
下一篇 2022年3月21日

相关推荐