2012-02-12 1 views
1

私は以下のコードでnormalize関数を使用しています。私の理解は、ヒストグラムを正規化するとビンが1つに集計されるということでしたか?しかし、私がそれらをすべて追加すると、結果は1つ上がり続けます。私は何か間違っているのか、その機能が何を誤解しているのか分かりません。OpenCVノーマライズ関数、結果が1に足りない

//read in image 
Mat img = imread("image.jpg",1); 
vector<Mat> planes; 
split(img, planes); 

//calculate hist 
MatND hist; 
int nbins = 256; // hold 256 levels 
int hsize[] = { nbins }; // one dimension 
float range[] = { 0, 255 }; 
const float *ranges[] = { range }; 
int chnls[] = {0}; 
calcHist(&planes[0], 1, chnls, Mat(), hist,1,hsize,ranges); 

//normalise 
normalize(hist,hist,1); 

float tot = 0; 
for(int n = 0;n < nbins; n++) 
    { 
     float binVal = hist.at<float>(n); 
     tot+=binVal; 
    } 
cout<<tot; 
+0

私はnormalize(hist、hist、0、1、NORM_MINMAX、-1、Mat() –

答えて

5

正規化された配列は1にはなりませんが、コンポーネントの平方和の平方根は1に等しくなります。 - ヒストグラム - 正規である SQRT(X^2 + y^2 + Z^2)これは、OpenCVの内のベクトル

に適用* 1

を=:ベクター中:とき

これは、正規化されここではOpenCV histogram normalizeに記載されているので、それは1に合わなくてもよいことを(仕様を読んだ後で)明らかにする必要があります。

+0

ありがとう、私は仕様を読んだが、|| dst || Lp = alphaのために使用した表記を理解できませんでした。今は明らかです。 –

関連する問題