IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Filtre Gaussien appliqué à une image


Sujet :

C++

  1. #1
    Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut Filtre Gaussien appliqué à une image
    Bonjour @ tous !

    J'aimerais appliquer un filtre gaussien à mon image, mais je m'y prend mal et cela ne marche pas...


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
     
    // masque 3x3
     
    	nLignes=3;
    	nColonnes=3;
     
    	masque = new int* [ nLignes ]; 
    		 for( int i=0 ; i < nLignes ; i++ )
    			 masque[i] = new int[ nColonnes ];
     
    	for( int i=0 ; i < nLignes ; i++ ) 
    		for( int j=0 ; j < nColonnes ; j++)
    			masque[i][j]=i*j;
     
    	masque[0][0] = 1;
        masque[0][1] = 2;
        masque[0][2] = 1;
        masque[1][0] = 2;
        masque[1][1] = 4;
        masque[1][2] = 2;
        masque[2][0] = 1;
        masque[2][1] = 2;
        masque[2][2] = 1;
    	int coeffMasque=16;
     
    	 for(int i = 0+1; i<larg_reelle; i++) // exclus 1ère et dernière ligne
    	 {	
    		 for(int j= 0+1; j<haut; j++) // exclus 1ère et dernière colonne 
    		 {
    			 for(int k=0 ;k<3;k++)
    			{
    				for(int l=0; l<3; l++)
    				{
    					image_filtree[k+l*3]+= image_bruitee[i+j*larg_reelle]*(masque[k+1][l+1]/coeffMasque);
    				}
    			 }
    		 }
    	 }
    Pourriez vous m'expliquer les raisons qui font que cela ne marche pas ?
    Merci d'avance,

  2. #2
    Candidat au Club
    Femme Profil pro
    Etudiante
    Inscrit en
    Mai 2012
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Etudiante

    Informations forums :
    Inscription : Mai 2012
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Je m'excuse, mais pouvez vous supprimer mon message svp
    Je l'ai remis dans le forum traitement d'image qui est plus approprié.
    Désolé

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 533
    Points : 1 086
    Points
    1 086
    Par défaut
    Passe sous OpenCV et économise-toi du temps et des efforts :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // Image d'entrée
    cv::Mat src(haut, larg_reelle);
    // Image de sortie
    cv::Mat dst;
     
    // Flou gaussien depuis src vers dst, avec un noyau 3x3 et un écart-type 'sigma'
    cv::GaussianBlur(src, dst, cv::Size(3,3), sigma);
     
    // Et c'est fini !
    ----

    Quant à ton code, il suffit de regarder cette ligne :
    image_filtree[k+l*3]+= image_bruitee[i+j*larg_reelle]*(masque[k+1][l+1]/coeffMasque);
    • Tu remplis quelques pixels parmi les 12x12 premiers éléments de image_filtree.
    • Et tu les remplis mal : au lieu de faire la somme pondérée des pixels aux alentours de [i;j], tu désignes toujours le même pixel image_bruitee[i+j*larg_reelle].
    • Tes dernières boucles for devraient décrire [-1:1] et pas [0:2] puisque tu indexes via masque[k+1][l+1].
    • La division par coeffMasque devrait se faire en dehors après tes 2 boucles for.
    • Enfin que se passe-t-il quand ton noyau est positionné sur [0;0] et, donc, qu'il a besoin du pixel [-1;-1] pour effectuer sa somme ? Pour l'instant une SEGFAULT ; il faut prévoir une bordure noire de (largeur_kernel-1)/2 à ton image, ou gérer ces cas particulier dans ta boucle.


    Bref, utilise OpenCv.

Discussions similaires

  1. Appliquer à une image le filtre de gabor
    Par bittar dans le forum Images
    Réponses: 0
    Dernier message: 03/11/2013, 21h28
  2. filtre médian appliquer à une image
    Par tapouni dans le forum Images
    Réponses: 2
    Dernier message: 23/05/2008, 21h35
  3. je dois appliquer un filtre gaussien sur mon image
    Par inès83 dans le forum Traitement d'images
    Réponses: 11
    Dernier message: 26/02/2008, 17h54
  4. Réponses: 3
    Dernier message: 14/04/2007, 21h30
  5. filtre séparable pour une image
    Par tlemcenvisit dans le forum Algorithmes et structures de données
    Réponses: 6
    Dernier message: 31/05/2005, 16h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo