2012-02-12 1 views
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

Я также попытался нормализовать (hist, hist, 0, 1, NORM_MINMAX, -1, Mat()); –

ответ

5

Нормализованный массив не суммируется с 1, а квадратный корень из суммы квадратов компонентов равен 1, F.e. в векторе:

Это нормализованное, когда: SQRT (х^2 + у^2 + Z^2) = 1

* Это относится и к векторам

в OpenCV - гистограмма - нормализуют является описанный здесь OpenCV histogram normalize, должно быть ясно (после прочтения спецификаций), что ему не нужно суммировать до 1

+0

Спасибо, я прочитал спецификации, но не понял обозначения, которые они использовали для || dst || Lp = alpha. Понятно теперь. –

 Смежные вопросы

  • Нет связанных вопросов^_^