Optimisation algo filtre médian
Bonjour,
J'ai écrit un algorithme permettant de réaliser un filtre median sur des images, et je souhaiterais l'optimisé afin que son execution prenne moins de temps.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58
|
void CWebCam::filtreMedianImage ( Image &image, Image &nvelImage, int taille )
{
// classe dans l'ordre les pixels de la fenetre traitée et prend la valeur du milieu et l'affecte au pixel du centre de la fenetre
int k = taille %2;
int t=taille/2;
Image imageAgrandi, imageTemp;
int iMat, jMat, n;
int *tablNdg;
int ordre = ((taille*taille)+1)/2;
tablNdg=new int [taille*taille];
agrandirBordsImage(image,imageAgrandi,taille);
//allocation de l'image temporaire
allocationImage(imageTemp,imageAgrandi.hauteur,imageAgrandi.largeur,imageAgrandi.type);
for ( int i=t; i<(int)(imageAgrandi.hauteur-t); i++ )
{
for ( int j=t; j<(int)(imageAgrandi.largeur-t); j++ )
{
n=0;
for ( iMat=i-t; iMat<=i+t; iMat++ )
{
for ( jMat=j-t; jMat<=j+t; jMat++)
{
tablNdg[n]=imageAgrandi.ptrLigne[iMat][jMat];
n++;
}
}
triTableauOrdreCroissant(tablNdg,(taille*taille));
imageTemp.ptrLigne[i][j]=tablNdg[ordre];
}
}
//remise de l'image à la bonne taille
reduireBordsImage(imageTemp,nvelImage,taille);
liberationImage(imageAgrandi);
liberationImage(imageTemp);
delete tablNdg;
tablNdg=NULL;
}
typedef struct
{
unsigned long hauteur;
unsigned long largeur;
unsigned char type; // BINARY, GRAY ou RGB
unsigned char* pixel;
unsigned char** ptrLigne;
} Image; |
Si vous avez des idées je suis preneur, car j'ai aussi mes fonctions de morphologie maths à optimiser aussi.