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

Traitement d'images Discussion :

Probleme Filtrage d'image en c


Sujet :

Traitement d'images

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut Probleme Filtrage d'image en c
    Bonjour , en effet j'ai un gros problème que je n'arrive pas à résoudre alors une petite aide sera la bienvenue.
    voilà je charge mon fichier .ppm dans une matrice.

    XXX
    XXX
    XXX

    J'entoure cette matrice par 1 ligne/colonne de 0 (pour l'application des filtres)

    OOOOO
    OXXXO
    OXXXO
    OXXXO
    OOOOO

    si j'ouvre puis je sauvegarde le même fichier tout se passe bien.


    Passant maintenant à l'application du filtre :

    PAR EXEMPLE effet FLOU :


    Code C : 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
     
    void appliquerFiltre(char* name)
    {
    //taille image 
      MatriceImgROut=malloc_matrice_2d(length,width);
      MatriceImgVOut=malloc_matrice_2d(length,width);
      MatriceImgBOut=malloc_matrice_2d(length,width);
      coefficients=malloc_matrice_2d(3,3);
     
     
     
    int h , w , i , j ;
     
     
     
        coefficients[0][0] = 1 ;
        coefficients[0][1] = 1;
        coefficients[0][2] = 1 ;
        coefficients[1][0] = 1;
        coefficients[1][1] = 1;
        coefficients[1][2] = 1 ;
        coefficients[2][0] = 1 ;
        coefficients[2][1] = 1 ;
        coefficients[2][2] = 1 ;
     
    for (h = 0 ; h < length ; h++)
      for (w = 0 ; w < width  ; w++)
      {
     
     
         MatriceImgROut[h][w] = 0 ;
         MatriceImgVOut[h][w] = 0 ;
         MatriceImgBOut[h][w] = 0 ;
     
     
         for (i = 0 ; i < 3 ; i++)
           for (j = 0 ; j < 3 ; j++)
     	{
             MatriceImgROut[h][w] += coefficients[i][j] * MatriceImgR[h+i][w+j] ;
             MatriceImgVOut[h][w] += coefficients[i][j] * MatriceImgV[h+i][w+j] ;
             MatriceImgBOut[h][w] += coefficients[i][j] * MatriceImgB[h+i][w+j] ;
     	}
     
    	MatriceImgROut[h][w] = MatriceImgROut[h][w]/9 ;
     
     	if(MatriceImgROut[h][w]<0)
            	MatriceImgROut[h][w]=0;
     	else 
     		if(MatriceImgROut[h][w]>255)
              	MatriceImgROut[h][w]=255;
     
     	MatriceImgVOut[h][w] = MatriceImgVOut[h][w]/9;
     
     	if(MatriceImgVOut[h][w]<0)
            	MatriceImgVOut[h][w]=0;
     	else 
     		if(MatriceImgVOut[h][w]>255)
              	MatriceImgVOut[h][w]=255;
     	MatriceImgBOut[h][w] = MatriceImgBOut[h][w]/9;
     
     	if(MatriceImgBOut[h][w]<0)
            	MatriceImgBOut[h][w]=0;
     	else 
     		if(MatriceImgBOut[h][w]>255)
              	MatriceImgBOut[h][w]=255;
     
     
      }
    puis le ecrire tout sur le fichier de sortie

    Code C : 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
     
     /*--sauvegarde de l'entete--*/
      fprintf(fic,"P3");
      fprintf(fic,"\n# IMG Created , %s",ctime(&tm));
      fprintf(fic,"%d %d",length,width);
      fprintf(fic,"\n255\n");
     
      /*--enregistrement--*/
      for(i=0;i<length;i++) 
      for(j=0;j<width;j++) 
        {
         fprintf(fic,"%d\n",(int)MatriceImgROut[i][j]);
         fprintf(fic,"%d\n",(int)MatriceImgVOut[i][j]);
         fprintf(fic,"%d\n",(int)MatriceImgBOut[i][j]);
     
        }

    Le résultat j'ai un effet flou mais image impossible à reconnaitre on dirait que j'ai pris juste un morceau vertical et je l'ai mis 3 fois :s


    merci de regarder le code si jamais vous voyez quelque chose .
    Images attachées Images attachées   

  2. #2
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonsoir,

    c'est normal que ça ne ressemble à rien, car il y a deux erreurs dans ton programme :
    - La première c'est que tu appliques ton filtre de ma nière non centrée !!! Tu parcours ton filtre de 0 à 2 et tu l'appliques tel quel alors que pour le centrer il faut l'appliquer de -1 à 1. Mais comme on ne peut définir d'indice négatifs, il te faudrait l'appliquer de 0 à 2 et décaler en mettant un -1.
    - La deuxième, c'est que tu fais un seuil avant de diviser par neuf, il faut faire l'inverse.

    Apparté, tant que tu utilises des coefficients positifs et que tu divises ensuite par la somme des coefficients, tu ne pourras jamais déborder, donc inutile de seuiller.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    Bonsoir

    - effectivement pour le seuil il fallait dévisé avant .
    -hors pour la premiere partie de votre reponse honnetement j'ai rien compris pourriez vous me l'expliquer sur mon exemple de code . en effet je n'ai jamais fait du traitement d'image ( c'est le debut d'une application parallele UPC ce que je fait )
    merci encore .

  4. #4
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    for (h = 1 ; h < length-1 ; h++)
      for (w = 1 ; w < width-1  ; w++)
      {
     
         MatriceImgOut[h][w] = 0 ;
     
         for (i = -1 ; i <= 1 ; i++)
           for (j = -1 ; j <=1 ; j++)
           {
               MatriceImgOut[h][w] += coefficients[1+i][1+j] * MatriceImgR[h+i][w+j] ;
           }
     
          MatriceImgOut[h][w] /= 9 ;
      }
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    Ah mais justement ceci ne change rien ( j'ai tester ) a mon programme puisque l'image d'origine est de cette forme :


    length*width

    XXXX
    XXXX
    XXXX

    et que je l'ai encadré avant de faire la multiplication par une ligne/colone de Zéro (0) ce qui revient a la centré non ?

    length+2*width+2
    000000
    0xxxx0
    0xxxx0
    0xxxx0
    000000

    et donc les boucle ca revient au même mais parcontre on constate comme un decalage la même partie de l'image se reproduit a plusieur reprise .
    mais je ne le vois pas vraiement .

  6. #6
    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 : 961
    Points
    961
    Par défaut
    Salut,
    Comme vous l'a déja dit Toto,il y a une erreur lors de l'application de votre filtre:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for (i = 0 ; i < 3 ; i++)
           for (j = 0 ; j < 3 ; j++)
     	{
             MatriceImgROut[h][w] += coefficients[i][j] * MatriceImgR[h+i][w+j] ;
             MatriceImgVOut[h][w] += coefficients[i][j] * MatriceImgV[h+i][w+j] ;
             MatriceImgBOut[h][w] += coefficients[i][j] * MatriceImgB[h+i][w+j] ;
     	}
    Ici vous ne multipliez pas les bonnes valeurs avec les bons coefficients.
    La nouvelle valeur de MatriceImgROut[h][w] devrait etre :
    MatriceImgROut[h][w]=coeff[0,0]*matriceImgR[h-1][w-1]+...+coeff[2][2]*matriceImgR[h+1][w+1]
    Alors que dans votre code voici ce qui est calculé:
    MatriceImgROut[h][w]=coeff[0,0]*matriceImgR[h][w]+...+coeff[2][2]*matriceImgR[h+2][w+2].

    En reglant ce problème vous tomberez dans un autre qui est la gestion des bords(cas ou h=0 par exemple)Il existe plusieurs mécanismes permettant de gerér ça.Voici un Tut trés interressant qui aborde ce sujet.Merci encore à son auteur .
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  7. #7
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    A priori, je dirai que tu as inversé "largeur" et "hauteur" dans ton fichier de sortie.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    J'ai essayé la solution que vous m'avez donner mais sans succés alors je poste les détails en esperant que j'y passerai pas encore une nuit.

    ouverture du fichier
    Code C : 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
     
     /*--recuperation de l'entete--*/
      fgets(stringTmp1,100,fic);
      fgets(stringTmp2,100,fic);
      fscanf(fic,"%d %d",&length,&width);
      fscanf(fic,"%d\n",&ta3);
     
      /*--affichage de l'entete--*/
      printf("\n\n--Entete--");
      printf("\n----------");
      printf("\n%s%s%d %d \n%d\n",stringTmp1,stringTmp2,length,width,ta3);
      MatriceImgR=malloc_matrice_2d(length+2,width+2);
      MatriceImgV=malloc_matrice_2d(length+2,width+2);
      MatriceImgB=malloc_matrice_2d(length+2,width+2);
     
    // ajout deux ligne de 00 1ere et la derniere
    for(i=0;i<length+2;i++)
    {
         MatriceImgR[0][i]=0;
         MatriceImgV[0][i]=0;
         MatriceImgB[0][i]=0;
         MatriceImgR[width+1][i]=0;
         MatriceImgV[width+1][i]=0;
         MatriceImgB[width+1][i]=0;
     
    }
    // la me chose pour les colonnes 
    for(j=1;j<width+1;j++)
    {
         MatriceImgR[j][0]=0;
         MatriceImgV[j][0]=0;
         MatriceImgB[j][0]=0;
         MatriceImgR[j][length+1]=0;
         MatriceImgV[j][length+1]=0;
         MatriceImgB[j][length+1]=0;
     
    }
     
     
      /*--chargement dans la matrice--*/
      for(i=1;i<length+1;i++) for(j=1;j<width+1;j++)  
        { 
         fscanf(fic,"%d",&varr);
         fscanf(fic,"%d",&varv); 
         fscanf(fic,"%d",&varb); 
     /*    fread(&varr,1,1,fic);
         fread(&varv,1,1,fic);
         fread(&varb,1,1,fic);
         */
         MatriceImgR[i][j]=varr;
         MatriceImgV[i][j]=varv;
         MatriceImgB[i][j]=varb;  
        }
     
       /*---fermeture du fichier---*/
      fclose(fic);
     }

    puis la transformation

    Code C : 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
     
    {
      MatriceImgROut=malloc_matrice_2d(length,width);
      MatriceImgVOut=malloc_matrice_2d(length,width);
      MatriceImgBOut=malloc_matrice_2d(length,width);
      coefficients=malloc_matrice_2d(3,3);
     
     
     
    int h , w , i , j ;
     
     
     
        coefficients[0][0] = 1 ;
        coefficients[0][1] = 1;
        coefficients[0][2] = 1 ;
        coefficients[1][0] = 1;
        coefficients[1][1] = 1;
        coefficients[1][2] = 1 ;
        coefficients[2][0] = 1 ;
        coefficients[2][1] = 1 ;
        coefficients[2][2] = 1 ;
     
    for (h = 1 ; h < length-1 ; h++)
      for (w = 1 ; w < width-1  ; w++)
      {
     
     
         MatriceImgROut[h][w] = 0 ;
         MatriceImgVOut[h][w] = 0 ;
         MatriceImgBOut[h][w] = 0 ;
     
     
     
     
     
     
         for (i = -1 ; i <=1  ; i++)
           for (j = -1 ; j <=1 ; j++)
     	{
    /* ca ne serai pas plus MatriceImgROut[h-1][w-1] vu que MatriceImgV est length+2 width+2 * et la OUT length * width? */
             MatriceImgROut[h][w] += coefficients[1+i][1+j] * MatriceImgR[h+i][w+j] ;
             MatriceImgVOut[h][w] += coefficients[1+i][1+j] * MatriceImgV[h+i][w+j] ;
             MatriceImgBOut[h][w] += coefficients[1+i][1+j] * MatriceImgB[h+i][w+j] ;
     	}
     
    	MatriceImgROut[h][w] /= 9 ;
    	MatriceImgVOut[h][w] /= 9 ;
    	MatriceImgBOut[h][w] /= 9 ;
     
     	if(MatriceImgROut[h][w]<0)
            	MatriceImgROut[h][w]=0;
     	else 
     		if(MatriceImgROut[h][w]>255)
              	MatriceImgROut[h][w]=255;
     
     	if(MatriceImgVOut[h][w]<0)
            	MatriceImgVOut[h][w]=0;
     	else 
     		if(MatriceImgVOut[h][w]>255)
              	MatriceImgVOut[h][w]=255;
     
     	if(MatriceImgBOut[h][w]<0)
            	MatriceImgBOut[h][w]=0;
     	else 
     		if(MatriceImgBOut[h][w]>255)
              	MatriceImgBOut[h][w]=255;
     
     
      }

    et finalement je sauvegarde dans un nouveau fichier :


    Code C : 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
     
      /*--sauvegarde de l'entete--*/
      fprintf(fic,"P3");
      fprintf(fic,"\n# IMG Created , %s",ctime(&tm));
      fprintf(fic,"%d %d",length,width);
      fprintf(fic,"\n255\n");
     
      /*--enregistrement--*/
      for(i=0;i<length;i++) 
      for(j=0;j<width;j++) 
        {
         fprintf(fic,"%d\n",(int)MatriceImgROut[i][j]);
         fprintf(fic,"%d\n",(int)MatriceImgVOut[i][j]);
         fprintf(fic,"%d\n",(int)MatriceImgBOut[i][j]);
     
        }

    et je ne vois vraiement pas ou j'ai inversé la hauteur largeur .

  9. #9
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonsoir,

    Citation Envoyé par spax Voir le message
    Code C : 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
     
    int h , w , i , j ;
     
        coefficients[0][0] = 1 ;
        coefficients[0][1] = 1;
        coefficients[0][2] = 1 ;
        coefficients[1][0] = 1;
        coefficients[1][1] = 1;
        coefficients[1][2] = 1 ;
        coefficients[2][0] = 1 ;
        coefficients[2][1] = 1 ;
        coefficients[2][2] = 1 ;
     
    for (h = 1 ; h < length-1 ; h++)
      for (w = 1 ; w < width-1  ; w++)
      {
     
         MatriceImgROut[h][w] = 0 ;
         MatriceImgVOut[h][w] = 0 ;
         MatriceImgBOut[h][w] = 0 ;
     
         for (i = -1 ; i <=1  ; i++)
           for (j = -1 ; j <=1 ; j++)
     	{
             MatriceImgROut[h][w] += coefficients[1+i][1+j] * MatriceImgR[h+i][w+j] ;
             MatriceImgVOut[h][w] += coefficients[1+i][1+j] * MatriceImgV[h+i][w+j] ;
             MatriceImgBOut[h][w] += coefficients[1+i][1+j] * MatriceImgB[h+i][w+j] ;
     	}
     
    	MatriceImgROut[h][w] /= 9 ;
    	MatriceImgVOut[h][w] /= 9 ;
    	MatriceImgBOut[h][w] /= 9 ;
      }
    A moins que je louche car il est tard, mais cette partie là me semble tout à fait correcte.
    As tu fais tourné ce code sur un exemple très petit (matrice 3x3) ?
    Montre nous un résultat...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    je l'ai tester sur la plus petite image PPM que j'ai :s :
    ca donne toujours un truc pas correct . voici les deux images original et transformée .

    j'ai vraiement essaié tous même des choses pas tres correctes lol
    Images attachées Images attachées   

  11. #11
    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 : 961
    Points
    961
    Par défaut
    Re,
    Je n'ai pas trés bien saisi le code qui fait l'ajout des lignes et colonnes à 0,à titre d'essai testez votre code sans envelopez votre image (en modifiant la condition initiale et finale de votre boucle FOR(w=1 to width-1)...

    Autre chose dans votre code vous utilisez Length et Width,est ce des mots clés ou bien des variables?
    Je me demande ça car j'utilise en c++ builder les proprieté HEIGHT et WIDTH .
    Length signifit longueur alors qu'ici on travaille avec la hauteur de l'image(HEIGHT)

    Bonne chance.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    j'ai enlevé les lignes/colonnes ajouter avec des 0 et le resultat est strictement le même vu qu'il étaient pris en compte de toute façon .
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    //length width = dimension de l'image .
      fscanf(fic,"%d %d",&length,&width);
    je test et je test encore .

  13. #13
    Modérateur
    Avatar de ToTo13
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Janvier 2006
    Messages
    5 793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2006
    Messages : 5 793
    Points : 9 860
    Points
    9 860
    Par défaut
    Bonjour,

    alors c'est le matin et je suis un peu plus réveillé...
    - Donc une petite remarque, les images ont un deux rangées supplémentaires, donc il faut parcourir de 1 à length+1 et 1 à width+1. Sauf que les colonnes n'ont pas été ajoutée sur l'image résultat, donc ça va déborder et générer un "segmentation fault". c'est pas grave pour l'instant, il y a juste deux colonnes qui ne sont pas traitées...
    - Deuxièmement, le code pour appliquer un filtre est toujours bon... je confirme.
    Donc c'est que je problème vient d'ailleurs.
    Le mieux serait de faire tourner une exemple avec une image 3x3 avec des pixels allant de 1 à 9 (sur les trois composantes) et d'afficher le résultat.
    - Dernière chose, le format de lecture/écriture pour des images ppm est FAUX. En ppm, on n'écrit ni ne lit des entiers. Les couleurs sont des entiers codés sur 8 bits, donc lorsque l'on a une valeur de pixel égale à 125, on écrit/lit le caractère 125. On n'écrit pas la chaine de caractère "125". Les images sont trois fois plus grosses.

    Conclusion, à ce stade, la meilleure solution est de tester sur l'exemple 3x3...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  14. #14
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    188
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 188
    Points : 140
    Points
    140
    Par défaut
    Probleme résolu , en effet c'était un inversement de length et width lors de l'allocation mémoire pour les matrices qui auront les résultats des calculs de filtres !! mais euh ne devrai-je pas avoir une SEGMENTATION ERROR vu que c'est pas des images carrées ? bizarre

    en tous cas merci à tlm, puis dernière chose quelqu'un pourrait me re-diriger vers la partie ou je peutx poser des questions sur UPC ( unified parallel C )

  15. #15
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Citation Envoyé par spax Voir le message
    Probleme résolu , en effet c'était un inverssement de length et width lors de l'allocation memoire pour les matrices qui auront les résultats des calcule de filtre !!
    1. Je l'avais dit
    2. C'est une inversion au moment de la lecture/ecriture de la 3eme ligne de l'entete PPM

    mais euh ne deverai-je pas avoir une SIGMENTATIION ERROR vu que c'est pas des images carrée ? bizzard
    Non, car le malloc alloue le bon nombre d'octets: Largeur*Hauteur, et la multiplication est commutative.
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme Inserer une image
    Par Federico_28 dans le forum IHM
    Réponses: 2
    Dernier message: 24/04/2006, 12h05
  2. [bmp]probleme avec les images dont la largeur est >256
    Par delfare dans le forum Développement 2D, 3D et Jeux
    Réponses: 8
    Dernier message: 15/02/2006, 16h59
  3. [ImageMagick] Redimensionnement d'image
    Par GTJuanpablo dans le forum Bibliothèques et frameworks
    Réponses: 11
    Dernier message: 05/01/2006, 14h05
  4. Problème avec l'image initrd
    Par Invité dans le forum Administration système
    Réponses: 1
    Dernier message: 21/12/2005, 16h16
  5. [débutante]Probleme de liens image dans JSP/Servlet
    Par celine31 dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 24/11/2004, 15h51

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