3

我给你带来了一个可能很复杂的问题,我很想得到你的帮助。请允许我直奔主题:

我需要一种算法或逻辑,在该算法或逻辑中,我使用鼠标(例如正方形)绘制一个形状,它变成一个完美的正方形,所有 4 个边都是直线并且完全规则。一个人画的正方形几乎不是完美的,但我希望它经过这个算法的“过滤器”之后,变成这样。

我希望的一个很好的例子是在游戏 Trine 中,向导的工作原理类似:你在屏幕上画一个形状,它变成最接近的形状,也就是说,如果你画一个类似于正方形的东西,它就会变成一个完美的方形盒子,但如果你画一个三角形,它就会变成一个完美的三角形盒子。就像它检测到它是什么样的形状,然后绘制一个更好的版本。

我想要这个游戏,只是为了让你知道这一切的目标是什么。

请帮我弄清楚这背后的算法或逻辑,或者至少告诉我这种动作的名称是什么(:

PS我添加了一个简单的图像,所以我的意图变得更加清晰=)

4

3 回答 3

2

如果我必须执行此任务,我将存储可识别的模式,并尝试为它们进行匹配。

从用户绘制的点中获取 minX、maxX、minY、maxY 值,这将帮助您缩放图案。选择缩放比例,使图案的纵横比为 X 和 Y 纵横比的平均值。

图案可以由一定数量的直线组成。模式匹配如果

  • 没有超出阈值的点
  • 图案中每个关键点附近至少有一个用户绘制的点

如果您匹配了图案,您将获得图案的关键点(计算图案的中心,以及尺寸/纵横比)。然后您可以用您的图像替换用户绘制的点 - 这可能与用于匹配的模式完全不同(想象一个圆圈)。

于 2013-04-18T15:36:02.893 回答
0

You don't have just an arbitrary shape, you also have the shape's path. So try counting corners. Decide on a angle threshold that will represent a corner. For each point, sample the next consecutive x number of points. Measure the angle between the first half and second half. If the angle surpasses your threshold, consider it a corner. (Obviously select the point that give you the best angle with the least amount of error, not just the first one that surpasses the threshold.) Mark the location of the corners and draw your shape to match.

Ellipses & lines: if no angles are detected, sample a few segments. Measure the orientation. If they are very similar, then line. If very different, then ellipse. If ellipse, find the bounding box and draw inside.

于 2013-04-18T16:19:57.147 回答
0

有很多方法可以做到这一点。你可以做到的一种方法是创建一个识别这些形状的神经网络。我会生成带有随机扰动的圆形、正方形、线条和三角形的变体,以复制“手绘”版本。然后,您希望将其表示为二维数组(其中已绘制的位置为 1,未绘制的位置为 0)。然后,您可以将此二维数组转换为n x n元素。神经网络的输出将是一个包含四个元素的向量,每个元素代表一条线、圆、正方形或三角形。然后,你将使用随机扰动的图像训练这个神经网络,直到你最终得到一个神经网络,它可以识别具有低于某个错误阈值的错误的输入。这实际上与识别手写数字非常相似。

其他方式包括:

于 2013-04-18T15:37:54.823 回答