我试图从Matlab中零条目的共生矩阵中提取熵。根据共生矩阵的熵定义:
必须计算,其中 c ij 代表( i , j )共生矩阵的输入。因此在我看来,如果存在单个零条目,则熵将是未定义的。当x = 0时,你是否设置log(x)的某种下限,或者你如何处理它?</ p>
使用GLCM的熵定义链接到pdf:http://www.code.ucsd.edu/pcosman/glcm.pdf
编辑:感谢有关如何处理log(0)的建议,但该等式实际上要求评估0 * log(0),无论如何都是0。如果我可以使用公式会更容易解释,但也许我的问题更多是数学,因此在错误的论坛上。
答案 0 :(得分:4)
如果我在登录时不想要-Inf,我总是这样做。
设置一个非常非常小的epsilon,并像
一样处理你的矩阵C.e = 1e-99;
C = C + e;
然后您可以运行旧代码,答案不会是 -Inf 。
感谢@ CrisLuengo在评论中提供的有用建议
答案 1 :(得分:1)
我通常使用以下解决方法来避免此问题:
X = C .* log2(C + (C == 0));
entropy = -sum(X(:));
对于C
(共生矩阵)0
的条目,对数函数的参数为1
,因为表达式(C == 0)
被评估为1
。