Répondre à la discussion
Affichage des résultats 1 à 7 sur 7

Algorithme moyenneur 3x3 / Lissage



  1. #1
    Dismay_

    Question Algorithme moyenneur 3x3 / Lissage


    ------

    Bonsoir à tous!

    Je cherche à mettre au point un algorithme du moyenneur 3x3 (appelé aussi lissage) pour l'utiliser comme filtre en traitement d'images.

    Si j'ai bien compris, cette opération consiste à remplacer la valeur de chaque pixel par la moyenne des valeurs de ses pixels voisins. Il s’agit d’un filtre passe-bas, il ne laisse donc pas passer les fréquences au dessus d’une certaine valeur.
    Le masque de convolution utilisé est le suivant :

    1 1 1
    1 1 1

    Si l'on prend l'exemple de la matrice suivante:

    15 18 14
    29 27 13
    12 19 21

    Le produit de convolution est alors :

    (27*1+14*1+18*1+15*1+29*1+12*1 +19*1+21*1)/9 = 19

    La matrice de l’image traitée devient alors :

    15 18 14
    29 19 13
    12 19 21

    Enfin, il me semble que cela fonctionne comme ça!
    Le problème c'est que je suis plus que débutant en informatique, et je n'arrive pas à faire l'algorithme correspondant.

    Si vous pouviez m'y aider...

    D'avance merci,

    Bonne soirée

    -----

  2. Publicité
  3. #2
    lou_ibmix_xi

    Re : Algorithme moyenneur 3x3 / Lissage

    Je pense que la matrice est plutôt
    1 1 1
    1 1 1 * 1/9
    1 1 1

    Si tu fais toujours la convolution avec cette matrice, tu n'es pas obligé d'utiliser la convolution avec ton masque, mais bien, comme tu dis, une moyenne sur tes 9 élèments...
    Par contre, ce type de filtrage rajoute 2 lignes et 2 colonnes à ton image (au début et à la fin), qu'il faut enlever pour récupérer une image de la même dimension.

  4. #3
    argusazure

    Re : Algorithme moyenneur 3x3 / Lissage

    Citation Envoyé par lou_ibmix_xi Voir le message
    Par contre, ce type de filtrage rajoute 2 lignes et 2 colonnes à ton image (au début et à la fin), qu'il faut enlever pour récupérer une image de la même dimension.
    Je dirais plutôt qu'on ne peut pas traiter la premiere ligne, derniere ligne, premiere colonne et derniere colonne. Une solution consiste à faire la moyenne sur 4 pixels pour les coins et sur 6 pixels sur les bords.

    L'algo basique est plutôt simple

    Code:
    //in : imageIn [0..ligNb-1]0..colNb-1]
    //out : imageOut[0..ligNb-1][0..colNb-1]
    
    //mise a zero de imageOut
    pour lig =0 to ligNb-1
      pour col = 0 to colNg-1
         imageOut[lig][col]=0
    
    //convolution moyenne 3x3
    pour lig =1 to ligNb-2
    {
      pour col = 1 to colNg-2
      {
         imageOut[lig][col]=0
         pour j=-1 to +1
         {
           pour i=-1 to +1
           {
              imageOut[lig][col]=imageOut[lig][col]+imageIn[lig+i][col+j]
            }
         }
         imageOut[lig][col]=/9;
      }
    }

  5. #4
    Dismay_

    Re : Algorithme moyenneur 3x3 / Lissage

    Citation Envoyé par lou_ibmix_xi Voir le message
    Je pense que la matrice est plutôt
    1 1 1
    1 1 1 * 1/9
    1 1 1
    Oui j'avais effectivement oublié la 3ème ligne ....


    Citation Envoyé par argusazure Voir le message
    Je dirais plutôt qu'on ne peut pas traiter la premiere ligne, derniere ligne, premiere colonne et derniere colonne. Une solution consiste à faire la moyenne sur 4 pixels pour les coins et sur 6 pixels sur les bords.
    Je vais essayer ça! merci

  6. A voir en vidéo sur Futura
  7. #5
    Dismay_

    Re : Algorithme moyenneur 3x3 / Lissage

    Alors j'ai essayé de coder l'algo et je me heurte à un problème:

    %clc
    %clear
    %close all

    function [out]=moyenneur3x3(Im)

    Im=imread('\\iutb-cpt\profetu$\l.lorinquer\Burea u\ruelle.jpg');

    [Limg,Cimg,Bimg] = size(Im);
    out=zeros(Limg,Cimg);

    for i=0:Limg-1
    for j=0:Cimg-1
    Im(i,j)=0;
    end
    end

    for i=1:Limg-2
    for j=1:Cimg-2
    out(i,j)=0;
    for j=-1:1
    for i=-1:1
    out(i,j)=(out(Limg,Cimg) + Im(Limg+i,Cimg+j));
    end
    end

    out(i,j)=(p(i-1,j-1)+p(i-1,j)+p(i-1,j+1)+p(i,j-1)+p(i,j)+p(i,j+1)+p(i+1,j-1)+p(i+1,j)+p(i+1,j+1))/9;
    end
    end

    colormap(gray);
    image(out);

    erreur: ??? Attempted to access Im(0,0); index must be a positive integer or logical.

    Error in ==> moyenneur3x3 at 14
    Im(i,j)=0;

    En quoi "Im(i,j)=0;" est une expression fausse?

    Voilà merci de m'aider svp
    Dernière modification par Dismay_ ; 27/05/2008 à 14h52.

  8. #6
    pat7111

    Re : Algorithme moyenneur 3x3 / Lissage

    Citation Envoyé par Dismay_ Voir le message
    En quoi "Im(i,j)=0;" est une expression fausse?
    Le Monsieur te dit

    Citation Envoyé par Dismay_ Voir le message
    erreur: ??? Attempted to access Im(0,0); index must be a positive integer or logical.
    il faut initialiser les indices a 1
    Plutôt appliquer son intelligence à des conneries que sa connerie à des choses intelligentes...

  9. Publicité
  10. #7
    Dismay_

    Re : Algorithme moyenneur 3x3 / Lissage

    Ok merci! Mais même en initialisant i et j, ça ne fonctionne pas!

    Quelqu'un pourrait il m'aider SVP??

Discussions similaires

  1. Rubik's cube 3x3
    Par croustibat dans le forum Mathématiques du supérieur
    Réponses: 9
    Dernier message: 21/02/2016, 08h10
  2. lissage du courant
    Par TaRiKq dans le forum Électronique
    Réponses: 5
    Dernier message: 06/11/2009, 21h54
  3. Convertisseur F/T ou lissage ??
    Par Spotlessmind50 dans le forum Électronique
    Réponses: 11
    Dernier message: 18/03/2007, 19h41
  4. filtre moyenneur
    Par gag^2 dans le forum Électronique
    Réponses: 1
    Dernier message: 15/05/2006, 10h09
  5. lissage tension
    Par jbo dans le forum Électronique
    Réponses: 17
    Dernier message: 24/03/2004, 19h37
Découvrez nos comparatifs produits sur l'informatique et les technologies.