Halcon实现实时骰子识别

Halcon实现实时骰子识别


效果bilibili

输入形式.avi视频文件

视频内容:以一本书为背景,在其上面分批次掷骰子
手机拍摄,效果有限
目标:锁定书本区域;完成图像矫正;识别每个骰子的点数,计算总骰子数和总点数


1. 锁定书本区域

rgb图像的1通道对书本的颜色最敏感,在1通道内做阈值分割
在这里插入图片描述

通过书本面积最大的特征选定书本

2. 完成图像矫正

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

  • 使用开运算去一下选定区域毛刺

  • 将选定区域化为凸多边形

  • 化为凸多边形化为xld格式

  • 使用segment_contours_xld算子分割xld为多条直线,并选择分割依据为直线,这样得到了四个xld部分
    在这里插入图片描述

  • 根据点的横纵坐标大小判断获取四个角点,从左上角开始按照顺时针排序存入数组

  • 将四个角点所构成的四边形做投射变换为一个水平的矩形,并且裁剪出四边形的区域
    在这里插入图片描述

3. 识别骰子

3.1 锁定ROI

确定方法:

使用灰度选定骰子的区域,效果不太理想:

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

2.骰子部分和背景部分的白色重叠起来时很难分开这两部分
在这里插入图片描述

利用骰子里面圆点的圆度特征,也不理想:有很多部位也比较接近圆点的形状大小、

结合上面两者:

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

  • 增加对比度,灰度阈值分割
    在这里插入图片描述

  • 利用面积和空洞数量选择区域
    在这里插入图片描述

  • 填充,做膨胀运算,防止边界上有部分筛子区域被过滤没了

  • 确定大的ROI区域
    在这里插入图片描述

  • 用边缘来找圆点
    在这里插入图片描述

  • 骨架
    在这里插入图片描述

  • 筛选圆

    ['width','height','anisometry','holes_num','roundness']
    在这里插入图片描述

​ 发现还是有一小部分没能筛出去,之后再筛

  • 圆核做膨胀,选定ROI
    在这里插入图片描述

  • 再次做阈值分割,根据特征筛选,划定最终ROI
    在这里插入图片描述
    在这里插入图片描述

3.2 划分每一个骰子

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

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

  • 做距离分布图

    distance_transform
    在这里插入图片描述

  • 分水岭算法

    watersheds_threshold
    在这里插入图片描述

  • 将盆地图与原区域图做交集运算,筛选一下特征

    intersection
    在这里插入图片描述

    在这里插入图片描述

3.3 对每个个筛子计数

  • 选定单个区域
    在这里插入图片描述

  • 计数
    在这里插入图片描述

  • 循环每个区域


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


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

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

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值