所以我希望能够识别图像中的模式(例如数字 4),我一直在阅读不同的算法,我真的很想使用最近邻算法,它看起来很简单,我根据本教程理解它: http: //people.revoledu.com/kardi/tutorial/KNN/KNN_Numerical-example.html 问题是,虽然我知道如何使用它来填充缺失的数据集,但我不明白如何将它用作模式识别工具来瞄准图像形状识别。有人可以阐明该算法如何用于模式识别吗?我已经看过使用 OpenCV 的教程,但是我真的不想使用这个库,因为我有能力自己进行预处理,而且我会为应该是一个简单的最近邻居而实现这个库似乎很愚蠢算法。
3 回答
您只需(简单地?)必须为您的数据定义“距离”的度量。
假设您已经将大图像分割成小图像,每个小图像对应一个要分类的文本字符。假设我们正在处理数字单色图像,因此每个图像都表示为(例如)0-255 整数范围(亮度)中的值(像素)的矩形矩阵。还假设(NN 是一种“监督分类算法”)您有很多已经分类良好的图像(您的训练集)。
给定一个新的小图像,您必须定义两个图像之间的距离,以便选择训练集中最接近的图像,并将其“标签”选为识别的文本字符。
一种天真的方法是采用像素差(例如平方和)。但是这个距离度量对平移(以及旋转和缩放)很敏感,我们通常不希望这样。另一种方法是计算傅里叶变换的模,它是平移不变的(但这还不够)。从这里您可以开始 - 并意识到这个问题是困难的,并且这种分类需要大量的工作才能以可接受的方式执行。
我在摄像机的实时姿势识别中使用了 K-Nearest-Neighbor 算法进行姿势识别。我建议您使用 Matlab 来训练和测试数据集,因为它有 PRToolbox 用于此目的,并且有很多帮助和示例。最重要的是你正确地选择了能够稳健地表示每个类的特征。一旦你有了特征(这将是一组值,比如颜色、面积、位置......)和类,你需要样本来训练分类器(例如 KNN)。与分类器同样重要的是如何选择训练样本。然后你必须测试分类器。
尝试不同的训练集、不同的特征、不同的分类器,因为 KNN 可能不是最适合您的数据类型的方法。
希望这个对你有帮助。