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
、 、 など) を返しません(おそらく)。14
cvCompareHist
これらのインデックスを正規化する方法はありますか?
よろしく、ヴィ。