2012-02-12 44 views
1

我在下面的代碼中使用標準化函數。我的理解是規格化直方圖會導致箱子總和爲1?但是當我把它們全部加起來的時候,我總是會得到一個更高的結果。我不知道我是否做錯了什麼,或者誤解了這個功能呢?OpenCV標準化函數,結果不加總爲一

//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()); – 2012-02-12 15:06:27

回答

5

歸一化數組不等於1,但是平方和的平方根等於1,F.e。在向量:

它是歸一化的,當: SQRT(X^2 + Y^2 + Z^2)= 1

*這適用於矢量

在OpenCV中

- 直方圖 - 歸一化是這裏描述的OpenCV histogram normalize,它應該很清楚(在閱讀規格後),它不一定總和爲1

+0

謝謝,我已閱讀規格,但不明白他們用於|| dst || Lp = alpha的符號。現在很清楚。 – 2012-02-12 15:22:50