Функция нормализации OpenCV, результат не суммируется - PullRequest
1 голос
/ 12 февраля 2012

Я использую функцию нормализации в коде ниже.Насколько я понимаю, нормализация гистограммы приведет к суммированию бинов в единицу?Но когда я складываю их все вместе, я получаю результат выше, чем один.Я не знаю, делаю ли я что-то неправильно или неправильно понял, что делает функция?

//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;

1 Ответ

5 голосов
/ 12 февраля 2012

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

Нормализуется, когда: sqrt (x ^ 2 + y ^ 2 +z ^ 2) = 1

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

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

...