2

LBPを生成するために bytefish.de のコードを使用しています。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 つの画像がどの程度似ているかを定量化できる数値が得られます。私の質問は、この結果を改善するにはどうすればよいですか? 2 つの LBP の類似性に基づいて、定量化可能な数値を得るより良い方法は何ですか?

ありがとう。

4

1 に答える 1

1

LBP は、(かなり大きな) 特徴ベクトルを提供するだけです。それを有効にするには、通常、多くのサンプル画像 (すべて「似ている」と定義する画像のクラスに属します) を処理し、サポート ベクター マシンを使用して、この類似性を認識できるようにする動作をトレーニングします。

通常、2 つの LPB を比較するだけでは、2 つの画像の類似性に関する情報はあまり得られません。それを確認するには: 最初の画像を LBP アルゴリズムの 1 セル サイズだけ変換します。2 番目の LBP は、最初の LBP のシフトされたバージョンのように見えます。通常、画像がどのように配置または回転されるかについての情報がないため、単純なロジックで 2 つの LBP を比較することは非常に困難です。

于 2015-10-12T16:46:36.657 に答える