Is my modification on Jeffrey's divergence code correct?

2 Ansichten (letzte 30 Tage)
Mohammad Al Nagdawi
Mohammad Al Nagdawi am 3 Aug. 2017
I use Matlab code available on file exchange to compare the degree of similarity between 2 images I got an unexpected result which has too many NaN.
Therefore, I debug the code to find the issue and try to solve it.
original code
function d=jeffrey_divergence(XI,XJ)
m=size(XJ,1); % number of samples of p
p=size(XI,2); % dimension of samples
assert(p == size(XJ,2)); % equal dimensions
assert(size(XI,1) == 1); % pdist requires XI to be a single sample
d=zeros(m,1); % initialize output array
for i=1:m
for j=1:p
m=(XJ(i,j) + XI(1,j)) / 2;
if m ~= 0 % if m == 0, then xi == xj == 0
d(i,1) = d(i,1) + (XI(1,j) * log(XI(1,j) / m)) + (XJ(i,j) * log(XJ(i,j) / m));
end
end
end
Modified code
function d=jeffrey_divergence(XI,XJ)
m=size(XJ,1); % number of samples of p
p=size(XI,2); % dimension of samples
assert(p == size(XJ,2)); % equal dimensions
assert(size(XI,1) == 1); % pdist requires XI to be a single sample
d=zeros(m,1); % initialize output array
for i=1:m
for j=1:p
m=(XJ(i,j) + XI(1,j)) / 2;
if m ~= 0 % if m == 0, then xi == xj == 0
if XJ(i,j)~=0 & XI(1,j)~=0 % I was added this line
d(i,1) = d(i,1) + (XI(1,j) * log(XI(1,j) / m)) + (XJ(i,j) * log(XJ(i,j) / m));
end
end
end
end
After I add if XJ(i,j)~=0 & XI(1,j)~=0 I get result without any NaN. But I still worry about the result accuracy.
Now I have two questions:
1. Is Jeffrey's divergence code correct? I don't know how to evaluate it!
2. This line of code 'if XJ(i,j)~=0 & XI(1,j)~=0', I added could affect the result accuracy?

Antworten (0)

Kategorien

Mehr zu Get Started with Statistics and Machine Learning Toolbox finden Sie in Help Center und File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by