我在matlab上从图像中提取直方图,而不是使用KL-divergence来比较直方图。 我找到了this script,但我不明白如何将它应用到我的案例中。
所以我在这里拉直方图(非常简单!!):
[N,X]=hist(I,n);
[N1,X1]=hist(I1,n);
KLDiv(N,N1)
% ans=inf
N
是我的图片的直方图I
就像你可以看到我的结果是inf
...
请问在我的案例中如何使用脚本?
感谢
答案 0 :(得分:0)
您可能希望使用imhist
计算图像的直方图,而不是直方图的列式计算:
I1 = rand(10);
I2 = rand(10);
[N1, X1] = imhist(I1, 10); % limit the number of bins to avoid zero values
[N2, X2] = imhist(I2, 10);
KLDiv(N1.', N2.') % convert to row vectors to correspond with the requested format
KLDiv(N1.', N1.') % the divergence of an histogram with itself is indeed zero
请注意,我限制了bin的数量,以确保每个bin至少有一个点,因为如果Q(i)为零且P(i)不为{<3}},则不定义Kullback-Leibler divergence:
仅当Q(i)= 0暗示时才定义Kullback-Leibler散度 P(i)= 0,对于所有i(绝对连续性)。
备注强>
Kullback-Leibler发散范围?
任何正数,如果(且仅当)它们相等,则为零:KLD >= 0。
我应该以哪个基数为对数?自然对数log
或基数2对数log2
?
请注意,这只是扩展结果的问题。事实上,它并不重要,但如果你想比较你的结果,一定要使用相同的对数。 Wikipedia建议如下:
如果信息是,则将这些公式中的对数取为基数2 以bits为单位测量,如果测量信息,则以基数e为单位 nats