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:oops:
Code:
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