Principalmente dipende dalla tenuta dei loop in Matlab. Se chiami semplicemente una serie di funzioni di elaborazione di immagini Matlab incorporate, molto probabilmente non sarai in grado di migliorare le prestazioni (molto probabilmente ti farai male). Se esegui il looping dei pixel dell'immagine o esegui una sorta di elaborazione dei blocchi, potresti notare notevoli miglioramenti. Se stai facendo un po 'di loop, ma la quantità di elaborazione all'interno di ogni iterazione è sostanziale, potresti vedere solo un miglioramento minimo o nullo.
Il modo in cui guardo Matlab è che ogni linea eseguita ha una certa quantità di spese generali. Se si può mettere la soluzione sotto forma di moltiplicazione di una matrice, o qualche altra operazione vettoriale/a matrice, si risente solo una volta di un sovraccarico ed è trascurabile. Tuttavia, con i loop, si soffre di quel sovraccarico ogni volta che il ciclo itera. Inoltre, la maggior parte delle funzioni di elaborazione delle immagini di Matlab sta solo effettuando chiamate verso librerie ottimizzate, quindi non provare a ricrearle a meno che non si sappia con certezza dove possono essere migliorate.
Ho trovato che l'approccio migliore è utilizzare una combinazione di C e Matlab. Io uso Matlab quando l'operazione può essere facilmente vettorizzata (messa in termini di operazioni vettore/matrice). Questo potrebbe voler dire arrivare alla soluzione da una prospettiva diversa da quella che sembra la più semplice. Inoltre, è difficile battere il plotting e la visualizzazione di Matlab, quindi non mi trasferirei a una soluzione C/C++ a meno che non si disponga di un piano per la visualizzazione con C/C++ (se questo è parte del progetto).
Se non riesco a trovare un modo relativamente semplice per vettorializzare, implego solo la parte di elaborazione che richiede cicli stretti in una funzione C mex che può essere chiamata da Matlab. In questo caso tendo ad usare C anziché C++ poiché il processo dovrebbe essere relativamente piccolo e non richiedere una grande quantità di astrazione dati complicata, ma il C++ funzionerebbe bene. Assicurati di accedere ai dati dell'immagine nell'ordine delle colonne per massimizzare gli hit della cache poiché questo è il modo in cui Matlab organizza le sue matrici.
fonte
2009-08-05 15:33:30
Ummm ... alcuni esempi di codice sarebbero belli. Non puoi prendere un algoritmo lento e schifoso in Matlab e aspettarti una conversione per renderlo veloce. Potresti non combattere l'interprete, potrebbe essere l'algoritmo –