【问题标题】:Entropy change the values on every execution熵在每次执行时都会改变值
【发布时间】:2013-09-22 09:51:46
【问题描述】:

这是我在程序中使用的代码:

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.01these are sample values not exact

【问题讨论】:

  • 您看到了什么错误?
  • @AlanStokes Identifier log2 is not defined
  • 你有#include &lt;math.h&gt;吗?
  • @AlanStokes 是的,我正在使用它
  • log2 仅在 C99 标准中定义。试试define function log2 yourself

标签: c++ opencv computer-vision entropy


【解决方案1】:

log2 仅在 C99 标准中定义。不使用log2 的解决方法可能是将其替换为不同的基数,因为可以使用以下公式从xb 的对数相对于任意基数k 计算对数logb(x)

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
          }

【讨论】:

  • 你没有得到我的问题,我说我在声明 log2 甚至 log(2) 时有错误,你的代码仍然显示错误
  • 你能用其他数学函数吗?
  • 我使用了三个库,#include &lt;math.h&gt; #include &lt;cmath&gt; #include &lt;numeric&gt;
  • 你能使用 math.h 中的任何其他函数吗,例如 sin?
  • 试试log(2.0),因为参数应该是double of float
猜你喜欢
  • 2016-11-10
  • 1970-01-01
  • 2021-03-18
  • 2021-12-06
  • 2017-05-19
  • 2018-07-12
  • 2015-07-19
  • 1970-01-01
  • 2020-11-11
相关资源
最近更新 更多