【问题标题】:Usage of entropy function熵函数的使用
【发布时间】:2012-01-26 04:32:18
【问题描述】:

我试图在 MATLAB 中找到某个概率分布的熵。对于p,我试着做

E = -sum(p .* log2(p))

Echeck = entropy(p)

E 和 Echeck 不应该相同吗?

关于熵的 matlab 帮助确实说熵被定义为 -sum(p.*log2(p)) 其中 p 包含从 imhist 返回的直方图计数。但该熵还将逻辑以外的任何类转换为 uint8 以进行直方图计数计算,因为它实际上是在尝试计算灰度图像的熵,因此希望像素值是离散的。 所以我想将这个功能用于我的目的是不正确的? 有什么好的选择吗?

【问题讨论】:

  • 你的变量p是什么?如果p 是向量,则表达式sum(p .* log2(p)) 将返回一个标量,而函数entropy 期望对表示灰度图像的矩阵进行操作。实际上,entropy 函数由 entropy(I) = -sum(imhist(I) .* log2(imhist(I))) 定义。
  • @Chris Taylor,您应该发表您的评论作为答案。
  • p 是一个概率分布——在我的例子中是一个概率值的 NX1 向量。
  • @Oli meh,你的更完整(另外,我没有图像处理工具箱,所以我看不到entropy 的来源,我认为它已添加到你的答案中)
  • MATLAB 熵函数还返回向量 p 的标量。值的差异可能是由于将向量 p 中的双倍概率值转换为 uint8。我想知道 MATLAB 是否有更直接的方法来计算任何概率分布的熵

标签: matlab statistics entropy


【解决方案1】:

我用open entropy查看代码,有一行:

if ~islogical(I)
  I = im2uint8(I);
end
p = imhist(I(:));

这意味着将输入转换为 uint8,然后该函数计算输入直方图的熵,而不是输入本身的熵。

这就解释了差异。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-16
    • 2021-07-23
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多