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 de Bruit Gaussien?


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut Programme de Bruit Gaussien?
    Bonjour ^^

    Alors j'ai créé un programme pour simuler un hologramme en créant une image grâce à une foncitonne qui donc...simule un hologramme, maintenant j'ai besoin de rajouter à cette fonction une autre fonction de Bruit Gaussien, histoire de rajouter dans cette image un bruit de fond Gaussien.

    Le soucis c'est que je n'y connais rien en bruit Gaussien et j'ai bien effectuer des recherches mais je suis tomber sur peu de chose concernant un programme capable de créer un bruit Gaussien... J'ai donc vraiment besoin de votre aide ^^

  2. #2
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    Alors là, tu tapes dans le "tout fait déjà disponible". Recherche du coté de la physique ou du traitement de signal.

    Il y a des centaines de codes plus ou moins disponibles qui sont issus de la recherche.

    Ils sont souvent tordus, mais donnent des résultats.

    En espérant que ca te débloque un peu.

    Sinon, tu dois pouvoir générer un bruit gaussien assez facilement, il te suffit de chercher l'algo… au même endroit, d'ailleurs.

  3. #3
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2012
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2012
    Messages : 2
    Par défaut
    Bon, je me suis inspiré de ça :


    http://c-faq.com/lib/gaussian.html

    Et voici mon programme :

    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
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    /***************************************************************************/
    /******            GENERATEUR DE LA FONCTION                          ******/
    /******            D'UNE PARTICULE DIFFUSEE                           ******/
    /******                nom du programme : partdif                     ******/
    /****** utilisation du programme : gener [intensity]                      **/
    /***************************************************************************/
     
    #include<stdio.h>
    #include<math.h>
    #include<string.h>
    #include "image.h"        	/**** declaration de la structure image ****/
     
    #define pi 3.1415927
     
    char prg_name[255];             /*** nom du programme (ici partdif) ***/
     
    double  (*fct)();          	/*** pointeur sur la fonction ***/
    double intensity();
     
    main(argc,argv)       /**** programme principal avec arguments ****/
    int argc;	      /*** argc : nombre de mots dans la commande */
    char *argv[];         /**** argv[] : tableau de pointeurs sur des chaînes de caractères ****/
     
     {
     char nom_image[20];
     FILE *df;             /** nom de l'image **/
     FILE *dat;           /** nom du fichier contenant les données de la particule  **/
     int i,j,test,N;
     double e;
     struct image img;    /**** img est une variable de type image  ***/
     uint8 *pixel;
     float ZE,D,k,L,P;
     
     
     
     
    /***********************************************************************/
     
     if(argc<2){ fprintf(stderr,"Exemple d'utilisation du programme %s :          partdif intensity| display -&\n",argv[0]);
                 exit(0);}
                          /**** si mauvaise utilisation de la commande ****/
     strcpy(prg_name,argv[0]);
     
     printf("\nNom du fichier image avec entête .pgm: ");
     gets(nom_image);
     
    /**************** Lecture des variables de la particule ***************/
     
     dat=fopen("data.txt","r");
     if(dat==0) printf("Erreur d'ouverture\n");
     fscanf(dat,"%d\n%f\n%f\n%f\n%f\n%f",&N,&ZE,&D,&k,&L,&P);
     fprintf(stderr,"N:%d\nZE:%5.2fmm\nD:%5.2fum\nk:%f\nL:%5.2fnm\nP:%5.2fum\n",N,1e3*ZE,1e6*D,k,1e9*L,1e6*P);
     img.Xsize = N;
     img.Ysize = N;
     
     /********* creation fichier image *********************************************/
     
     df=fopen(nom_image,"wb");
     fprintf(stdout,"ecriture de l'entete .pgm\n");
     fprintf(df, "P5\n%d %d\n255\n",img.Xsize,img.Ysize);
     
    /******************** CHOIX DE LA FONCTION *******************************/
    /******      fct prend l'adresse de la fonction désirée            ***********/
     
    if (!strcmp(argv[1],"intensity")) fct=&intensity;
     
     else  {fprintf(stderr,"\n\n\a %s :figure inexistante :\nintensity\n",argv[0]);exit(1);}
     
    /******************* allocation memoire **********************************/
     
      img.image = (uint8 *) malloc(img.Xsize*img.Ysize);
      if ( img.image == NULL )
      	{
    	fprintf(stderr,"partdif: \n");
    	fprintf(stderr,"Pb d'allocation\n");
     	exit(3);
    	}
     
     
    /*************       CALCULS DES NIVEAUX DE GRIS DANS L'IMAGE  ********/
     
      fprintf(stderr,"%s: generation de l'image: *** %s ***\n",argv[0],argv[1]);
      pixel = img.image;
      for(j=0;j<img.Ysize;j++)
            for(i=0;i<img.Xsize;i++)
          	    {
                e = (int)(128*(*fct)(N,i,j,D,ZE,k,L,P));   /** appel de la fonction (*fct)  **/
                *pixel++ = (uint8)e;
          	    }
     
      fprintf(stderr,"%s: image %s generee\n",argv[0],nom_image);
     
    /*********** ECRITURE DE L'IMAGE e DANS UN FICHIER   *******************/
     
     
    test=fwrite((unsigned char*)img.image,img.Xsize,img.Ysize,df);
    if (test!=img.Xsize) {fprintf(stdout,"probleme d'ecriture de l'image");scanf("%d",&test);}
    fclose(df);
    fclose(dat);
     }
     
                    /**********************************************/
                    /*          FIN DU PROGRAMME PRINCIPAL        */
                    /**********************************************/
     
     
     
    /****************** CALCUL DE LA FONCTION intensity ************/
     
    double intensity(n,u,v,d,ze,K,l,p,z,U,V,phase,Z)
                    int n,u,v;
                    float d,ze,K,l,p;
                    double U, V;
                    double Z;
    {
     
                    double r,F,NG,zeq,deq,alpha; /** p = taille du pixel **/
                    alpha = deq/(l*zeq);   /*** cf App. OPtics, Vol.52(1), 2013  **/
                    zeq = K*ze;
                    deq = K*d;
                    u = u - n/2;  /*** centrage figure en (N/2,N/2)  ***/
                    v = v - n/2;
     
    		        U = (rand() + 1.) / (RAND_MAX + 2.);
    		        V = rand() / (RAND_MAX + 1.);
    		        Z = sqrt(-2 * log(U)) * sin(2 * pi * V);
                    r = sqrt(u*u*p*p+v*v*p*p);
                    F = (pi/2)*alpha*alpha*j1(pi*r*alpha)/(pi*r*alpha);
                    NG = 1 - 2*l*zeq*sin((pi*r*r/(l*zeq)))*F + (l*zeq)*(l*zeq)*F*F + Z;
                    return(NG);
     
    }
     
    /*******************      FIN      ****************************************/

    En gros c'est un programme qui génère une simulation d'hologramme + un bruit Gaussien (à l'origine il ne faisait que générer l'hologramme), bref, le soucis maintenant c'est que... l'image qui avant nous montrait une simulation d'hologramme me met maintenant des pixels blancs et noirs (comme un télé mal réglé), il doit donc y avoir un problème dans la fonction du bruit Gaussien, mais lequel? O_o

  5. #5
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    On est bien d'accord que pour que ce programme soit bien écrit, chaque commentaire contenant "***" signifie l'écriture d'une fonction dans le code final?

    Merci d'avoir posté ta solution, elle sera utile.

Discussions similaires

  1. Niveau du bruit gaussien
    Par Casimirs dans le forum MATLAB
    Réponses: 0
    Dernier message: 18/10/2011, 20h28
  2. programme du bruit gaussien
    Par aseau86 dans le forum C++
    Réponses: 15
    Dernier message: 11/02/2010, 17h18
  3. Comment ajouter un bruit gaussien
    Par kchiheb dans le forum MATLAB
    Réponses: 2
    Dernier message: 07/10/2008, 18h09
  4. Ajouter un bruit gaussien à une image
    Par SmileSoft dans le forum C++
    Réponses: 35
    Dernier message: 18/04/2008, 06h54
  5. Réponses: 0
    Dernier message: 08/04/2008, 20h19

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