2010-05-02 39 views
10

所以我想能够识别图像中的模式(例如数字4),我一直在阅读有关不同的算法,我真的很想使用最近邻算法,看起来很简单,我也明白它基于这个教程: http://people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html 问题是,虽然我理解如何使用它来填充缺失的数据集,但我不明白我怎样才能将它用作模式识别工具来瞄准图像形状识别。请问有人可以告诉我们该算法如何适用于模式识别?我已经看过使用OpenCV的教程,但是我不想使用这个库,因为我有能力自己进行预处理,而且我似乎很傻,我只是为了一个简单的最近邻居而实现这个库算法。使用最近邻算法进行图像模式识别

回答

9

你简单地(简单地?)必须为你的数据定义一个“距离”的度量。

假设你已经将小图像中的大图像分割出来,每个小图像对应于你想分类的文本字符。让我们假设我们正在处理数字单色图像,因此每个图像都被表示为(例如)0-255整数范围(亮度)中的值(像素)的矩形矩阵。它也被假设(NN是一个“监督分类算法”),你有很多已经很好分类的图像(你的训练集)。

给定一个新的小图像,您必须定义两幅图像之间的距离,以便选择最接近的训练集,并将其“标签”选作识别的文本字符。

一种天真的方法是取像素的差异(例如平方和)。但是这个距离度量对翻译(以及旋转和缩放)很敏感,我们通常不希望这样做。另一种方法是计算傅里叶变换的模数,这是平移不变的(但这还不够)。从这里开始你就可以开始 - 并且明白这个问题很困难,而且这种分类需要大量的工作来完成可接受的工作。

2

我使用了K-Nearest-Neighbour算法在摄像机的实时姿态识别中进行姿态识别。我会建议你使用Matlab来训练和测试数据集,因为它具有PRToolbox用于此目的,并且有很多帮助和示例。 最重要的是你正确地选择了能够强有力地表示每个类的功能。 一旦你有了特征(这将是一组值,如颜色,面积,位置......)和类,你需要样本来训练分类器(例如KNN)。与分类器一样重要的是如何选择培训样本。那么你将不得不测试分类器。

尝试使用不同的训练集,不同的特征,不同的分类器,因为KNN不适合您的数据类型。

我希望你觉得这个很有用。