0

好的,所以我正在制作一个程序,我将在其中普遍接受可可触控板事件,并将这些事件映射到 NSBezierPaths。例如,我可能有一个仅来自一根手指的 NSBezierPath,它是圆形的(ish)。或者路径可能是右向箭头的形状。或者它实际上可能是两个并排的垂直 NSBezierPaths。我需要做的是查看这些 NSBezierPaths 并确定它们最相似的/形状模式......有没有人有任何指针?

谢谢

4

2 回答 2

1

这些可能会有所帮助

形状识别算法 - 堆栈溢出

谷歌搜索

其中大多数采用位图并尝试识别形状 - 这是一个复杂的区域。

hth

于 2012-03-27T13:02:58.950 回答
0

这可能已经晚了,但我只是想到了这一点,并想出了一些值得尝试的东西。

  1. 定义一组形状,每个形状都使用少量参数进行参数化。例如,定义一个通过它的中点(两个变量)和一个半径(第三个变量)的圆,一条通过两个端点(四个变量)的线,一个箭头作为带有头部大小附加参数的线,等等在。

  2. 现在您可以将其转换为最小化问题。对于路径上的每个点i和每个形状,确定到形状的最小距离作为形状参数的函数,di(params)。现在定义一个概率函数,告诉您路径与形状的相似程度。默认候选者是概率论中所谓的“卡方”:

chi^2 (params) = sum_i ( di(params) )^2

  1. 是每个形状参数的chi^2函数 - 因此下一步是最小化这个数量。通常可以使用库,但也可以手动实现最小化例程。

  2. 在最小化chi^2每个形状后,得到最小的形状是chi^2最类似于路径的形状。而且您已经拥有最适合的参数!

现在,让它正常工作很困难,并且需要大量时间和调整(找到更合适的概率函数、有效的最小化例程、一组好的基本形状等)。谷歌找到了更详细的解释——但如果没有其他信息可用,我会这样开始。

于 2012-04-16T08:25:45.283 回答