使用局部二进制模式的纹理分析(面模块)

时间:2016-04-24 17:35:03

标签: c++ opencv computer-vision

问题; 由于我没有在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实现是否有特殊之处?

您是否对其他纹理分析方法有任何建议,特别针对道路/无路的情况?

以下是我正在使用的文件的概述。

输入: Input

选择我们的培训数据: Selecting training data

选择结果:(每个文件都有一个_number来指定标签) Result of training data

对同一组随机图像进行训练后的最终结果。紫色代表道路,绿色代表线(或道路标记)。 Results of LBP predict after training on image

0 个答案:

没有答案