资源简介
利用机器学习方法(分类)实现静态场景下的测试车辆检测
利用C语言或者Open_CV库,或者是MATLAB软件编写实现静态场景下的测视车辆检测。需使用机器学习方法。代码可以通过一个主函数直接运行出实验结果。
Data文件夹中包含train_34x94(训练集)和test(测试集)两个文件夹。其中,train_34x94文件夹中的数据用于训练模型,包含pos文件夹(内有550个正例样本)和neg文件夹(内有500个负例样本); Test文件夹中的数据用于测试。
在Test测试集中的总体检测性能的评价指标为Recall、Precision 和F-measure,写出对算法的性能评价和对实现中遇到问题的理解。
代码片段和文件信息
#include
#include
#include
#include
#include
#include
#include
using namespace std;
using namespace cv;
#define PosSamNO 549 //正样本个数
#define NegSamNO 499 //负样本个数
#define TRAIN false //是否进行训练true表示重新训练,false表示读取xml文件中的SVM模型
//HardExample必须设置为0,因为特征向量矩阵和特征类别矩阵的维数初始化时用到这个值
#define HardExampleNO 0
//继承自CvSVM的类,因为生成setSVMDetector()中用到的检测子参数时,需要用到训练好的SVM的decision_func参数,
//但通过查看CvSVM源码可知decision_func参数是protected类型变量,无法直接访问到,只能继承之后通过函数访问
class MySVM : public CvSVM
{
public:
//获得SVM的决策函数中的alpha数组
double * get_alpha_vector()
{
return this->decision_func->alpha;
}
//获得SVM的决策函数中的rho参数即偏移量
float get_rho()
{
return this->decision_func->rho;
}
};
int main()
{
//检测窗口(9434)块尺寸(88)块步长(21)cell尺寸(44)直方图bin个数9
HOGDescriptor hog(Size(94 34) Size(8 8) Size(2 1) Size(4 4) 9);//HOG检测器,用来计算HOG描述子的
int DescriptorDim;//HOG描述子的维数,由图片大小、检测窗口大小、块大小、细胞单元中直方图bin个数决定
MySVM svm;//SVM分类器
//若TRAIN为true,重新训练分类器
if (TRAIN)
{
string ImgName;//图片名(绝对路径)
ifstream finPos(“posSampName.txt“);//正样本图片的文件名列表
ifstream finNeg(“negSampName.txt“);//负样本图片的文件名列表
Mat sampleFeatureMat;//所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数
Mat sampleLabelMat;//训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示有人,-1表示无人
//依次读取正样本图片,生成HOG描述子
for (int num = 0; num {
cout << “处理:“ << ImgName << endl;
ImgName = “C:\\Users\\张建虎\\Desktop\\CVtest\\train_34x94\\pos\\“ + ImgName;//加上正样本的路径名
Mat src = imread(ImgName);//读取图片
vector descriptors;//HOG描述子向量
hog.compute(src descriptors Size(2 1));//计算HOG描述子,检测窗口移动步长(21)
//cout<<“描述子维数:“<riptors.size()<
//处理第一个样本时初始化特征向量矩阵和类别矩阵,因为只有知道了特征向量的维数才能初始化特征向量矩阵
if (0 == num)
{
DescriptorDim = descriptors.size();//HOG描述子的维数
//初始化所有训练样本的特征向量组成的矩阵,行数等于所有样本的个数,列数等于HOG描述子维数sampleFeatureMat
sampleFeatureMat = Mat::zeros(PosSamNO + NegSamNO + HardExampleNO DescriptorDim CV_32FC1);
//初始化训练样本的类别向量,行数等于所有样本的个数,列数等于1;1表示正样本,0表示负样本
sampleLabelMat = Mat::zeros(PosSamNO + NegSamNO + HardExampleNO 1 CV_32FC1);
}
//将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMat
for (int i = 0; iriptorDim; i++)
sampleFeatureMat.at(num i) = descriptors[i];//第num个样本的特征向量中的第i个元素
sampleLabelMat.at(num 0) = 1;//正样本类别为1
}
//依次读取负样本图片,生成HOG描述子
for (int num = 0; num {
cout << “处理:“ << ImgName << endl;
ImgName = “C:\\Users\\张建虎\\Desktop\\CVtest\\train_34x94\\neg\\“ + ImgName;//加上负样本的路径名
Mat src = imread(ImgName);//读取图片
vector descriptors;//HOG描述子向量
hog.compute(src descriptors Size(2 1));//计算HOG描述子,检测窗口移动步长(21)
//cout<<“描述子维数:“<riptors.size()<
//将计算好的HOG描述子复制到样本特征矩阵sampleFeatureMa
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 77692 2012-10-07 14:28 CVtest\CVtest\123.jpg
文件 4106 2016-01-19 11:15 CVtest\CVtest\CVtest.vcxproj
文件 944 2016-01-19 11:15 CVtest\CVtest\CVtest.vcxproj.filters
文件 2455 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.log
文件 590 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\cl.command.1.tlog
文件 17562 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\CL.read.1.tlog
文件 392 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\CL.write.1.tlog
文件 167 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\CVtest.lastbuildstate
文件 1904 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\li
文件 4684 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\li
文件 376 2016-01-19 21:01 CVtest\CVtest\Debug\CVtest.tlog\li
文件 625664 2016-01-19 21:01 CVtest\CVtest\Debug\vc120.idb
文件 1363968 2016-01-19 21:01 CVtest\CVtest\Debug\vc120.pdb
文件 517685 2016-01-19 21:01 CVtest\CVtest\Debug\源.obj
文件 547373 2016-01-19 21:03 CVtest\CVtest\HOGDetectorForOpenCV.txt
文件 6377 2016-01-19 11:25 CVtest\CVtest\negSampName.txt
文件 7029 2016-01-19 12:37 CVtest\CVtest\posSampName.txt
文件 781963 2016-01-19 20:55 CVtest\CVtest\SVM_HOG.xm
文件 8321 2016-01-19 21:01 CVtest\CVtest\源.cpp
文件 15794176 2016-01-19 21:03 CVtest\CVtest.sdf
文件 964 2016-01-19 11:13 CVtest\CVtest.sln
..A..H. 25088 2016-01-19 21:03 CVtest\CVtest.v12.suo
文件 149504 2016-01-19 21:01 CVtest\Debug\CVtest.exe
文件 1293956 2016-01-19 21:01 CVtest\Debug\CVtest.ilk
文件 2444288 2016-01-19 21:01 CVtest\Debug\CVtest.pdb
文件 1717 2016-01-19 10:55 CVtest\opencv249.props
文件 25458 2002-02-17 07:57 CVtest\test\test-0.bmp
文件 38890 2002-02-17 07:57 CVtest\test\test-1.bmp
文件 31078 2002-02-17 07:57 CVtest\test\test-10.bmp
文件 22022 2002-02-17 07:57 CVtest\test\test-100.bmp
............此处省略1236个文件信息
- 上一篇:利用MFC绘制B样条曲线
- 下一篇:MFC公路导航程序
评论
共有 条评论