图像中两个直方图之间的Kullback-Leibler散度(MATLAB)
我在matlab上从图像中提取直方图,然后我想用KL散度比较直方图。 我发现了,但我不明白如何将其应用到我的案例中 所以这里我拉我的柱状图(非常简单!!):图像中两个直方图之间的Kullback-Leibler散度(MATLAB),matlab,image-processing,histogram,Matlab,Image Processing,Histogram,我在matlab上从图像中提取直方图,然后我想用KL散度比较直方图。 我发现了,但我不明白如何将其应用到我的案例中 所以这里我拉我的柱状图(非常简单!!): N是我的图像的直方图I 你可以看到我的结果是inf。。。 请你告诉我在我的情况下如何使用脚本? 谢谢您可能希望使用,而不是按列计算直方图来计算图像的直方图: I1 = rand(10); I2 = rand(10); [N1, X1] = imhist(I1, 10); % limit the number of bins to avoid
N
是我的图像的直方图I
你可以看到我的结果是inf
。。。
请你告诉我在我的情况下如何使用脚本?
谢谢您可能希望使用,而不是按列计算直方图来计算图像的直方图:
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
请注意,我限制了存储箱的数量,以确保每个存储箱至少有一个点,因为如果Q(I)为零,而p(I)不是:
只有当Q(i)=0意味着
P(i)=0,对于所有i(绝对连续性)
注释
- Kullback–Leibler散度的范围?
任何正数,如果(且仅当)它们相等,则为零: - 对数应该取哪个基数?自然对数
还是以2为底的对数log
log2
请注意,这只是一个缩放结果的问题。所以事实上,这并不重要,但是如果你想比较你的结果,一定要使用相同的对数。建议如下:
谢谢你的回答!我有两个小问题,(1)我发现我的
KLD=1.2
可能吗?我认为0我只想指定,在我的情况下,如果我只使用10(箱数),我将失去精度,因此我保留了255个点,并在代码中添加:temp(isinf(temp))=0代码>temp(isnan(temp))=0所以在我的结果中我不再有inf
或NaN
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