问题; 由于我没有在OpenCV lib中找到LBP的实现,我将faces模块添加到我的OpenCV构建中。哪个有LBP实施。
我尝试使用本地二进制模式(lbp)进行纹理分析,以确定什么是道路,什么是线路,什么不是道路。所以我把问题分成3个标签'。 (道路/线路/其余)
之后,我拍摄了3张随机样本图像并使用这些标签制作了子图像。换句话说,我选择了道路,线路,所有其余部分并将其用作训练的输入。
训练:
for (int i = 0; i < names.size(); i++) {
Mat trainingData = imread(names[i]), output;
if (!trainingData.empty()) {
cvtColor(trainingData, output, CV_RGB2GRAY);
int pos = names[i].find_last_of('_');
cv::String l = names[i].substr(pos + 1, 1);
const char *sub = l.c_str();
int label = atoi(sub);
grayscaleImages.push_back(output);
labels.push_back(label);
}
}
Ptr<LBPHFaceRecognizer> lbp = createLBPHFaceRecognizer(2, 4, 10, 10);
lbp->train(grayscaleImages, labels);
使用LBP预测:
for (int i = 0; i < dataset.images.size(); i++) {
Mat image = (dataset.images[i]).clone();
Mat original = image.clone();
for (int i = 0 ; i < image.size().width; i += squareSize) {
for (int j = image.size().height / 2 ; j < image.size().height; j += squareSize) {
Mat subImage = image(Range(j, j + squareSize), Range(i, i + squareSize));
subImage = applySobel(subImage);
int predict = lbp->predict(subImage);
}
}
imshow("Image", original);
waitKey(0);
}
我的问题是为什么这不起作用?我对这个预测也很感兴趣。它似乎没有接近我想要的任何地方?
我自己有LBP工具吗? faces模块的LBP实现是否有特殊之处?
您是否对其他纹理分析方法有任何建议,特别针对道路/无路的情况?
以下是我正在使用的文件的概述。
输入:
选择我们的培训数据:
选择结果:(每个文件都有一个_number来指定标签)
对同一组随机图像进行训练后的最终结果。紫色代表道路,绿色代表线(或道路标记)。