improve speed --- image matrix replace
Show older comments
i have a code which has three "for". it's so slow.
if nx=2000,ny=2000. it takes me two minutes to finish replacement.
xfig(nx,ny,3) is a image matrix.
please help me!!
w0=xfig;
nx=length(xfig(:,1,1));%coordinate x
ny=length(xfig(1,:,1));%coordinate y
w1=w0;
for k=1:4
for x=1:nx
for y=1:ny
w1(x,y,:)=w0(mod1(x+y,nx),mod1(x+2*y,ny),:);
end;
end;
%t=1:1:nx;v=1:1:ny;
%w1(t,v,:)=w0(mod1(t+v,nx),mod1(t+2*v,ny),:);
w0=w1;
end;
% if mod(8,4)=0 then it isn't 0, instead of 4
function T=mod1(x,y)
if mod(x,y)==0
T=y;
else
T=mod(x,y);
end
end
1 Comment
Sean de Wolski
on 20 May 2013
Have you used the profiler to run your code and identify bottlenecks?
Answers (1)
David Sanchez
on 20 May 2013
1st: initialize w1
w1 = zeros(nx,ny,3);
The two inner loops do not make use of k, the outer loop index. Why do you have them there? Take them out.
for x=1:nx
for y=1:ny
w1(x,y,:)=w0(mod1(x+y,nx),mod1(x+2*y,ny),:);
end;
end;
what's this for?
for k=1:4
%t=1:1:nx;v=1:1:ny;
%w1(t,v,:)=w0(mod1(t+v,nx),mod1(t+2*v,ny),:);
w0=w1;
end;
1 Comment
Bob
on 20 May 2013
Categories
Find more on Image Arithmetic in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!