(Tout le contenu est sous licence GPL ;
Vous avez aucun droit avant d'avoir lu cette page :
http://rzr.online.fr/license.htm
)
|
|
Le principe de compression est le suivant :
| Seuil | nbre de pixels coupées | Taux compression | Qualité visuelle |
|---|---|---|---|
| 5 | 21997 | 1.4014 | pas de différence visuelle |
| 10 | 39781 | 2.0746 | pas de différence visuelle |
| 15 | 51944 | 3.0898 | pas de différence visuelle |
| 20 | 59514 | 4.4429 | Différence à peine visible sur le crépit de la maison |
| 150 | . | 136.6548 | Scène juste interprétable par un humain |
% Programme Principal de compression spectrale d'images % Auteur : Philippe COVAL - http://RzR.online.FR % DESS Imagerie Numérique / U.P.S. % Date : 2000.01.28 % Filename tcd1.m (Mathlab) function [Bn]=tcd1(n) [U,I]=meshgrid(1:n,1:n); Bn=sqrt(2/n) * cos (pi * ( U -1) .* (2*I - 1) /(2*n) ); Bn(:,1) = Bn(:,1)/sqrt(2);
% Programme Principal de compression spectrale d'images
% Auteur : Philippe COVAL - http://RzR.online.FR
% DESS Imagerie Numérique / U.P.S.
% Date : 2000.01.28
% Filename : main.m (Mathlab)
% Lecture de l'image
[X,map]=imread('..\data\maison.bmp');
image(X);
colormap(map);
% Crop
[iw,ih]=size(X);
str=input('Largeur region ? : ');
if ( not (isempty(str) ))
iw = str ;
end;
str=input('Hauteur region ? : ');
if ( not (isempty(str) ))
ih = str ;
end;
xoffset=1;
yoffset=1;
Y=X(xoffset:xoffset+iw-1, ...
yoffset:yoffset+ih-1 );
% Affichage de l'image cropée
image(Y);
map(Y(iw-1,ih-1),:);
% convertion en type double
imd=double(Y);
% Transformee cos disc directe
F=tcd1(iw)'*imd*tcd1(ih);
figure
image(F);
colormap(hot);
% Saisie du seuil
seuil=5
str = input('Seuil ? [(5),10,15,20] : ? ');
if ( not (isempty(str) ))
seuil = str ;
end;
% Filtrage par Seuil de l'image des fréquences
ncut=0;
for i=1:iw
for j=1:ih
if seuil > abs(F(i,j))
F(i,j)=0;
ncut=ncut+1;
end
end
end
% Calcul du taux de compression C
sprintf( 'nbre_de_pixels_coupées : %d',ncut)
C=(iw*ih)/(iw*ih-ncut)
figure
image(F);
colormap(hot);
% Transformee Cos Disc Inverse
F=tcd1(iw)*F*tcd1(ih)';
%F=uint8(round(F));
figure
image(F);
colormap(map);
% Qualite de l'image : disparitee :
% difference des images x 10
D=255+(abs(F-imd)*-10);
figure;
image(D);
colormap(gray);