0

2.4.6.0画像処理に最新バージョンの OpenCV フレームワーク ( ) を使用しています。floatセット内の[0;1]aを取得するには、2 つのヒストグラムを比較する必要があります。 は類似性0の最小値と最大値です。1

私のコードは次のとおりです。

CvHistogram* create_histogram( IplImage** image, IplImage* mask )
{
    int num_bins = 8;
    float xranges[] = { 0, 255 };
    float* ranges[] = { xranges, xranges, xranges };
    int hist_size[] = { num_bins, num_bins, num_bins };
    CvHistogram* hist = cvCreateHist(3, hist_size, CV_HIST_ARRAY, ranges, 1);
    cvCalcHist(image, hist, 0, mask);
    cvNormalizeHist(hist, 1);
    return hist;
}

void set_histogram( T_FRAME &frame, T_FRAME &mask, T_APPEARANCE &appearance, const T_RECT rect )
{
    cvSetImageROI(frame, rect);
    cvSetImageROI(mask, rect);
    IplImage* b = cvCreateImage(cvGetSize(frame), frame->depth, 1);
    IplImage* g = cvCreateImage(cvGetSize(frame), frame->depth, 1);
    IplImage* r = cvCreateImage(cvGetSize(frame), frame->depth, 1);
    cvSplit(frame, b, g, r, NULL);
    IplImage* bgr_plane[]   = { b, g, r };
    CvHistogram* histogram  = create_histogram(bgr_plane, mask);
    appearance.hist = histogram;
    cvReleaseImage(&b);
    cvReleaseImage(&g);
    cvReleaseImage(&r);
    cvResetImageROI(frame);
    cvResetImageROI(mask);
}

ノート:typedef IplImage* T_FRAME;

したがって、2 つの外観モデルを作成し、それらのヒストグラムを比較します。

void create_appearence( T_FRAME &frame, T_FRAME &mask, T_APPEARANCE &appearance, const T_RECT rect )
{
    set_histogram(frame, mask, appearance, rect);
}

float get_similarity( T_APPEARANCE &appearance_A, T_APPEARANCE &appearance_B )
{
    return cvCompareHist(appearance_A.hist, appearance_B.hist, CV_COMP_CHISQR);
}

ヒストグラム間の距離の定義 ( を参照) に従って、出力として、プログラムは値[0;1](たとえば-41、 、 など) を返しません(おそらく)。14cvCompareHist

これらのインデックスを正規化する方法はありますか?

よろしく、ヴィ。

4

2 に答える 2

1

この問題を解決するために、カイ 2乗の代わりにバタチャリヤ距離( ) を使用しています。CV_COMP_BHATTACHARYYA

float get_similarity( T_APPEARANCE &appearance_A, T_APPEARANCE &appearance_B )
{
    return cvCompareHist(appearance_A.hist, appearance_B.hist, CV_COMP_BHATTACHARYYA);
}

そのため、必要に応じcvCompareHistて に値を返します[0;1]

この方法CV_COMP_BHATTACHARYYAは、正規化されたヒストグラムでのみ機能することに注意してください。

于 2013-08-09T22:08:31.517 に答える