Python图像识别

36

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

  1. 给定一张图像(500 x 500像素,背景为单色)
  2. 图像上只有一个几何图形(三角形或正方形或笑脸:))大小为(50x50)像素。
  3. Python将对该图形进行识别并显示其几何图形。

有任何链接、提示或API吗?谢谢:)

4个回答

32

一个典型的Python工具链包括:

关于“区分形状”,我会通过查看背景的形状来获得其轮廓。然后,我会使用角点检测算法(例如Harris)检测角落的数量。三角形有3个角,正方形有4个角,笑脸没有角。这是一份使用Scipy实现的Python Harris角点检测的代码

编辑:

正如您在评论中提到的,该博客文章没有展示产生算法所需的高斯核函数。这里是一个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()

+1,好提示,Scipy似乎是另一个关键,我正在运行Harris示例 :) - panchicore
不,我无法运行这个Harris示例,代码似乎不完整 :( - panchicore
代码行:gauss = filtertools.gauss_kernel(3) ... gauss_kernel函数不存在 :( - panchicore

10

OpenCV拥有blob分析工具,它将提供有关形状的度量标准,您可以将其馈送到喜欢的模式识别算法中 :)例如,矩形的面积/(高*宽)比率为1.0,而圆形的比率约为0.78。


+1,好提示,OpenCV似乎是关键,我正在谷歌上寻找一些实际的例子... - panchicore
2
0.78的比率并不总是保证它会是一个圆。可能会有许多其他模式符合0.78的值。 - monksy
1
没错,你应该选择对于你正试图识别的对象集合来说最有意义的特征集合。填充比只是其中的一个特征。 - Harriv

3
你指定的几何图形尺寸为50x50像素。如果几何图形的大小和方向是固定的,则存在经典的模板匹配问题,适用于相关方法。您可以在原始图像或边缘检测输出上应用模板匹配。
否则,如果大小(比例)和/或方向是任意的,则可以应用傅里叶描述符。这些描述符是旋转和比例不变量。
所有这些方法都可以使用OpenCV、NumPy或SciPy编码。

2
如果您了解数据的状态空间,可以使用主成分分析。使用PCA时,所有对象必须被放置在屏幕中央。PCA不会进行检测,但它会将对象分离成唯一的层,您可以将其识别为三角形等。还要注意:这不是比例或旋转不变的。
[我记不得这种技术叫什么了,但它类似于邮局如何识别手写字] 如果您只能处理非曲面曲线,可以进行边缘检测,然后在交点处进行采样,以获得相似性的近似值。

好的,但是几何图形不仅仅居中 :) - panchicore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接