比较两个lbp (opencvc++)

Comparing 2 LBPs (OpenCV C++)

本文关键字:lbp opencvc++ 两个 比较      更新时间:2023-10-16

我正在使用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的相似程度,有什么更好的方法来获得一个可量化的数字?

谢谢。

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

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