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 :

Ajouter un bruit gaussien à une image


Sujet :

C++

  1. #21
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Citation Envoyé par Kaji Voir le message
    ...
    Mais en tous cas, je ne connaissais pas Box-Muller, ça peut servir, merci.
    C'est la base pour passer d'un loi uniforme à normale! il faut toujours l'avoir à l'esprit... un pc ne sais pas générer de base des nombres aléatoires sur une loi normale.

  2. #22
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Si, si, j'ai très bien compris, et je maintiens ce que je dis.
    Bien sûr, tu as raison, c'est toi le plus fort...

    Citation Envoyé par Matthieu Brucher Voir le message
    Si après les algos de débruitage ne fonctionnent pas, on saura d'où ça vient
    Effectivement !

  3. #23
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par Kaji Voir le message
    Bien sûr, tu as raison, c'est toi le plus fort...
    Au moins les personnes qui veulent me faire confiance peuvent vérifier en cherchant sur Internet ou en vérifiant ma formation...

  4. #24
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Matthieu Brucher Voir le message
    Au moins les personnes qui veulent me faire confiance peuvent vérifier en cherchant sur Internet ou en vérifiant ma formation...
    Tu sais, Matthieu, que Claude Allègre a une très bonne formation et qu'il émet des doutes sur le réchauffement climatique ?


    Blague à part, la référence pour moi en calcul numérique, c'est Numerical Recipes www.nr.com

    Et justement, ils ont traité le problème des nombres aléatoires selon une Gaussienne.

    J'ai même trouvé sur le site de Pierre Chatelier une implémentation de l'algo de Numerical Recipes.
    http://ktd.club.fr/programmation/cpp-random.php. Il y a même ses tests avec.

    Je pense que tu (SmileSoft) devrait le tester et l'utiliser... (avec son autorisation)

    Sinon il y a une implémentation toute faite de l'algo de Box-Muller.

    En performance, le classement des algos devrait donner ceci :
    1) Numerical Recipes (de loin !!)
    2) Le mien
    3) Box-Muller

    Bon bruitage...
    Dernière modification par E.Bzz ; 28/09/2010 à 11h14. Motif: LE

  5. #25
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Faut juste une licence pour utiliser le code des NR (et quand je vois le code fourni, c'est parfois...)...

    Maintenant, si tu veux vraiment classer le code, la vitesse ne veut rien dire dans ce cas, ce qui est primordial, c'est la qualité de la génération aléatoire, et là ton code est bien loin derrière Box-Muller ou la solution des NR.

  6. #26
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Salut Kaji et Matthieu

    je vous remercie pour cette riche discussion

    je travaille maintenant sur une autre méthode, j'ai trouvé ce que donne le générateur des nombre aléatoires de c++ builder, et j'ai pensé à une petite solution qui parait simple.

    Supposant que j'ai une image que je vais lui ajouter un bruit B avec le sigma=0.2 alors:
    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
    int i,x,y=0;
    float B;
    randomize();
    for( i=0;i<Form1->Image1->Picture->Width;i++)// parcours des ligne de l'image. 
      {
        for(int j=0;j<Form1->Image1->Picture->Height;j++) // parcours des colonnes de l'image.
        {
        x=rand()%20;
        y=rand()%20;
        B=exp(-(x*x+y*y)/(2*0.2*0.2));
        //l'ajout du bruit
        Form1->Image1->Canvas->Pixels[i][j]=Form1->Image1->Canvas->Pixels[i][j]+B;
        }
      }
    }
    Remarque: j'ai utilisé la formule de gauss à 2 dimension (pour image)
    f(x,y)=exp( - (x*x+y*y) / (2*sigma*sigma))

    • Est ce que je suis dans le bon sens?

    • Je trouve une difficulté pour le sigma:
      Est ce qu'il doit être calculé ?
      ou c'est un paramètre que l'user va entrer?


    Merci d'avance

  7. #27
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Euh... B n'est pas un bruit gaussien...

  8. #28
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    mais c'est quoi cette horreur

  9. #29
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Salut Mathieu!!

    Citation Envoyé par Matthieu Brucher Voir le message
    Euh... B n'est pas un bruit gaussien...
    Merci de m'expliquer pourquoi ce B n'est pas un bruit?


    Merci d'avance

  10. #30
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    C'est un bruit, mais pas gaussien (fais le calcul par toi-même, il n'est même pas de moyenne nulle)

  11. #31
    Membre averti
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    410
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 410
    Points : 361
    Points
    361
    Par défaut
    Box muller c'est quant meme pas compliqué !!!

  12. #32
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    salut

    j'ai essayé un autre code, là j'utilise une image couleur (rgb):

    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
     
    void __fastcall TForm1::Button2Click(TObject *Sender)
    {
    int B;
    int amplitude=50;
    randomize();
    int r,v,b=0;
    for(int i=0;i<Form1->Image1->Picture->Width;i++)
      {
        for(int j=0;j<Form1->Image1->Picture->Height;j++)
        {
         B=(char )( RandG( 0.0,0.3 ) * amplitude );
          // RandG génère des nombre aléatoir selon la loi de gauss.
         // l'ajout du bruit B à chaque composantes R, G et B de l'image
        r=GetRValue(Image1->Canvas->Pixels[i][j])+B;
        v=GetGValue(Image1->Canvas->Pixels[i][j])+B;
        b=GetBValue(Image1->Canvas->Pixels[i][j])+B;
        Form1->Image1->Canvas->Pixels[i][j]=RGB(r,v,b);
        }
      }
     
    }
    sachant que la fonction RandG est le générateur des nombres aléatoires gaussien de c++ builder.

    Est ce que B est un bruit gaussien ?

    Merci d'avance

  13. #33
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Dans ce cas, oui. En revanche, je ne connais pas la qualité du générateur sous-jacent, ça peut marcher dans ce cas et si tu le réutilises avec des outils plus complexes planter dans un problème statistique.

  14. #34
    Invité
    Invité(e)
    Par défaut
    Salut SmileSoft,

    Désolé pour le retard... félicitations pour ton code... Je ne connaissais pas la fonction RandG de Builder...

    Citation Envoyé par SmileSoft Voir le message
    Est ce que B est un bruit gaussien ?
    D'après la doc BCB, oui...
    Pour en être sûr, il faudrait effectuer un petit test et tracer l'histogramme de répartition...

    Par contre, j'ai l'impression que tu as oublié dans ton code d'écrêter les valeurs des composantes de tes pixels.
    Je ne sais pas quel est la plage de valeurs, mais si c'est du [0..255], et que tu as des pixels blancs [255, 255, 255] auxquels tu ajoutes du bruit, ces pixels vont peut-être se retrouver noirs !!

  15. #35
    Membre actif Avatar de SmileSoft
    Inscrit en
    Mars 2008
    Messages
    436
    Détails du profil
    Informations forums :
    Inscription : Mars 2008
    Messages : 436
    Points : 214
    Points
    214
    Par défaut
    Salut kaji
    Jai pas compris ce que voulez vous dire par:
    Citation Envoyé par Kaji Voir le message
    Par contre, j'ai l'impression que tu as oublié dans ton code d'écrêter les valeurs des composantes de tes pixels.
    Je ne sais pas quel est la plage de valeurs, mais si c'est du [0..255], et que tu as des pixels blancs [255, 255, 255] auxquels tu ajoutes du bruit, ces pixels vont peut-être se retrouver noirs !!
    Merci d'avance

  16. #36
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 960
    Points
    960
    Par défaut
    Bonjour à vous,
    Je pense que ce que Kaji veut dire c'est qu'on ajoutant la valeur B (le nombre aléatoire généré)à chaque composante (R,V,B),Il serait possible que les nouvelles valeurs des composantes (R,V,B)dépassent 255!!
    Ce qui donnerai des résultats pas trés attendus!

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. [Débutant] Ajouter une bruit gaussien à une video
    Par nadou nadouch dans le forum Images
    Réponses: 1
    Dernier message: 19/03/2013, 09h18
  2. Ajouter des fichiers dans une image de disque .tib
    Par koKoTis dans le forum Autres Logiciels
    Réponses: 22
    Dernier message: 30/08/2006, 22h20
  3. Effacer le bruit sur une image
    Par zehni dans le forum Images
    Réponses: 4
    Dernier message: 02/06/2006, 09h53
  4. [ImageMagick] Ajouter un texte dynamique à une image
    Par masseur dans le forum Bibliothèques et frameworks
    Réponses: 4
    Dernier message: 14/02/2006, 15h24
  5. Ajouter un tooltip sur une image
    Par K4sh dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 14/10/2005, 19h12

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