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