khawla MI
2012-05-09, 15:21
السلام عليكم
encore une fois un probleme dans le temps de calcule
le programme qui va etre décrit per la suite prendre plus de 35 seconds pour s'executer je veut minimiser ce temps à 0.08 s est ce que ça est fesaible et s'il est le cas comment je peut le minimiser
voila le programme
global nx
global ny
global dx
global dy
global PD
I=imread('lena.jpg');
I=rgb2gray(I);%I est une image
[X Y]=size(I);
J= zeros(X,Y); %Image interpolée
dx = 26;dy = 26;
Tdx = 0:dx:X-1;Tdx = [dx , Tdx, X-1, X-1+dx];
Tdy = 0:dy:Y-1;Tdy = [dy , Tdy, Y-1, Y-1+dy];
nx = length(Tdx);ny = length(Tdy);
PD = zeros(nx*ny,2);
k=1;
for i=1:length(Tdx)
for j=1:length(Tdy)
PD(k,1)=round(Tdx(i)); PD(k,2)=round(Tdy(j));
k=k+1;
end
end
for x=1:X,
for y=1:Y,
T=Interpolation(x-1,y-1) + 1 ;
x1 = max(round(x),1); x1=min(x1,X);
y1 = max(round(y),1); y1=min(y1,Y);
J(x,y) = I(x1,y1);
end
end
Où Interpolation est une fonction définit comme:
function Inter = Interpolation(x,y)
global nx
global ny
global dx
global dy
global PD
i = floor(x/dx)-1; j = floor(y/dy)-1;
u=(x/dx)-floor(x/dx); v=(y/dy)-floor(y/dy);
Inter =[0,0];
for l=0:3
for m=0:3
k = (i+l+1)*nx + (j+m+2);
Inter = Inter + Auxiliaire(u,l)*Auxiliaire(v,m).*PD(k,:);
end
end
de meme la fonction Auxiliaire est definit par:
function A = Auxiliare(x,i)
switch i
case 0
A=((1-x).*(1-x).*(1-x))/6;
case 1
A=(3*x.*x.*x - 6*x.*x + 4)/6;
case 2
A=(-3*x.*x.*x + 3*x.*x + 3*x +1)/6;
case 3
A=x.*x.*x/6;
otherwise
disp('entré non valide.')
end
la fonction qui prend beaucoup de temps est la fonction Interpolation je veut la minimiser parce que je doit faire appelle de cette fonction dans des autres fonctions et pour un nombre important de fois et ça ne m'aide pas avec un temps de calcule égale à 30 seconds est ce que vous pouver m'aider
merci d'avance
encore une fois un probleme dans le temps de calcule
le programme qui va etre décrit per la suite prendre plus de 35 seconds pour s'executer je veut minimiser ce temps à 0.08 s est ce que ça est fesaible et s'il est le cas comment je peut le minimiser
voila le programme
global nx
global ny
global dx
global dy
global PD
I=imread('lena.jpg');
I=rgb2gray(I);%I est une image
[X Y]=size(I);
J= zeros(X,Y); %Image interpolée
dx = 26;dy = 26;
Tdx = 0:dx:X-1;Tdx = [dx , Tdx, X-1, X-1+dx];
Tdy = 0:dy:Y-1;Tdy = [dy , Tdy, Y-1, Y-1+dy];
nx = length(Tdx);ny = length(Tdy);
PD = zeros(nx*ny,2);
k=1;
for i=1:length(Tdx)
for j=1:length(Tdy)
PD(k,1)=round(Tdx(i)); PD(k,2)=round(Tdy(j));
k=k+1;
end
end
for x=1:X,
for y=1:Y,
T=Interpolation(x-1,y-1) + 1 ;
x1 = max(round(x),1); x1=min(x1,X);
y1 = max(round(y),1); y1=min(y1,Y);
J(x,y) = I(x1,y1);
end
end
Où Interpolation est une fonction définit comme:
function Inter = Interpolation(x,y)
global nx
global ny
global dx
global dy
global PD
i = floor(x/dx)-1; j = floor(y/dy)-1;
u=(x/dx)-floor(x/dx); v=(y/dy)-floor(y/dy);
Inter =[0,0];
for l=0:3
for m=0:3
k = (i+l+1)*nx + (j+m+2);
Inter = Inter + Auxiliaire(u,l)*Auxiliaire(v,m).*PD(k,:);
end
end
de meme la fonction Auxiliaire est definit par:
function A = Auxiliare(x,i)
switch i
case 0
A=((1-x).*(1-x).*(1-x))/6;
case 1
A=(3*x.*x.*x - 6*x.*x + 4)/6;
case 2
A=(-3*x.*x.*x + 3*x.*x + 3*x +1)/6;
case 3
A=x.*x.*x/6;
otherwise
disp('entré non valide.')
end
la fonction qui prend beaucoup de temps est la fonction Interpolation je veut la minimiser parce que je doit faire appelle de cette fonction dans des autres fonctions et pour un nombre important de fois et ça ne m'aide pas avec un temps de calcule égale à 30 seconds est ce que vous pouver m'aider
merci d'avance