python图像识别

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

  1. 给定图像(500 x 500)pxs(1色背景)
  2. (50×50)像素将只有1个几何graphics(三angular形或方形或smaleyface :))。
  3. python会对graphics进行识别并显示几何graphics。

任何链接? 任何提示? 任何API? thxs 🙂

一个典型的Python工具链将是:

  • 使用PIL阅读您的图像
  • 将它们转换成Numpy数组
  • 使用Scipy的图像filter( 线性和秩序 , 形态 )来实现您的解决scheme

为了区分形状 ,我将通过观察背景的形状来获得其轮廓。 然后我会使用angular点检测algorithm(例如Harris)来检测angular点的数量。 一个三angular形有三个angular落,一个正方形的四个,还有一个笑脸没有。 这是一个用Scipy进行哈里斯angular点检测的python 实现 。

编辑:

正如你在评论中提到的那样,博客文章没有提供产生algorithm所需的高斯内核的函数。 下面是一个来自Scipy Cookbook的例子(很好的资源btw):

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() 

OpenCV有blob分析工具,它会给你的形状,你可以喂你喜欢的模式识别algorithm的指标:)例如。 矩形的面积/(高度×宽度)为1.0时,圆的比例约为0.78。

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

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

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

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

[我不记得这个技术叫什么了,但是它类似于邮局怎么写笔迹]如果你只能处理非曲面曲面,你可以做边缘检测,然后在交叉点处进行采样,得到近似值相似。