4

我正在尝试从 Matlab 中具有零条目的共现矩阵中提取熵。从共现矩阵的熵的定义:

熵的定义
必须计算,其中c ij代表共现矩阵的 ( i , j ) 项。因此在我看来,如果有一个零条目,熵将是未定义的。当 x = 0 时,您是否为 log(x) 设置了某种下限,或者您如何处理?

链接到带有 GLCM 熵定义的 pdf:http: //www.code.ucsd.edu/pcosman/glcm.pdf

编辑:感谢有关如何处理 log(0) 的建议,但该等式实际上要求评估 0*log(0) 无论如何都是 0。如果我可以使用公式,解释起来会更容易,但也许我的问题更数学化,因此在错误的论坛上。

4

2 回答 2

4

如果我在记录某些内容时不想要 -Inf,我总是这样做。

设置一个非常非常少的 epsilon 并像处理你的矩阵 C

e = 1e-99;
C = C + e;

那么你可以运行你的旧代码,答案不会是-Inf

感谢@CrisLuengo 在评论中的有用建议

于 2018-01-30T11:49:06.053 回答
2

我通常使用以下解决方法来避免此问题:

X = C .* log2(C + (C == 0));
entropy = -sum(X(:));

对于C(共生矩阵) 的那些条目0,对数函数的参数是,1因为表达式(C == 0)被计算为1

于 2018-01-31T10:43:30.030 回答