3

我正在做一个骰子价值识别爱好项目,我想在 Raspberry Pi 上运行。目前,我只是在学习 OpenCV,因为这对我来说似乎是最难的事情。我已经走到了这一步,我已经扩张、侵蚀和精巧地过滤掉了骰子。这给了我一个轮廓层次结构。图像显示了父轮廓的边界矩形:

在此处输入图像描述

我的问题是:我将如何计算点数?为面值做一些模板匹配更好,还是我应该在数学上测试一个点是否在边界框中的有效位置?

4

3 回答 3

3

可能有多种方法可以做到这一点:

  1. 使用孔填充,然后使用形态学算子过滤圆。
  2. 更简单的方法是使用白色像素密度(白色像素的百分比)。五点将具有更高的白色像素密度。
  3. 使用图像矩(表示图像形状和结构的数学属性)来训练不同类型骰子面的神经网络。

参考:形态学 http://blogs.mathworks.com/pick/2008/05/23/detecting-circles-in-an-image/

于 2013-08-13T14:40:38.653 回答
1

正如 Sivam Kalra 所说,有许多有效的方法。

我会选择模板匹配,因为它应该是健壮的并且相对容易实现。

  • 使用精明图像中的绿色区域,将每个找到的骰子面从原始灰度图像复制到较小的搜索图像中。搜索图像应略大于模具面,并且大于您的 6 个图案图像。
  • 可选地标准化搜索图像
  • cvMatchTemplate与 6 种可能的骰子模式中的每一种一起使用(我推荐 CV_TM_SQDIFF_NORMED 算法,但测试哪个效果最好)
  • 在结果图像中为 6 个匹配项中的每一个找到并存储全局最小值
  • 从 0° 到 90° 以 ~2° 的步长旋转搜索图像,并为每一步重复模板匹配

所有步骤中最小值最低的骰子图案是正确的。

于 2013-08-13T16:36:00.253 回答
0

轮廓层次结构可能是一个很好且非常简单的选择,但您需要一个垂直的视野。

所以你可以用轮廓来做,但用 som 阈值拟合圆圈

(对不起我糟糕的英语)

于 2016-12-11T13:05:27.893 回答