Python图像识别
我想做一个简单应用的图像识别:
- 给定一张图片(500 x 500 像素,背景是单一颜色)
- 这张图片上只会有一个几何图形(可以是三角形、正方形或者小笑脸 :)),大小是(50 x 50)像素。
- 用 Python 来识别这个图形,并显示出它是什么几何图形。
有没有相关的链接?有什么提示吗?有没有API可以用?谢谢 :)
4 个回答
3
你提到的几何图形是50x50像素。如果这些几何图形的大小和方向是固定不变的,那么你就遇到了一个经典的模板匹配问题,这时候可以使用相关性方法。你可以在原始图像上或者边缘检测的结果上进行模板匹配。
如果大小(比例)和/或方向是任意的,那么可以使用傅里叶描述子。这些描述子对旋转和缩放是具有不变性的。
所有这些方法都可以通过OpenCV、NumPy或SciPy来编写代码实现。
10
OpenCV 有一些处理“斑点”的工具,这些工具可以帮你分析形状,并给出一些数据,这些数据可以用来喂给你喜欢的模式识别算法 :) 比如,矩形的面积和(高度 * 宽度)的比值是1.0,而圆形的比值大约是0.78。
32
一个典型的Python工具链可能包括:
关于区分形状,我会通过观察背景的形状来获取轮廓。然后,我会使用角点检测算法(例如Harris算法)来检测角的数量。一个三角形有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()