Optimiser un programme Matlab
Répondre à la discussion
Affichage des résultats 1 à 2 sur 2

Optimiser un programme Matlab



  1. #1
    sakona

    Optimiser un programme Matlab


    ------

    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.
    Code:
    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

    -----

  2. #2
    mp3dux

    Re : Optimiser un programme Matlab

    Bonjour,

    est ce que tu comprends ce que fait ton code ?

    Si oui il faut le réécrire pour mettre le moins possible de boucles for, de plus tu les imbriques, au niveau des perfs c'est catastrophique avec Matlab l'imbrication de boucles.

    Matlab c'est de l'interprété donc déjà faut pas s'attendre à des miracles, de plus Matlab est optimisé pour les calculs matriciels qu'il faut préférer.

    Tu dois évaluer la partie de ton code qui consomme le plus de temps et te concentrer dessus pour l'optimiser.

    Si tu n'arrives toujours pas à obtenir satisfaction, tu peux utiliser un langage compilé comme le C ou C++, Matlab inclut des outils pour ça, regarde dans l'aide : MEX-files, code C, etc.
    Si nous faisions tout ce que nous sommes capables de faire, nous en serions abasourdis. T.E

Discussions similaires

  1. optimiser à l'aide d'un programme informatique
    Par halyins dans le forum TPE / TIPE et autres travaux
    Réponses: 0
    Dernier message: 14/06/2009, 18h09
  2. programme matlab
    Par inviteb3568de1 dans le forum Logiciel - Software - Open Source
    Réponses: 3
    Dernier message: 24/05/2009, 12h52
  3. programme matlab
    Par invitea5ac09f5 dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 30/06/2008, 19h31
  4. Programme Matlab
    Par invite473739cb dans le forum Logiciel - Software - Open Source
    Réponses: 1
    Dernier message: 15/04/2008, 14h13
  5. programme matlab
    Par invite33b8bd7f dans le forum Logiciel - Software - Open Source
    Réponses: 2
    Dernier message: 18/08/2007, 16h13
Dans la rubrique Tech de Futura, découvrez nos comparatifs produits sur l'informatique et les technologies : imprimantes laser couleur, casques audio, chaises gamer...