【问题标题】:Comparing 2 LBPs (OpenCV C++)比较 2 个 LBP(OpenCV C++)
【发布时间】:2016-01-10 05:06:56
【问题描述】:

我正在使用来自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之前假设两张图片总是对齐正确的?
  • @basav 是的。方向和对齐之间非常细微的差异。
  • @Miki compareHist 似乎不适用于我正在制作的直方图。都给出了很高的相似率。

标签: c++ opencv textures histogram lbph-algorithm


【解决方案1】:

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

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

【讨论】:

  • 如果他确保它们对齐和方向正确怎么办?只是好奇
  • 即使我确实存储了 10 个同时图像的模板,并在所有 10 个图像上应用 LBP。接下来我该怎么做才能将其与要匹配的单个图像进行比较?
  • @basav:那么在逐个值的比较中,LBP 应该非常相似。但在逐像素比较中,图像也应该非常相似。
  • @RK2015:你通常会有超过 10 张图像,这些图像应该显示人类观众会忽略的所有变化(平移、旋转、在特定范围内缩放......)。然后让支持向量机收集您的 LBP 并在 N 维空间中构建某种集群(N 是单个 LBP 中的值的数量)。最后,您将拍摄一张测试图像,计算其 LBP 并查看它是否属于您的 SVM 找到的任何 N 维集群的邻域。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-10
  • 1970-01-01
  • 1970-01-01
  • 2012-11-27
  • 2021-06-02
  • 1970-01-01
  • 2014-04-29
相关资源
最近更新 更多