python图像识别
我想要做的是一个简单的应用程序的图像识别:
- 给定图像(500 x 500)pxs(1色背景)
- (50×50)像素将只有1个几何graphics(三angular形或方形或smaleyface :))。
- 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形等。另请注意:这不是缩放或旋转不变的情况。
[我不记得这个技术叫什么了,但是它类似于邮局怎么写笔迹]如果你只能处理非曲面曲面,你可以做边缘检测,然后在交叉点处进行采样,得到近似值相似。