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 :

programme du bruit gaussien


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut programme du bruit gaussien
    bonsoir , je travail avec c++ à propos du traitement d'image , j'ai fait tous les traitements , et je veut savoir comment ajouter un bruit gaussien à une image , bref je l'ait fait , voici le code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(choix){
     traitemt = true;
       int bruit=RandG(0.5,2)*10;  //bruit gaussien 
     
     for(int i=0;i<w;i++){
    for(int j=0;j<h;j++){
        ImgRes->Canvas->Pixels[i][j] = ImgRes1->Canvas->Pixels[i][j]+bruit;
    ImgRes1 c'est l'image en niveaux de gris


    j'ai donner des valeurs à l'amplitude ,la moyenne et l'ecart type , mais le probléme c'est que l'image ne sort pas bruiter ,ya que des taches vert sur elle ;quelqu'un peut m'aider s'il vous plait , merci

  2. #2
    Membre Expert Avatar de jabbounet
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Juin 2009
    Messages
    1 909
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49

    Informations professionnelles :
    Activité : Consultant informatique

    Informations forums :
    Inscription : Juin 2009
    Messages : 1 909
    Par défaut
    le problème est que ton nombre aléatoire n'est généré qu'une seule fois au début de ta fonction.

    Cela reviens à décaler les niveaux de gris de manière uniforme sur toute l'image.


    Tu devrais plutôt avoir quelque chose du style
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
     
    int bruit; //bruit gaussien
     
    for(int i=0;i<w;i++){
        for(int j=0;j<h;j++){
            bruit=RandG(0.5,2)*10; // calcul d'un nouveau bruit
            ImgRes->Canvas->Pixels[i][j] = ImgRes1->Canvas->Pixels[i][j]+bruit;
        }
    }

  3. #3
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Le sujet a été déjà traiter, je te conseil de faire une recherche sur le forum.
    Sinon, jette un coups d'œil au forum dédié au traitement d'image (développez.net) , il y a une sujet récent et qui est résolu.

    Désolé, j'ai pas eu le temps de faire des recherches !

  4. #4
    Invité
    Invité(e)
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    if(choix){
     traitemt = true;
       int bruit=RandG(0.5,2)*10;  //bruit gaussien 
     
     for(int i=0;i<w;i++){
    for(int j=0;j<h;j++){
        ImgRes->Canvas->Pixels[i][j] = ImgRes1->Canvas->Pixels[i][j]+bruit;
    Regarde la documentation de ta librairie, pour savoir le type de Pixels... Si tu utilises Borland (ca y ressemble à mon avis), Pixels ce ne sont pas des int mais des TColor, dans lesquels les 3 composantes de couleur (RVB) sont codées chacune sur un octet...

    Pour changer la couleur, il faut changer les valeurs des trois composantes R, V et B, en décomposant la valeur du pixel (toujours sous Borland, ca va être atrocement lent, le mieux est de lire la doc de la fonction ScanLine, ca devrait mieux aller après...)

    Aussi, fais attention : les valeurs des couleurs sont contraintes à ne prendre que certaines valeurs. Si c'est de 0 à 255, il faut que tu "bornes" la modification à cet intervalle (sinon, tu vas voir de petites imperfections quand tu ajoutes du bruit à des zones très sombres ou très claires). Et, comme dit précédemment, il te faut varier le bruit d'un pixel à l'autre, sinon, ce n'est pas du bruit...

    Francois

  5. #5
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    Avant de commencer à faire n'importe quoi dans quant on est novice, on commence par lire de la doc, faire un état de l'art etc ...

    Pour faire un traitement sur une image, il est beaucoup plus simple de convertir l'image en matrice, faire le traitement sur cette matrice et le sauver (dans certains cas) dans une nouvelle matrice, et pour finir convertir la matrice résultat en image.

    NB: convertir = transformer

    Pour ajouter un bruit à une image (sous entendu déjà converti en matrice), il faut voir de quel type est cette image, niveaux de gris ou couleurs.

    Si c'est en niveau de gris, pour ajouter le bruit, ben faire une addition et veiller à ce que les valeur ne dépassent pas 255, sinon les remplacer par 255.

    Dans le cas d'une image en couleur, il faut faire la même chose pour chaque bande de couleurs.

    Le code suivant est à bannir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     for(int i=0;i<w;i++){
        for(int j=0;j<h;j++){
                 ImgRes->Canvas->Pixels[i][j] = ImgRes1->Canvas->Pixels[i][j]+bruit;

  6. #6
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    merci pour vos réponses , je vais chercher cette commande Scan line ;si je ne comprend rien je poserai une autre question sur ca ;lol;
    @kmaniche:j'ai fait des recherche sur ca avant de poser la question ; et pour mon image je l'ait convertie en matrice pour que je puisse faire les traitement sur elle (NG , egalisation,etalement et les filtres) ;et l'image que j'essai de bruiter est celle en niveaux de gris.
    de tt façon je vais faire d'autres recherche sur cette cde et je vais voir ce que ca donnera

    Merci beaucoup

  7. #7
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Citation Envoyé par kmaniche Voir le message
    Avant de commencer à faire n'importe quoi dans quant on est novice, on commence par lire de la doc, faire un état de l'art etc ...

    Pour faire un traitement sur une image, il est beaucoup plus simple de convertir l'image en matrice, faire le traitement sur cette matrice et le sauver (dans certains cas) dans une nouvelle matrice, et pour finir convertir la matrice résultat en image.

    NB: convertir = transformer

    Pour ajouter un bruit à une image (sous entendu déjà converti en matrice), il faut voir de quel type est cette image, niveaux de gris ou couleurs.

    Si c'est en niveau de gris, pour ajouter le bruit, ben faire une addition et veiller à ce que les valeur ne dépassent pas 255, sinon les remplacer par 255.

    Dans le cas d'une image en couleur, il faut faire la même chose pour chaque bande de couleurs.

    Le code suivant est à bannir :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     for(int i=0;i<w;i++){
        for(int j=0;j<h;j++){
                 ImgRes->Canvas->Pixels[i][j] = ImgRes1->Canvas->Pixels[i][j]+bruit;
    j'ai fait ce que fchaton a proposé, et ca a marché ; par contre j'ai aussi fait ce que vous avez proposé et ca donnée ca :

    int A=rand();

    if(choix){
    for(int i=0;i<w;i++){
    for(int j=0;j<h;j++){
    int bruit=RandG(1,2)*A;

    //ImgRes->Canvas->Pixels[i][j]
    ImgRes1->Canvas->Pixels[i][j]+bruit;
    if( ImgRes1->Canvas->Pixels[i][j]+bruit<255) {
    ImgRes->Canvas->Pixels[i][j]= ImgRes1->Canvas->Pixels[i][j]+bruit;
    }

    mais l'image est a peine bruiter , sinon je vais la laisser avec des valeurs comme ca et puis c tous , pour la commande ScanLine j'ai chercher sur la doc de c++ builder mais rien , sur le net j'ai trouver autre chose .
    l'importance MErci pour vos reponses

  8. #8
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    mais l'image est a peine bruiter , sinon je vais la laisser avec des valeurs comme ca et puis c tous , pour la commande ScanLine j'ai chercher sur la doc de c++ builder mais rien , sur le net j'ai trouver autre chose .
    l'importance MErci pour vos reponses
    Cela montre bien que c'est pas le bnon résultat. Pour te montrer que ton programme donne n'importe quoi, essaye de faire un ajout de bruit avec un autre logiciel d'imagerie, et vérifie au moins à l'oeil nu le résultat que tu as eu avec celui obtenu avec ton programme !!

    Pour scanline, sous builder tu fais :

    scanline +

  9. #9
    Membre Expert
    Avatar de kmaniche
    Inscrit en
    Janvier 2006
    Messages
    1 717
    Détails du profil
    Informations forums :
    Inscription : Janvier 2006
    Messages : 1 717
    Par défaut
    En plus, sur le forum développez.net le sujet a été traité plusieurs fois :
    http://www.developpez.net/forums/d56...age-scaneline/

  10. #10
    Membre actif
    Femme Profil pro
    Étudiant
    Inscrit en
    Décembre 2009
    Messages
    38
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2009
    Messages : 38
    Par défaut
    Merci infiniment pour votre aide , ca a bien marché

Discussions similaires

  1. Programme de Bruit Gaussien?
    Par Yukikurama dans le forum C
    Réponses: 4
    Dernier message: 13/11/2012, 15h51
  2. Niveau du bruit gaussien
    Par Casimirs dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/10/2011, 19h28
  3. Comment ajouter un bruit gaussien
    Par kchiheb dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/10/2008, 17h09
  4. Ajouter un bruit gaussien à une image
    Par SmileSoft dans le forum C++
    Réponses: 35
    Dernier message: 18/04/2008, 05h54
  5. Réponses: 0
    Dernier message: 08/04/2008, 19h19

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