Csharp/C#教程:骰子面值识别分享


骰子面值识别

我正在尝试构建一个能识别两个6面骰子值的简单应用程序。 我正在寻找一些通用指针,甚至可能是一个开源项目。

两个骰子将分别为黑色和白色,分别为白色和黑色。 它们与相机的距离将始终相同,但它们在比赛场地上的位置和方向将是随机的。

骰子https://sofzh.miximages.com/c%23/www.freeimagehosting.net
(不是最好的例子,表面将是更鲜明的颜色,阴影将消失)

我没有开发这种识别软件的经验,但我认为诀窍是首先通过搜索具有主导白色或黑色的方形轮廓来隔离脸部(图像的其余部分,即桌子/游戏)表面,将以明显不同的颜色),然后隔离点数计数。 自顶向下照明将消除阴影。

我希望所描述的场景如此简单(阅读:常见)它甚至可以用作开发OCR技术或类似计算机视觉挑战的开发人员的“介绍性练习”。

更新:

我做了一些进一步的谷歌搜索,并发现了这个video ,奇怪的是,这正是我正在寻找的。 看来OpenCV项目到目前为止是我最好的选择,我会尝试将它与其他项目,OpenCVDotNet或Emgu CV一起使用 。

更新:
仍在苦苦挣扎,无法让Emgu CV工作。

想法,指针,想法等仍然非常受欢迎!

虽然图像训练是“非平凡的”,正如@Brian所说,这实际上是一个非常容易编写的程序。 你需要做的是为骰子开发haar分类器。 总共需要6个分类器。 分类器是良好图像识别的关键,哈尔分类器是目前最好的。 他们需要很长时间才能完成。 这里有一些很好的链接让你熟悉haar级联:

FAQ: OpenCV Haartraining

https://www.cognotics.com/opencv/docs/1.0/haartraining.htm

https://note.sonots.com/SciSoftware/haartraining.html

查看这些人youtubevideo,然后从他在video中提供的链接下载他的源代码,看看他如何在EmguCV中应用级联文件。 这将是你的基础。

https://www.youtube.com/watch?v=07QAhRJmcKQ

这个网站发布链接到一些来源的漂亮的小工具,增加了一点自动化来裁剪图像和创建haar级联创建所需的索引文件。 几个月前我使用它,我无法正常工作,但我修改了它,它对haar(不是HMM)很有用。 如果你想要我修改的版本回发,我会得到它。

https://sandarenu.blogspot.com/2009/03/opencv-haar-training-resources.html

虽然我没有为您提供任何技术帮助,但Dice-O-Matic mark II的制造商可能会提供帮助。

好的,

用于执行具有高抽象水平的图像识别的算法(如产生可靠的手写识别软件或面部识别软件所必需的抽象类型)仍然是当今计算机科学中最困难的问题之一。 但是,对于受限制的应用程序(如您所描述的应用程序)的模式识别,这是一个可解决且非常有趣的算法问题。

我会建议两种可能的策略来执行你的任务:

第一种策略涉及使用一些第三方软件,可以预处理您的图像并返回有关低级图像组件的数据。 我有一些使用pixcavator软件的经验, 这里有一个SDK。 Pixavator将挖掘您的图像并研究每个像素的颜色值之间的差异,以返回图像中各种组件的边界。 像pixcavator这样的软件应该能够轻松定义图片中的comopents的边界,最重要的是每个点子。 然后,您的工作将通过第三方软件返回给您的数据进行挖掘,并查找符合白色或黑色小圆形分区描述的组件。 您将能够计算出这些图像组件中有多少被分区,并使用它来返回图像中的点数。

如果你有足够的雄心在不使用第三方软件的情况下解决这个问题,那么问题仍然是可以解决的。 基本上,你需要定义一个圆形扫描仪,它是一个圆形结构的像素集,将扫描你的图像测试寻找一个点(就像一只眼睛可能扫描一张图片来寻找隐藏在图片中的东西)。 当您的算法“眼睛”扫描图像时,它将从图像中获取像素集(称为测试集)并与预定义的像素集(我们称之为训练集)进行比较并检查以查看如果测试集与预定义误差范围内的一个训练集匹配。 运行这样的测试的最简单方法是简单地将测试集中每个像素的颜色数据与训练集中的每个像素进行比较,以生成称为差异集的第三组像素。 如果您的差异集中的值足够小(意味着测试集与训练集足够相似),您将在图像上将该区域定义为点,然后继续扫描图像的其他部分。

这需要一点猜测并检查以找到正确的容错,以便你抓住每个点,而你不会测试积极的东西不是点。

图像识别非常重要。 您将不得不以某种方式限制输入数据,看起来您已经考虑过这一点。

您的问题让我想起了SudokuGrab的作者的博客文章 ,这是一个iPhone应用程序,允许您在报纸上拍摄数独谜题的照片,让它为您解决难题。 在post中,他讨论了在解决问题时将面临的几个问题,以及他如何克服这些问题。

这是模板中对象识别的一个熟悉的问题,我提供了一个我认为可能有用的答案。

虽然不同类型的分类器可能会运行良好,但我可能会尝试我首先概述的方法。 分类器通常很难实现,特别是要正确训练。 此外,当事情不起作用时,很难知道问题出在哪里:是你的分类器实现,你选择了错误的方法,参数是错误的,你没有正确训练,还是你只是运气不好?

不,如果使用simlpe图像处理方法和一些数学可以(轻松)解决问题,请远离分类器,模板匹配和神经网络。

另一种可能性是首先使用更通用的图像操纵/识别算法来固定骰子位置,然后旋转并将图像缩放到某种forms的标准(例如,已旋转为直的骰子的512×512像素灰度图像)。 然后尝试训练6个不同的神经网络来识别屏幕上不同数量的骰子。 AForge.Net是一个很好的可靠的人工智能(包括神经网络)库,应该会让你有一个相当的方式。

在这段video中,您可以看到您想要的行为。 作者正在使用多个白色骰子,但他提供了代码(python / opencv),也许你可以在其上构建你的项目。

上述就是C#学习教程:骰子面值识别分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/987931.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐