36

我想做的是一个简单应用程序的图像识别:

  1. 给定图像(500 x 500)像素(1 色背景)
  2. 图像将只有 (50x50) 像素的 1 个几何图形(三角形或正方形或 smaleyface :))。
  3. python会做图形的识别并显示几何图形是什么。

任何链接?任何提示?任何API?谢谢 :)

4

4 回答 4

32

一个典型的python 工具链是:

至于区分形状,我会通过查看背景的形状来获得它的轮廓。然后我会使用角检测算法(例如哈里斯)检测角的数量。三角形有 3 个角,正方形有 4 个,笑脸没有。这是使用 Scipy 进行 Harris 角点检测的 python实现

编辑:

正如您在评论中提到的那样,博客文章没有提供产生算法所需的高斯核的函数。这是Scipy Cookbook中的此类函数的示例(顺便说一句,资源很棒):

def gauss_kern(size, sizey=None):
    """ Returns a normalized 2D gauss kernel array for convolutions """
        size = int(size)
        if not sizey:
            sizey = size
        else:
            sizey = int(sizey)
        x, y = mgrid[-size:size+1, -sizey:sizey+1]
        g = exp(-(x**2/float(size)+y**2/float(sizey)))
        return g / g.sum()
于 2009-10-21T22:50:48.993 回答
10

OpenCV有 blob 分析工具,它会为您提供有关形状的指标,您可以为您最喜欢的模式识别算法提供这些指标 :) 例如。当圆形的比率约为 0.78 时,矩形的面积/(高 * 宽)比率为 1.0。

于 2009-10-21T21:30:01.733 回答
3

你点的几何图形是50x50 px。如果几何图形的大小和方向是固定的,那么您就有一个经典的模板匹配问题,适用于相关方法。您可以将模板匹配应用于原始图像或边界检测输出。

否则,如果大小(比例)和/或方向是任意的,则可以应用傅立叶描述符。这些描述符是旋转和尺度不变量。

所有这些方法都可以使用 OpenCV、NumPy 或 SciPy 进行编码。

于 2009-11-06T17:37:36.467 回答
2

如果您知道数据的状态空间,则可以使用主成分分析。使用 PCA,所有对象都必须摆好姿势(在屏幕中央)。PCA 不会进行检测,但它将对象分成独特的层,您可以在其中识别为三角形等。另请注意:这不是缩放或旋转不变的。

[我不记得这种技术叫什么,但它类似于邮局如何手写rec]如果您只能处理非弯曲的curvfaces,您可以进行边缘检测,然后在交叉点进行采样以获得近似值相似。

于 2009-10-21T21:18:17.593 回答