Android上的标记识别(识别Rubik的立方体)

时间:2010-03-05 22:32:39

标签: android image-processing computer-vision augmented-reality rubiks-cube

我正在为Android开发增强现实应用程序,该应用程序使用手机的相机识别魔方的每个面上的彩色方块的排列。

我不确定的一件事是我将如何检测和识别立方体每个面上的彩色方块。如果你看一下魔方,你可以看到每个方格都是六种颜色中的一种,带有黑色的薄边框。这让我认为应该相对简单地检测一个正方形,可能使用现有的标记检测API。

Rubik's Cube

我的问题是,这里有没有人有图像识别和Android的经验?理想情况下,我希望能够实现和现有的API,但如果有人能指出我正确的方向开始,这将是一个有趣的项目。

非常感谢提前。

5 个答案:

答案 0 :(得分:5)

您想将相机对准立方体,让它了解配置吗?

识别照片中的物体是一个开放的AI问题。因此,您需要对问题进行相当大的限制才能获得任何牵引力。我建议从以下内容开始:

  1. 立方体将从正好12英寸的距离拍摄,100W光源直接在相机后面拍摄。立方体将对角设置,因此它恰好呈现3个面,中间有一个角。相机将被定位,使其直接聚焦在中心的立方角上。

  2. 将拍摄一张照片。然后立方体将垂直和水平旋转180度,以便其他三个面可见。将拍摄第二张照片。由于您确切知道每个面预期的位置,因此从每个区域抓取几个像素,并假设该方块的颜色。请记住,立方体通常会被扰乱,而不是如图所示。所以你总是要看9 * 6 = 54个小方块才能得到每个方块的颜色。

  3. 这两张图片中的信息定义了立方体配置。在相同配置中生成多维数据集的图像,并允许用户确认或更正它。

  4. 拍摄6张照片可能更简单 - 每张照片中的一张,并以明确的顺序在脸部周围旅行。请记住,每个面的中心方块不会移动,并为该面定义正确的颜色。

    完成配置后,可以使用OpenGL操作旋转立方体切片。这将是一个包含数百行代码的程序,用于定义和旋转立方体,以及您为图像识别所做的任何事情。

答案 1 :(得分:1)

除了彼得所说的,最好在用户拍摄照片时在立方体图片上叠加引导线。然后,用户在引导线内排列立方体,无论是单侧(方形引导线)还是三条边(透视中的三个方格)。您还可能希望让用户指定每行中的彩色框数。在您的代码中,将颜色应该放在每个彩色框的中心,并将其与其他颜色框(在某个容差级别内)进行比较,以识别颜色。除了向用户提供识别结果之外,允许用户对识别的颜色进行更改将是很好的。看起来不需要花哨的图像识别。

答案 2 :(得分:0)

好主意,我也计划使用计算机视觉和标记探测器,但是另一个项目。我仍然在寻找网上是否有任何可用信息,例如:将openCV或ARtoolkit链接到Android SDK。如果您有关于如何链接计算机视觉API的任何其他信息,请告诉我们。

很快见到你,祝你好运!

答案 3 :(得分:0)

NYARToolkit使用标记检测,使用JAVA(以及用于Windows设备的托管C#)。我不知道它在Android平台上有多好用,但我已经看到它在Windows移动设备上使用,并且做得非常好。

祝你好运,编程愉快!

答案 4 :(得分:0)

我建议查看Android OpenCV库。您可能想要检查blob检测算法。您可能还需要考虑Hough线或Contours来检测四边形。