【机器学习】改善LBP特征提高SVM的可分性的经验总结(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lyq_12/article/details/86507126

1、直方图均衡后,效果变差

equalizeHist(testImg, testImg);  //直方图均衡
imshow("直方图均衡后", testImg);

结论:由于直方图均衡会明显改变原来的明暗分布,反而降低可分性,检测效果显著变差。效果如下:

 2、把SVM.predict输出为1的框,求平均灰度,小于设定阈值的不保留

//设计12×30的滑窗遍历300×720的测试样本:计算每个滑窗内的LBP特征,给SVM预测,把输出为1的框画出来。
int m, n;
Mat slideWinImg(30, 12, CV_8UC1, Scalar(0));
Mat dstImg(30, 12, CV_8UC1, Scalar(0));   //LBP图,可不输出
Mat lideWinImgFeatureMat;
Mat sigleFeatureMat = Mat::zeros(1, descriptorDim, CV_32FC1);  //此时的descriptorDim已经更新为2320+362
vector<int> descriptor;

for(n=0; n<=testImgNorm.rows-30; n+=30)  //720/24=30
{
	for(m=0; m<=testImgNorm.cols-12; m+=4)  //300/10=30
	{
		slideWinImg = testImgNorm(Rect(m, n, 12, 30));
		if (slideWinImg.channels()>1)	cvtColor(slideWinImg, slideWinImg, CV_BGR2GRAY);

		//hog->compute(trainImg, descriptor, Size(4, 4));
		//getUniformPatternLBPFeature(slideWinImg, dstImg, descriptor, 1, 8);   
		//getOriginLBPFeature(slideWinImg, dstImg, descriptor);

		Mat extendLBPFeature;
		calExtendLBPFeature(slideWinImg, Size(3, 3), extendLBPFeature);

		//使用训练的SVM模型预测测试样本
		int predictResult = SVM.predict(extendLBPFeature);

		//cout<<"SVM训练模型预测结果:"<<predictResult<<endl;

		//剔除平均灰度值较低的检出框
		int garySum = 0;
		int threGary = 40*12*30;     //70*12*30,实验值,保守些,以免踢掉好的检出框
		if (predictResult==1){
			for (int mm=0; mm<12; mm++){
				for (int nn=0; nn<30; nn++){
					garySum += testImg.at<uchar>(n+nn, m+mm);
				}
			}
			if (garySum < threGary)	predictResult = 0;			
		}

		if (predictResult==1)
		{
			rectangle(copyImg,Point(m,n),Point(m+12,n+30),Scalar(0,255,0),1,1,0);
		}
	}
	//cout<<endl;	//imshow("copyImg",copyImg);	//waitKey(0);
}

①、结论:可以剔除黑车边缘与背景交界处的误检框。效果如下:

 

 ②、总结:夜晚或白天阴影路段,车道线灰度值小,背景更黑,对比度小;使用归一化+高斯滤波+pixelDiff,基本能检到车道线。但使用averageGray后,很多是车道线的检测框但平均灰度值低,反而被剔除掉了。效果如下:

  

猜你喜欢

转载自blog.csdn.net/lyq_12/article/details/86507126