Энтропия меняет значения при каждом выполнении

Вот код, который я использую в моей программе:

calcHist( &pre_img, 1, channels, Mat(), // do not use mask
hist, 1, histSize, ranges,
true, // the histogram is uniform
false );

Mat histNorm = hist / (pre_img.rows * pre_img.cols);
double entropy = 0.0;
for (int i=0; i<histNorm.rows; i++)
{
float binEntry = histNorm.at<float>(i,0);
if (binEntry != 0.0)
{
entropy -= binEntry * log(binEntry);
}
}
cout<<entropy<<endl;

Во-первых, когда я вхожу в него, как entropy -= binEntry * log2(binEntry); это дает мне ошибку на log2 Я добавил библиотеки математики и чисел в VS 2010, но все равно получаю сообщение об ошибке, и второй момент кода заключается в том, что всякий раз, когда я запускаю его на одном и том же видео, при каждом выполнении мне выдаются разные значения, например, если он дает мне 10.0 , 2.0 , 0.05 чем тот же кадр на следующем запуске программы покажи мне 8.0 , 1.5 , 0.01 these are sample values not exact

0

Решение

log2 определяется только в стандарте C99. Обходной путь для неиспользования log2 может быть заменить его на другую базу, потому что логарифм logb(x) может быть вычислено из логарифмов x а также b по отношению к произвольной базе k используя следующую формулу:

введите описание изображения здесь

https://math.stackexchange.com/a/131719/29621

так что вы можете заменить

if (binEntry != 0.0)
{
entropy -= binEntry * log2(binEntry);
}

с

if (binEntry != 0.0)
{
entropy -= binEntry * log(binEntry)/log(2.0);
^
also you should use `log(2.0)`
because the argument should be
double or float
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]