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 :

Code source pour appliquer une DCT


Sujet :

C

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut Code source pour appliquer une DCT
    Je suis en train de programmer un compresseur d'image et j'ai un problème avec ma DCT
    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
     
    struct s_dct dct(struct s_image bloc_in[],int k)//DCT
    {
        int x,y;
        struct s_dct bloc_out;
     
        bloc_out.bleu = bloc_out.rouge = bloc_out.vert = 0;
        for(x=0;x<8;x++)
        {
     
                        for(y=0;y<8;y++)
                        {
                                        bloc_out.bleu=bloc_out.bleu + (bloc_in[x*y].bleu*cos((((2*x)+1)*(bloc_in[k].x)*M_PI)/(16))*cos((((2*x)+1)*(bloc_in[k].y)*M_PI)/(16)));
                                        bloc_out.vert=bloc_out.vert + (bloc_in[x*y].vert*cos((((2*x)+1)*(bloc_in[k].x)*M_PI)/(16))*cos((((2*x)+1)*(bloc_in[k].y)*M_PI)/(16)));
                                        bloc_out.rouge=bloc_out.rouge + (bloc_in[x*y].rouge*cos((((2*x)+1)*(bloc_in[k].x)*M_PI)/(16))*cos((((2*x)+1)*(bloc_in[k].y)*M_PI)/(16)));
     
                        }
        }
        bloc_out.bleu=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.bleu;;
        bloc_out.vert=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.vert;
        bloc_out.rouge=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.rouge;
        return (bloc_out);
    }
    bloc_in[] est une matrice de 8*8 et la fonction retourne un entier à placer dans un tableau à l'indice k.

    Merci d'avance.

    EDIT : la formule de la DCT ce trouve là : http://fr.wikipedia.org/wiki/Compression_JPEG

    Les structure s_dct et s_imagecontiennent les coordonnées (x,y) d'un point dans une matrice "virtuelle" ainsi que la valeur des composante de couleur du point.

    En fait j'envoie dans ma fonction un bloc de 8*8 "pixels" (bloc_in[]) et je voudrai qu'elle me retourne un entier que je place dans un tableau à l'indice k ca pour les trois couleur de la matrice avec derrier une boucle for pour remplire un tableau de la meme structure contenant les résultat de la DCT

  2. #2
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    avant qu'on verifie l'implementation de l'algo, ce serait bien que tu nous explique ce que tu attend de ta fonction, et ce qu'il se passe.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        bloc_out.bleu = bloc_out.rouge = bloc_out.vert = 0;
    c'est peut etre autorisé, mais je trouve ça moche quand meme.

  3. #3
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par Dark_Ebola
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        bloc_out.bleu = bloc_out.rouge = bloc_out.vert = 0;
    Je savais meme pas que c'aitais posible ...

  4. #4
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par miron
    Je savais meme pas que c'aitais posible ...
    Possible mais extremement deconseille, car tres nuisible a la lisibilite du code.

    (caches toi je crois que tu vas te faire allumer si tonton emdel passe par la...)

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Jack_serious
    Possible mais extremement deconseille, car tres nuisible a la lisibilite du code.
    Désolé ca fait un mois que je fais du C

  6. #6
    Membre averti Avatar de Jack_serious
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    350
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 350
    Points : 396
    Points
    396
    Par défaut
    Citation Envoyé par lemenyau
    Désolé ca fait un mois que je fais du C
    Pas de probleme. C'est juste un conseil, pas une attaque.

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Citation Envoyé par Jack_serious
    Pas de probleme. C'est juste un conseil, pas une attaque.
    Pour moi non plus mais c'est vrai que ma réponse pouvait paraitre un peu sêche.

  8. #8
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par Jack_serious
    Possible mais extremement deconseille, car tres nuisible a la lisibilite du code.

    (caches toi je crois que tu vas te faire allumer si tonton emdel passe par la...)
    MDR
    Il est 21h35 , je vais pas bosser t tla journée!!!

    Non mais il est super simpa EMDEL.
    Un peu sec par moment, si on lui donne pas ce qu'il fautJustifié souventMais bon aller bonne nuit a tous!!!

  9. #9
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Hmm, je comprends pas, j'ai du rater un fil aujourd'hui : pourquoi Emmanuel te poursuit-il aujourd'hui au travers de tous les messages à propos de tes révisions ?? Il y a eu des messages spécifiques que j'ai manqués ?

    J'aimerai comprendre?? ^__^

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Pour les deux posteur précédent c'est gentil de répondre mais ce serait encore mieu si ca avait un rapport avec le sujet.

  11. #11
    Membre expérimenté
    Avatar de granquet
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2005
    Messages
    1 201
    Détails du profil
    Informations personnelles :
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 201
    Points : 1 421
    Points
    1 421
    Par défaut
    petite question: ton tableau bloc_in, tu l'as remplis comment?

    et: bloc_in[x*y]
    sans vouloir m'avancer trop, ca me semble etre le probleme ... 8*8 ca fait bien 64 ...
    sans faire de math, il me semble que ca fait pas 64 valeurs uniques.
    comment tu differencie 3*8 et 8*3 ?

    moi j'aurai fait bloc_in[8*x + y]

    je me trompe peut etre. je dis ça "comme ça", parce que ca me parait "bizzare".

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    Le remplissage de bloc_in ce fait normalement sans problème avec des boucle for à partir d'un tableau de structure contenant les données concernant les pixels de l'image (coordonées, couleurs). Sinon pour le reste en y réflechissant, tu doit avoir raison. Faut que je test pourtant il me sempblait l'avoir déjà fait.

    EDIT:
    Citation Envoyé par Dark_Ebola
    et: bloc_in[x*y]
    sans vouloir m'avancer trop, ca me semble etre le probleme ... 8*8 ca fait bien 64 ...
    sans faire de math, il me semble que ca fait pas 64 valeurs uniques.
    comment tu differencie 3*8 et 8*3 ?

    moi j'aurai fait bloc_in[8*x + y]
    Sur ce point je pense que ta as raison, mais ça ne resout pas mon problème. Pour tester j'ai utiliser une image avec une seul couleur donc en theorie je devrais après la DCT obtenir seulement la première valeur non nul (enfin il me semble) alors que là j'obtient dans ma matrice une diagonale de valeur assez importantes et je n'arrive pas à voir d'ou cela vient.

  13. #13
    Débutant Avatar de miron
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    479
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 479
    Points : 291
    Points
    291
    Par défaut
    Citation Envoyé par Pouic
    Hmm, je comprends pas, j'ai du rater un fil aujourd'hui : pourquoi Emmanuel te poursuit-il aujourd'hui au travers de tous les messages à propos de tes révisions ?? Il y a eu des messages spécifiques que j'ai manqués ?

    J'aimerai comprendre?? ^__^
    http://www.developpez.net/forums/sho...49&postcount=8
    http://www.developpez.net/forums/new...eply&p=1005749
    Voila ca peut peut etre vous aider...

  14. #14
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Aahh, d'accord ^^
    Bon, ben retourne réviser alors
    Hop hop hop !

  15. #15
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2006
    Messages : 6
    Points : 2
    Points
    2
    Par défaut
    ça y 'es j'ai réussi

    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
    struct s_dct dct(struct s_image bloc_in[],int k)//DCT
    {
        int x,y;
        float arg1, arg2;
        struct s_dct bloc_out;
        bloc_out.bleu = bloc_out.rouge = bloc_out.vert = 0;
        for(x=0;x<8;x++)
        {
     
                        for(y=0;y<8;y++)
                        {
                                        arg1 = (2*x+1) * bloc_in[k].x*M_PI/16;
                                        arg2 = (2*y+1) * bloc_in[k].y*M_PI/16;
                                        bloc_out.bleu += bloc_in[x*8+y].bleu*cos(arg1)*cos(arg2);
                                        bloc_out.vert += bloc_in[x*8+y].vert*cos(arg1)*cos(arg2);
                                        bloc_out.rouge += bloc_in[x*8+y].rouge*cos(arg1)*cos(arg2);
                        }
        }
        bloc_out.bleu=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.bleu;;
        bloc_out.vert=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.vert;
        bloc_out.rouge=0.25*C(bloc_in[k].x,bloc_in[k].y)*bloc_out.rouge;
        return (bloc_out);
    }
    Problème résolu après quelques jours en mettant un peu d'ordre d'un le code.

    pour arg2 c'était (2*y+1) et pas (2*x +1)

    Merci quand même

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

Discussions similaires

  1. exemple de code source pour insérer une date
    Par Narouto dans le forum JSF
    Réponses: 13
    Dernier message: 11/06/2011, 15h49
  2. besoin du code source pour une version debug ?
    Par tendu1 dans le forum Autres éditeurs
    Réponses: 2
    Dernier message: 08/10/2009, 18h25
  3. Réponses: 8
    Dernier message: 12/06/2006, 22h40
  4. code HTML pour mettre une image en background dans un menu
    Par Link14 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 16/10/2005, 12h11
  5. [VB6] Code source pour modifier MsgBox
    Par khany dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 25/02/2003, 15h13

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