Professional Documents
Culture Documents
Facultad de Ingeniera
Ingeniera Electrnica y Telecomunicaciones
Laboratorio Procesamiento Digital de Seales.
Juan P. Narvez Bernal
Ral B. Suquinagua Otavalo
Objetivos.
Marco terico.
Escriba un sustento terico que explique los fundamentos de la propiedad de
compactacin de energa de la DCT y su uso en el algoritmo de compresin JPGE.
Para realizar el anlisis de la propiedad de compactacin tenemos que tener claro el concepto de
la DCT que es una transformada basada en la Transformada de Fourier discreta, pero utilizando
nicamente nmeros reales.
Para ello se analizara la expansin para la DCT-1 y la DCT-2 que dependen de si los puntos
extremos se solapan con versiones desplazadas de s mismos y, si es as, qu puntos extremos se
solapan. Para la DCT-1, x[n] se modifica primero en sus extremos y despus se extiende para que
su periodo sea 2N 2.
Donde tenemos la DCT-2 expresado de la siguiente manera:
1
2 []
= 2 [] cos (
=0
(2 + 1)
),
2
0 1
1
(2 + 1)
[] = [] 2 [] cos (
),
0 1
=0
|[]|
=0
1
= [] | 2 []|2
=0
Se dice que la DCT est concentrada en los ndices bajos de la transformada si los restantes
coeficientes de la misma se pueden poner a cero sin afectar significativamente a la energa de la
seal. [1]
Submuestreo: Mediante esta etapa podemos reducir la resolucin de algunos de los canales que
hemos separado la imagen. El espacio de color YCbCr es 4:4:4 Si no se realiza el submuestreo la
imagen quedara as.
El 4:4:4 representa:
X: Frecuencia de muestreo horizontal del canal de brillo.
Codificacin Entrpica (Huffman). Esta etapa sirve cuando se tiene una gran cantidad de datos
en la imagen que no se usen se puede variar sus bits, La codificacin Huffman usa un mtodo
especfico para elegir la representacin de cada smbolo, que da lugar a un cdigo prefijo (es decir,
la cadena de bits que representa a un smbolo en particular nunca es prefijo de la cadena de bits
de un smbolo distinto) que representa los caracteres ms comunes usando las cadenas de bits
ms cortas, y viceversa.
Desarrollo.
Tarea1. Comprensin de imagen JPEG.
El objetivo de esta tarea es implementar el bloque principal del algoritmo de compresin
contemplado en el estndar JPEG, ya que deber obviar la parte de codificacin de longitud
variable detenida en dicho estndar.
La imagen reconstruida a partir de los coeficientes de la DCT representa la imagen comprimida,
que deber mostrarse en la pantalla. Las variaciones en la calidad de la imagen observada
reflejaran la eliminacin de los diferentes componentes obtenidos durante la etapa de la
transformada del coseno. Implemente un control deslizante que permita observar diferentes
niveles de compresin reflejados en la calidad de la imagen reconstruida. Para ello deber operar
sobre el quantum definido en el estndar.
Implemente su programa utilizando el guide de Matlab.
Los niveles de compresin debern implementarse con controles deslizantes.
Muestre en un campo de texto el nmero de coeficientes promedio que se utilizan en
cada sub-imagen de 8x8 para la reconstruccin de la imagen original (es decir: el promedio
del nmero de coeficientes que no son cero y que se han utilizado en cada sub-imagen)
Su interface deber mostrar la imagen original y su versin comprimida.
Escala de Quantum x 1
Escala de Quantum x 4
Escala de Quantum x 8
Escala de Quantum x 12
Escala de Quantum x 16
Escala de Quantum x 1
Escala de Quantum x 8
Escala de Quantum x 4
Escala de Quantum x 12
Escala de Quantum x 16
Documentacin.
function cargar_Callback(hObject, eventdata, handles)
[FileName Path]=uigetfile({'* .jpg; *. bmp; *. png'});
global imag1
txt=strcat(Path,FileName);
axes(handles.axes1);
imag=imread(txt);
imshow(imag);
axis off;
axes(handles.axes2);
imag1=imread(txt);
imshow(imag1);
axis off;
%-----------------------------------------------------------------------function slider1_Callback(hObject, eventdata, handles)
global imag1
% Obtener valores de slider
val=get(hObject,'Value');
set(handles.slider1,'String',fix(val));
% Leer imagen
imag1;
Im=double(imag1);
% Obtiene el tamano de la imagen
[n m] = size(Im);
% Se define la matriz para el quantum basado en JPEG
Q = [16 11 10 16 24 40 51 61;12 12 14 19 26 58 60 55; 14 13 16 24 40 57
69 56; 14 17 22 29 51 87 80 62; 18 22 37 56 68 109 103 77;24 35 55 64 81
104 113 92;49 64 78 87 103 121 120 101;72 92 95 98 112 100 103 99 ];
%Se define la escala del Quantum
Q = Q*val ;
M_cero=0;
%Obtener bloques de 8x8
for i=1:8:n
for j=1:8:m
%matrices de 8x8 para la DCT
b8x8=Im(i:i+7,j:j+7);
% Se elmina el offset
E=(b8x8)-128;
%Se aplica la DCT a la imagen original
DCT = round(dct2(E, [8 8]));
% Se divide para el quantum, etapa cuantizacion
coeff = round(DCT./Q);
% Se multiplica por el cuantum para etapa cuantizacion
Res = coeff.*Q;
% Se obtienen todos los valores de cero para calcular el error
N=0;
for k=1:1:8
for p=1:1:8
if Res(k,p) ~= 0
N=N+1;
end
end
end
M_cero=M_cero+N;
h=M_cero/(64*64);
%Transformada inversa del coseno
I_DCT = round(idct2(Res,[8 8]));
E1=I_DCT+128;
%Unir imagenes
DFF(i:i+7,j:j+7)=(E1)/256;
end
end
% Se muestra en un txt el numero de coeficientes de la DCT
set(handles.valor,'String',h);
% se calcula el error
Err=Im/256-DFF;
% Se muestra la imagen comprimida
axes(handles.axes2);
imshow(DFF);
% Se muestra el error
axes(handles.axes3);
imshow(Err);
1
0.8
0.6
0.4
0.2
0
-0.2
-0.4
-0.6
-0.8
-1
0.5
1.5
2
Muestras
2.5
3.5
4
5
x 10
long=32*factor;
residuo=((length(x)/ventana)-factor).*ventana;%es el restante de muestras
z=zeros(1,long);
%creamos el vector de ceros
aux=1;
for wind=1:factor-1
w = x(aux:ventana);
%sacamos las ventanas
X = dct(w);
%la transformada del coseno
[XX,ind] = sort(abs(X),'descend');
if vol==32
z(aux:ventana) = idct(X);
%rellenamos en el vector de ceros
end
if vol<32
X(ind(vol+1:end)) = 0;
z(aux:ventana) = idct(X);
%rellenamos en el vector de ceros
end
aux=ventana+1;
%aumenta la siguiente ventana
ventana=ventana+32;
end
end
%grficas
axes(handles.axes2)
stem( x(1:long), 'green')
xlabel('Muestras');
axes(handles.axes4)
stem( z(1:long), 'blue')
xlabel('Muestras');
c) Compute la DCT para cada bloque. Estos coeficientes, debern mostrar claramente la
Propiedad de compactacin de energa de la DCT.
DCT
seal original
0.03
0.06
0.02
0.04
0.01
0.02
-0.01
-0.02
-0.02
-0.04
-0.03
10
15
20
25
30
-0.06
0
35
w = x(aux:ventana);
X = dct(w);
10
15
20
25
30
35
-4
seal original
x 10
DCT
x 10
2
2
0
-1
-1
-2
-2
-3
-3
-4
-5
10
15
20
25
30
-4
35 0
10
15
20
25
30
35
16 coeficientes
8 coeficientes
4 coeficientes
e) Calcule la seal de error (seal original menos seal reconstruida) y grafquela en una
ventana separada para cada caso.
%Graficamos el error
Preguntas
En el formato de color RGB, las imgenes a color se almacenan en 3 canales independientes (rojo,
verde y azul) que toman valores de 0 a 255 dependiendo de la intensidad.
El formato de color YIQ representa una divisin entre la luminosidad (Y) y el color (I, Q). La
conversin entre RGB e YIQ es:
0.299 0.587
0.114
( ) = (0.596 0.275 0.321) ( )
Esto se lo implementara para cada canal, es decir, tendramos que dividir en bloques de 32
muestras, realizar la transformada del coseno, desechar las muestras y hacer la transformada
inversa para los dos canales. Para estos se divide los canales mediante la expresin y= x(:,1)
en el caso del canal uno y y= x(:,2) para el caso del canal 2.
29, 9,-7,5,-12,-4,-6,-5,6,-3,2,-2,1,1,-1,0,1,0,0,1,0,0,0,-1,1,0,1,0,0,0,1,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,-1,F
La letra F indica que desde ese elemento hasta el final de la lista son todos ceros hasta completar
los 64 elementos de la lista original (es decir de la lista de arriba).
El siguiente paso sera almacenar cada lista de cada subimagen 8 x 8 de la imagen usando el
algoritmo de Huffman para que elimine la redundancia de cdigo. En este paso radica la propiedad
de almacenar usando distintos grados de compresin. Si almacenamos cada lista con los 64
elementos, el grado de compresin sera pequeo. Cmo los datos significativos estn al principio
de la lista, podramos considerar slo los primeros elementos de la lista (por ejemplo, los 16
primeros), y en este caso, el grado de compresin sera mayor.
En donde * es el conjugado de wavelet madre que ser escalada y corrida punto a punto
para determinar los niveles de comparacin con la seal s(t), el valor de = da la escala de
0
Bibliografa
[1] Tratamiento de Seales en Tiempo Discreto, Alan Oppenheim, Ronald Schafer, Prentice
Hall, 3rd Edition 2007.
[2] << Caractersticas tiles para la compresin de imgenes>> [En lnea]. Disponible en:
http://www2.fisica.unlp.edu.ar/materias/procesamiento_de_imagenes/Clase2_Imagenes_2011.p
df
[3] << Comprensin JPEG>> [En lnea]. Disponible en:
https://vimeo.com/41038308
[4] Wallace, G. K. (1991). The JPEG Still Picture Compression Standard.
[5] << dsp.DCT System object>> [En lnea]. Disponible en:
http://es.mathworks.com/help/dsp/ref/dsp.dct-class.html
[6] <<Anlisis de principios y aplicaciones de la transformada wavelet>> [En lnea]. Disponible en:
https://www.academia.edu/6395498/An%C3%A1lisis_de_principios_y_aplicaciones_de_la_transf
ormada_wavelet
[7] <<TRANSFORMADA WAVELET>> [En lnea]. Disponible en:
http://catarina.udlap.mx/u_dl_a/tales/documentos/meie/osorio_s_a/capitulo2.pdf
[8] M. Vetterli, y J. Kovacevic. Wavelets and Subb and Coding. Pretince Hall Signal
Processing Series, 1995.
[9]<< Introduccin a la Transformada Wavelet>> [En lnea]. Disponible en:
http://www.exa.unicen.edu.ar/escuelapav/cursos/wavelets/apunte.pdf