Bonjour Voilà j'ai réalisé ce prog de compression jpeg sous matlab mais il ne marche pas à savoir que l'image jpeg créee en sortie est vide (aucun apercu disponible) Voilà le code Si vous pouviez me filer un coup de pousse pour trouver ce qui cloche car là je suis perdu, ce serait vraiment sympa. Merci d'avance a+
%Programme principal de compression d'une image bmp en pseudo jpg %arguments d'entree: % - nom de l'image source qui doit etre au format bmp % - nom du fichier créé au format pseudo jpg % - qualite de la conversion de l'image bmp %argument de sortie: % - temps du traitement en seconde function[duree_traitement]=main_compression(nom_bmp_source, nom_jpg, qualite)
t_debut = cputime;
%lecture bmp BMP = lecture_bmp(nom_bmp_source);
%conversion de la matrice : application de la DCT sur la matrice JPG = conversion(BMP, qualite);
%ecriture de la matrice traitee par la DCT dans un fichier ecriture_jpg(JPG, nom_jpg,qualite);
%lecture du fichier au format unsigned integer de 8 bits RGBuint8 = imread(nom_fichier,'bmp'); %conversion des coefficients au format double RGBdouble = double(RGBuint8);
function [a]=maDCT2(m) %Fonction calculant une dct sur une matrice %argument d'entree: % - m matrice 8*8 sur laquelle sera appliquée la DCT %argument de sortie: a % - a matrice 8*8 correspondant à la DCT appliquée sur m
%recuperation de la taille de la matrice m [M,M]=size(m); %declaration d'une matrice nulle de meme dimension que m
a=zeros(M,M);
%Calcul des coefficients de a tranformes de la dct %u,v sont les indices de la nouvelle matrice a %i,j sont les indices de la matrice m for u=0:M-1 for v=0:M-1 for i=0:M-1 for j=0:M-1 %Test permettant de determiner la valeur des variables C1 et C2 if u==0 c1=1/sqrt(2); else c1=1; end; if v==0 c2=1/sqrt(2); else c2=1; end
%fonction qui permet d'ajouter ou de retrancher une certaine valeur à tous %les coefficients d'une matrice %parametres d'entree % -m la matrice sur laquelle va porter le calcul % -valeur la valeur a ajouter (ou retrancher si nombre negatif) %parametres de sortie % -res la matrice du resultat function[res]=ajoute(m,valeur)
%recuperation de la taille de la matrice taille = size(m); %construction d'une matrice que l'on va ajouter à m temp = ones(taille(1),taille(2)) * valeur;
%fonction qui fabrique la matrice de quantification %a partir de l'indice de qualite, on construit une matrice 8x8 que la %fonction retourne function[Q]=mat_quant(Fq)
Marsh Posté le 11-09-2004 à 17:50:05
Bonjour
Voilà j'ai réalisé ce prog de compression jpeg sous matlab mais il ne marche pas à savoir que l'image jpeg créee en sortie est vide (aucun apercu disponible)
Voilà le code
Si vous pouviez me filer un coup de pousse pour trouver ce qui cloche car là je suis perdu, ce serait vraiment sympa.
Merci d'avance
a+
%Programme principal de compression d'une image bmp en pseudo jpg
%arguments d'entree:
% - nom de l'image source qui doit etre au format bmp
% - nom du fichier créé au format pseudo jpg
% - qualite de la conversion de l'image bmp
%argument de sortie:
% - temps du traitement en seconde
function[duree_traitement]=main_compression(nom_bmp_source, nom_jpg,
qualite)
t_debut = cputime;
%lecture bmp
BMP = lecture_bmp(nom_bmp_source);
%conversion de la matrice : application de la DCT sur la matrice
JPG = conversion(BMP, qualite);
%ecriture de la matrice traitee par la DCT dans un fichier
ecriture_jpg(JPG, nom_jpg,qualite);
t_fin = cputime;
duree_traitement = t_fin - t_debut;
%************************************************************************
function[RGBdouble]=lecture_bmp(nom_fichier)
%lecture du fichier au format unsigned integer de 8 bits
RGBuint8 = imread(nom_fichier,'bmp');
%conversion des coefficients au format double
RGBdouble = double(RGBuint8);
%************************************************************************
function [a]=maDCT2(m)
%Fonction calculant une dct sur une matrice
%argument d'entree:
% - m matrice 8*8 sur laquelle sera appliquée la DCT
%argument de sortie: a
% - a matrice 8*8 correspondant à la DCT appliquée sur m
%recuperation de la taille de la matrice m
[M,M]=size(m);
%declaration d'une matrice nulle de meme dimension que m
a=zeros(M,M);
%Calcul des coefficients de a tranformes de la dct
%u,v sont les indices de la nouvelle matrice a
%i,j sont les indices de la matrice m
for u=0:M-1
for v=0:M-1
for i=0:M-1
for j=0:M-1
%Test permettant de determiner la valeur des variables C1 et
C2
if u==0
c1=1/sqrt(2);
else
c1=1;
end;
if v==0
c2=1/sqrt(2);
else
c2=1;
end
a(u+1,v+1)=a(u+1,v+1)+1/sqrt(2*M)*c1*c2*m(i+1,j+1)*cos(pi*u/M*(i+1/2))*cos(pi*v/M*(j+1/2));
end;
end;
end;
end;
%*********************************************************************************
%fonction qui permet d'ajouter ou de retrancher une certaine valeur à tous
%les coefficients d'une matrice
%parametres d'entree
% -m la matrice sur laquelle va porter le calcul
% -valeur la valeur a ajouter (ou retrancher si nombre negatif)
%parametres de sortie
% -res la matrice du resultat
function[res]=ajoute(m,valeur)
%recuperation de la taille de la matrice
taille = size(m);
%construction d'une matrice que l'on va ajouter à m
temp = ones(taille(1),taille(2)) * valeur;
res = m + temp;
%*********************************************************************************
%fonction qui fabrique la matrice de quantification
%a partir de l'indice de qualite, on construit une matrice 8x8 que la
%fonction retourne
function[Q]=mat_quant(Fq)
for i=1:8