Avoid using repmat in CPD registration algorithm

Hi all,
I'm running a coherent point drift (CPD) registration algorithm and I'm having trouble running it on large point clouds because I keep exceeding the maximum variable size. The line of code that is giving me trouble is:
G=repmat(x,[1 1 m])-permute(repmat(y,[1 1 n]),[3 2 1]);
The error message is:
??? Maximum variable size allowed by the program is exceeded.
Error in ==> repmat at 104
B = A(subs{:});
I'm wondering if anyone has any suggestions as how to avoid using repmat so I can run the code on large data sets.
Thanks!

2 commentaires

Matt J
Matt J le 24 Oct 2012
Perhaps. What are the dimensions of x and y?
Mark
Mark le 24 Oct 2012
Modifié(e) : Mark le 24 Oct 2012
I'm not exactly sure as there can be significant deviation in the point clouds. Let's say the largest X will be is 70000 x 3 and the largest Y will be is 4000 x 3.

Connectez-vous pour commenter.

 Réponse acceptée

bsxfun should be able to handle that.
Also, rather than using permute use reshape, permute is slow for big things.
G = bsxfun(@minus,x,reshape(y',1,3,[]))

1 commentaire

Mark
Mark le 24 Oct 2012
Thanks for the suggestion Sean. I'll try it out and let you know if it works!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by