2

我正在使用来自bytefish.de的代码 来生成我的 LBP。如果我生成 2 个 LBP 及其相应的直方图,那么比较它们的最佳方法是什么?

到目前为止,这是我的代码:

#include "lbp.hpp"
#include "histogram.hpp"

#include <opencv2/opencv.hpp>
#include "opencv2/highgui/highgui.hpp"
#include "opencv2/imgproc/imgproc.hpp"

using namespace cv;

int main()
{
    //template image
    Mat temp = imread("Template.jpg",1);
    //image to be compared to
    Mat match = imread("Match.jpg",1);

    Mat dst,dst2; // image after preprocessing
    Mat lbp,lbp2; // lbp image
    Mat hist,hist2;

    //Convert to gray
    cvtColor(temp, dst, 6);
    cvtColor(match, dst2, 6);
    //remove noise
    GaussianBlur(dst, dst, Size(5,5), 5, 3, BORDER_CONSTANT);
    GaussianBlur(dst2, dst2, Size(5,5), 5, 3, BORDER_CONSTANT);
    //gets the lbp
    lbp::ELBP(dst,lbp,1,8);
    lbp::ELBP(dst2,lbp2,1,8);

   // normalize(lbp2, lbp2, 0, 255, NORM_MINMAX, CV_8UC1);
    //normalize(lbp, lbp, 0, 255, NORM_MINMAX, CV_8UC1);

    //get histograms
    lbp::histogram(lbp,hist,255);
    lbp::histogram(lbp2,hist2,255);

    //comparing the 2 LBP histograms
    double compareHist = cv::norm(hist-hist2);

    cout<<compareHist<<endl;

    waitKey(0);
    return 0;
}

基本上它给了我一个关于这两个图像有多相似的量化数字。我的问题是,我该如何改善这个结果?根据 2 个 LBP 的相似程度,有什么更好的方法来获得可量化的数字?

谢谢。

4

1 回答 1

1

LBP 只是给你一个(相当大的)特征向量。为了使任何有用的东西,您通常会处理许多示例图像(都属于您定义为“相似”的图像类别),然后使用支持向量机训练一种行为,让它识别这种相似性。

仅比较两个 LPB 通常不会为您提供有关两个图像相似度的太多信息。要看到这一点:只需将第一张图像转换为 LBP 算法的一个单元格大小。然后,第二个 LBP 将看起来是第一个 LBP 的转换版本。由于您通常没有关于图像如何对齐或旋转的信息,因此很难通过一些简单的逻辑来比较两个 LBP。

于 2015-10-12T16:46:36.657 回答