Efficient way to calculate distance matrix between cells
    4 views (last 30 days)
  
       Show older comments
    
Hi, 
So i have an image with size of 512x512 pixels
For each pixel i calculte an environment of 11x11 nighbours so now i have matrix of cells in size of 512x512 while each cell contain a matrix in size of 11x11.
i want to calculte in efficient way a distance matrix between the cell's matrix elements, i.e if i organzie the cells marix in colum stack (vector in size of 262144), lets call this vector A , (so A is vector of cells while each cell contain a 11x11 matrix) i would like to create a matrix D in size of 262144x262144 while D(i,j) is the euclidian distance between the matrices in A(i) and A(j),
So far i calculate it with for loops:  
function [ D ] = DistanceMatFromPatches( patches )
    [patchesH,patchesW]=size(patches); 
    D=zeros(patchesH,patchesW);    
    patches_cs=patches(:);
    patchesSize=size(patches_cs);
    patchesNum=patchesSize(1);
    f = waitbar(0);
    for i=1:patchesNum-1
        first_cs=patches_cs{i}(:);
        for j=(i+1):(patchesNum)
            waitbar(j/patchesNum,f,sprintf('Calculate Distance matrix: pixels %d and %d from %d',i,j,patchesNum));
            %pause(0.1);
            sec_cs=patches_cs{j}(:);
            D(i,j)=norm(first_cs-sec_cs);
            D(j,i)=D(i,j);
        end 
    end
    close(f);
end
while patches is  512x512 matrix of cells.
This implementation is not very efficent .. anyone has other idea?
0 Comments
Answers (1)
  Jan
      
      
 on 28 Jan 2021
        
      Edited: Jan
      
      
 on 28 Jan 2021
  
      A 262144 x 262144 matrix of type double needs 550 GB of RAM. I assume that this will exhaust your machine.
You need a different approach, which can run on existing computers.
Blowing up the matrix to a cell matrix, which contains 11x11 submatrices does not add any new information to the data. Then this produced redundancy is a waste of ressources already.
See Also
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!
