Optimal distance calculation for a data cube

I'm wondering if there's a better way to calculate my distance matrix?
function D = frame2frameDist(imageStack)
[h, w, c, l] = size(imageStack);
D = zeros(l);
for channel = 1:c
for i = 1:l
for j = i:l
D(i,j) = D(i,j) + norm(imageStack(:,:,channel,i)-imageStack(:,:,channel,j));
end;
end;
end;
D = triu(D)+triu(D,1)';
Is there a way to do this without iteration?

1 commentaire

John BG
John BG le 2 Avr 2016
Modifié(e) : John BG le 2 Avr 2016
have you tried
for i = 1:l
for j = i:l
D(i,j) = D(i,j) + norm(imageStack(:,:,:,i)-imageStack(:,:,:,j));
end;
end;
can you submit a sample of frames and channels?
also, functions bsxfun and arrayfun may have a way to combine the norm() and rid loops i and j.
There is an expert in this forum called Andrei Bobrov who showed me how to use bsxfun, may be you could ask him.

Connectez-vous pour commenter.

Réponses (1)

Walter Roberson
Walter Roberson le 2 Avr 2016

0 votes

Possibly reshape to rows, and then pdist() ?

Catégories

Community Treasure Hunt

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

Start Hunting!

Translated by