如何训练svm对英文字母图像进行分类
How to train a svm for classifying images of english alphabet?
我的目标是检测图像中的文本并识别它们。我已经实现了使用笔划宽度变换检测字符。如何识别它们?根据我的知识,我想通过检测特征点并从每张图像中提取特征向量,用我的不同字体的字母[图像]数据集来训练svm。[我使用了SIFT特征向量,使用kmean clustering等构建了字典]。
我以前检测过一个字符,我会提取这个字符的sift特征向量。我想把它输入到svm预测函数中。
我不知道如何使用svm进行识别。我很困惑!帮助我,纠正我在概念上的错误。。
我跟着这篇专栏文章认出了那个部分。这个turotial可以应用于识别字符吗。http://www.codeproject.com/Articles/619039/Bag-of-Features-Descriptor-on-SIFT-Features-with-O
SVM是一个监督分类器。要使用它,您需要具有与您试图识别的对象类型相同的训练数据。
步骤1-准备培训数据
训练数据由成对的特征向量及其相应的类标签组成。在您的情况下,您似乎已经为检测到的字符提取了基于SIFT的"单词袋"(BOW)特征向量。因此,对于你的训练数据,你需要找到许多不同字符的例子,为每个字符提取这个特征向量,并将它们与一个标签(有时称为类标签,通常是一个整数)相关联,你可能会将其映射到文本描述(例如,数字0可以映射到字符"a",依此类推。)
步骤2-训练分类器
SVM分类器将特征向量的阵列/Mat(每行一个)及其相关标签作为输入。在单独的验证集上调整SVM的参数(即,正则化参数C,以及如果适用的话,内核的任何其他参数)。
步骤3-预测看不见的数据
在测试时,给定SVM在训练过程中看到的而非的样本,您计算样本的特征向量(基于SIFT的BOW向量)。将这个特征向量传递给SVM的预测函数,它将返回一个整数。还记得之前在准备训练数据时,您将一个整数与每个标签关联起来吗?这是SVM为该样本预测的标签。然后可以将此标签映射到角色。例如,如果您将0与"a"、1与"b"等关联,则可以使用向量/哈希映射将整数映射到其文本对应项。
其他注意事项
您可以在这里查看OpenCV的SVM教程以了解详细信息。
注意:通常,对于初学者来说,最困难的部分(在获得数据之后)是调整分类器。我的建议是首先尝试一个简单的分类器(例如,线性SVM),它几乎没有参数可调。一个不错的方法是线性SVM,它只需要调整一个参数C。一旦您设法获得了一些不错的结果(这可以保证代码的其余部分正常工作),您就可以使用更"复杂"的分类器。
最后,您提取的训练数据和特征向量非常重要。训练数据必须与您试图预测的测试数据"相似"。例如,如果你预测路标中的字符,这些字符具有不同的字体、照明条件和姿势差异,那么使用由报纸/书籍档案中的字符组成的训练数据可能不会给你带来好的结果。这是机器学习中域自适应的问题。
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 如何使用OpenCV将RBG图像转换为HSV,并将H、S和V值保存为C++中的3个独立图像
- OpenCV EqualizeHist()从彩色图像创建黑白图像
- 将"打开的CV图像"中的"颜色"转换为整数格式
- 平均图像时图像损坏
- 在C++中使用GDAL可以将图像的像素坐标转换为lat,long吗
- 如何将图像传输到c++(dll)中的缓冲区,然后在c#的缓冲区中读/写
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 神经网络和图像分类
- OpenCV SVM 分类器图像识别
- 使用OpenCV在Android上使用神经网络进行灰度图像分类
- 使用Caffe从图像中分类手写数字
- 如何训练svm对英文字母图像进行分类
- 使用 SVM 和 BOW 进行图像分类
- 具有概率估计的多类图像分类
- haar分类器是否可以用于特定ROI中的检测而不是整个图像中的检测
- 用于对整个图像进行分类的OpenCV中的HOG
- 如何在OpenCV和c++中配置CvSVM进行图像分类
- 神经网络图像分类,最有效的解决方案/建议
- 图像中闪电类型的分类