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后,很多是车道线的检测框但平均灰度值低,反而被剔除掉了。效果如下: