这是本人的第一篇CSDN文章,纪念一下~
之前想要学习模式识别,因此就从最简单的手写字符识别入手。具体来说就是基于Mnist 库的手写数字识别,此库有60000张训练集以及10000张测试集。之前在网上看过相关代码,是将需要识别的图像归一化为8*8像素的图像,然后将8*8=64个像素点排开作为特征值进行学习。在此处利用的是opencv 的svm模块进行的学习,学习出来的正确率为97.67%。 阅读代码后觉得选取特征太过简单,因此利用Hog 特征重新svm学习了一遍。学习时间大概从从前一天晚上开始,第二天早上去看的时候就已经结束了。电脑配置为i3 3.5G,内存8G。 重新学习一遍之后,对于10000测试集进行测试之后,正确率提高了1%,到了98.67%, 也算有所进步吧。Hog特征详细内容参考一下文章http://blog.csdn.net/zouxy09/article/details/7929348。利用Hog特征学习函数如下所示:
int HogReadTrainData(int maxCount)
{
//Open image and label file
const char fileName[] = "C:\\Users\\Desktop\\ocr\\train-images-idx3-ubyte\\train-images.idx3-ubyte";
const char labelFileName[] = "C:\\Users\\Desktop\\ocr\\train-labels-idx1-ubyte\\train-labels.idx1-ubyte";
ifstream lab_ifs(labelFileName, ios_base::binary);
ifstream ifs(fileName, ios_base::binary);
if( ifs.fail()