Kullback-Leibler图像的2个直方图之间的差异(MATLAB)

时间:2017-05-24 13:30:17

标签: matlab image-processing histogram

我在matlab上从图像中提取直方图,而不是使用KL-divergence来比较直方图。 我找到了this script,但我不明白如何将它应用到我的案例中。

所以我在这里拉直方图(非常简单!!):

[N,X]=hist(I,n);
[N1,X1]=hist(I1,n);
KLDiv(N,N1) 
% ans=inf

N是我的图片的直方图I

就像你可以看到我的结果是inf ...  请问在我的案例中如何使用脚本? 感谢

1 个答案:

答案 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