Filter löschen
Filter löschen

improve speed --- image matrix replace

1 Ansicht (letzte 30 Tage)
Bob
Bob am 20 Mai 2013
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 Kommentar
Sean de Wolski
Sean de Wolski am 20 Mai 2013
Have you used the profiler to run your code and identify bottlenecks?

Melden Sie sich an, um zu kommentieren.

Antworten (1)

David Sanchez
David Sanchez am 20 Mai 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 Kommentar
Bob
Bob am 20 Mai 2013
the outer loops k=1:4 is also important,it means iteration of the w1. I must iterate w1 for more than 50 times. so the speed must improve. now if we run the code
for x=1:nx
for y=1:ny
w1(x,y,:)=w0(mod1(x+y,nx),mod1(x+2*y,ny),:);
end;
end;
20 seconds is necessary. it's so bad. please help me!! i have already had no idea!!

Melden Sie sich an, um zu kommentieren.

Kategorien

Mehr zu Image Processing 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