Bonjour,
Dans le cadre d'un traitement d'images, je cherche à réduire le temps de traitement que met le programme.
Je partage avec vous le programme pour m'aider si vous voyez des améliorations à apporter afin d'éliminer les calculs inutiles ou de remplacer les instructions qui ajoutent une charge en terme de temps.
Ddynamic = zeros(size(leftI), 'single');
finf = 1e3;
disparityCost = finf*ones(size(leftI,2), 2*disparityRange + 1, 'single');
disparityPenalty = 0.5;
hWaitBar = waitbar(0,'Utilisation de la programmation dynamique pour le lissage...');
for m=1:nRowsLeft
disparityCost( = finf;
minr = max(1,m-halfBlockSize);
maxr = min(nRowsLeft,m+halfBlockSize);
for n=1:size(leftI,2)
minc = max(1,n-halfBlockSize);
maxc = min(size(leftI,2),n+halfBlockSize);
mind = max( -disparityRange, 1-minc );
maxd = min( disparityRange, size(leftI,2)-maxc );
for d=mind:maxd
disparityCost(n, d + disparityRange + 1) = ...
sum(sum(abs(leftI(minr:maxr,(minc:maxc)+d) ...
- rightI(minr:maxr,minc:maxc))));
end
end
optimalIndices = zeros(size(disparityCost), 'single');
cp = disparityCost(end,;
for j=size(disparityCost,1)-1:-1:1
cfinf = (size(disparityCost,1) - j + 1)*finf;
[v,ix] = min([cfinf cfinf cp(1:end-4)+3*disparityPenalty;
cfinf cp(1:end-3)+2*disparityPenalty;
cp(1:end-2)+disparityPenalty;
cp(2:end-1);
cp(3:end)+disparityPenalty;
cp(4:end)+2*disparityPenalty cfinf;
cp(5:end)+3*disparityPenalty cfinf cfinf],[],1);
cp = [cfinf disparityCost(j,2:end-1)+v cfinf];
optimalIndices(j,2:end-1) = (2:size(disparityCost,2)-1) + (ix - 4);
end
[~,ix] = min(cp);
Ddynamic(m,1) = ix;
for k=1:size(Ddynamic,2)-1
Ddynamic(m,k+1) = optimalIndices(k, ...
max(1, min(size(optimalIndices,2), round(Ddynamic(m,k)) ) ) );
end
waitbar(m/nRowsLeft, hWaitBar);
end
close(hWaitBar);
Ddynamic = Ddynamic - disparityRange - 1;
Merci