You are on page 1of 27

ESCUELA POLITCNICA NACIONAL

Introduccin a la Multimedia

Informe
Integrantes: Mena Byron Naranjo Jos Luis Oyana Christian

Tema: Codificador Objetivos:


y Decodificar JPEG

Implementar un codificador y decodificar JPEG que realice todo el algoritmo de compresin para imgenes JPEG. Determinar las ventajas y desventajas que nos muestra este tipo de algoritmos. Visualizar la calidad de compresin que nos brinda dicho algoritmo y advertir los pros i los contras que se generan al usar dicho proceso de compresin.

Marco terico: Joint Photographic Experts Group JPEG

Foto de una flor comprimida gradualmente con el formato JPEG. Extensin archivo Tipo de MIME de .jpeg, image/jpeg .jpg, .jpe .jfif, .jfi, .jif (contenedores)

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Type code
Uniform Identifier Nmero mgico Tipo de formato Type

JPEG public.jpeg ff d8 Grficos con compresin con prdida

JPEG (del ingls Joint Photographic Experts Group, Grupo Conjunto de Expertos en Fotografa), es el nombre de un comit de expertos que cre un estndar de compresin y codificacin de archivos de imgenes fijas. Este comit fue integrado desde sus inicios por la fusin de varias agrupaciones en un intento de compartir y desarrollar su experiencia en la digitalizacin de imgenes. La ISO, tres aos antes (abril de 1983), haba iniciado sus investigaciones en el rea. Adems de ser un mtodo de compresin, es a menudo considerado como un formato de archivo. JPEG/Exif es el formato de imagen ms comn utilizado por las cmaras fotogrficas digitales y otros dispositivos de captura de imagen, junto con JPG/JFIF, que tambin es otro formato para el almacenamiento y la transmisin de imgenes fotogrficas en la World Wide Web. Estas variaciones de formatos a menudo no se distinguen, y se llaman JPEG. Los archivos de este tipo se suelen nombrar con la extensin .jpg. Compresin del JPEG

Comparativa de calidad entre la imagen original, comprimida en JPG (con prdida) y comprimida en WebP (con prdida). El formato JPEG utiliza habitualmente un algoritmo de compresin con prdida para reducir el tamao de los archivos de imgenes. Esto significa que al descomprimir o visualizar la imagen no se obtiene exactamente la misma imagen de

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

la que se parta antes de la compresin. Existen tambin tres variantes del estndar JPEG que comprimen la imagen sin prdida de datos: JPEG2000, JPEG-LS y Lossless JPEG. El algoritmo de compresin JPEG se basa en dos defectos visuales del ojo humano, uno es el hecho de que es mucho ms sensible al cambio en la luminancia que en la crominancia, es decir, capta ms claramente los cambios de brillo que de color. El otro es que nota con ms facilidad pequeos cambios de brillo en zonas homogneas que en zonas donde la variacin es grande, por ejemplo en los bordes de los cuerpos de los objetos. Una de las caractersticas del JPEG es la flexibilidad a la hora de ajustar el grado de compresin. Un grado de compresin muy alto generar un archivo de pequeo tamao, a costa de una prdida significativa de calidad. Con una tasa de compresin baja se obtiene una calidad de imagen muy parecida a la del original, pero con un tamao de archivo mayor. La prdida de calidad cuando se realizan sucesivas compresiones es acumulativa. Esto significa que si se comprime una imagen y se descomprime, se perder calidad de imagen, pero si se vuelve a comprimir una imagen ya comprimida se obtendr una prdida todava mayor. Cada sucesiva compresin causar prdidas adicionales de calidad. La compresin con prdida no es conveniente en imgenes o grficos que tengan textos, lneas o bordes muy definidos, pero s para archivos que contengan grandes reas de colores slidos. Codificacin Muchas de las opciones del estndar JPEG se usan poco. Esto es una descripcin breve de uno de los muchos mtodos usados comnmente para comprimir imgenes cuando se aplican a una imagen de entrada con 24 bits por pixel (ocho por cada rojo, verde, y azul, o tambin dicho "8 bits por canal"). Esta opcin particular es un mtodo de compresin con prdida.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Transformacin del espacio de color

Esquema del modelo RGB.

Esquema del modelo YUV. Comienza convirtiendo la imagen desde su modelo de color RGB a otro llamado YUV YCbCr. Este espacio de color es similar al que usan los sistemas de color para televisin PAL y NTSC, pero es mucho ms parecido al sistema de televisin MAC. Este espacio de color (YUV) tiene tres componentes:

La componente Y, o luminancia (informacin de brillo), es decir, la imagen en escala de grises. Las componentes U o Cb y V o Cr, respectivamente diferencia del azul (relativiza la imagen entre azul y rojo) y diferencia del rojo (relativiza la imagen entre verde y rojo); ambas seales son conocidas como crominancia (informacin de color).

El resultado es una imagen en la que la luminancia est separada de la crominancia. Las ecuaciones que realizan este cambio de base de RGB a YUV son las siguientes:

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Y = 0.257 * R + 0.504 * G + 0.098 * B + 16 Cb = U = -0.148 * R - 0.291 * G + 0.439 * B + 128 Cr = V = 0.439 * R - 0.368 * G - 0.071 * B + 128 Las ecuaciones para el cambio inverso se pueden obtener despejando de las anteriores y se obtienen las siguientes: B = 1.164 * (Y - 16) + 2.018 * (U - 128) G = 1.164 * (Y - 16) - 0.813 * (V - 128) - 0.391 * (U - 128) R = 1.164 * (Y - 16) + 1.596 * (V - 128) NOTA: Estas ecuaciones estn en continua investigacin, por lo que se pueden encontrar en libros y en la red otras ecuaciones distintas pero con coeficientes muy parecidos. Si se analiza el primer tro de ecuaciones veremos que las tres componentes toman como valor mnimo el 16. El canal de luminancia (canal Y) tiene como valor mximo el 235, mientras que los canales de crominancia el 240, todos estos valores caben en un byte haciendo redondeo al entero ms prximo. Durante esta fase no hay prdida significativa de informacin, aunque el redondeo introduce un pequeo margen de error imperceptible para el ojo humano. Submuestreo

Ligera explicacin visual sobre el submuestreo, la imagen de arriba a la izquierda es la original, las otras sufren unos submuestreos de color salvajes que dan idea de los efectos de esta tcnica. Ampliar para mejor visualizacin.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

El algoritmo JPEG, transforma la imagen en cuadrados de 88 y luego almacena cada uno de estos como una combinacin lineal o suma de los 64 recuadros que forman esta imagen, esto permite eliminar detalles de forma selectiva, por ejemplo, si una casilla tiene un valor muy prximo a 0, puede ser eliminada sin que afecte mucho a la calidad. Una opcin que se puede aplicar al guardar la imagen, es reducir la informacin del color respecto a la de brillo (debido al defecto en el ojo humano comentado anteriormente). Hay varios mtodos: si este paso no se aplica, la imagen sigue en su espacio de color YUV, (este submuestreo se entiende como 4:4:4), con lo que la imagen no sufre prdidas. Puede reducirse la informacin cromtica a la mitad, 4:2:2 (reducir en un factor de 2 en direccin horizontal), con lo que el color tiene la mitad de resolucin (en horizontal), y el brillo sigue intacto. Otro mtodo, muy usado, es reducir el color a la cuarta parte, 4:2:0, en el que el color se reduce en un factor de 2 en ambas direcciones, horizontal y vertical. Si la imagen de partida estaba en escala de grises (blanco y negro), puede eliminarse por completo la informacin de color, quedando como 4:0:0. Algunos programas que permiten el guardado de imgenes en JPEG (como el que usa GIMP) se refieren a estos mtodos con 11,11,11 para YUV 4:4:4 (no perder color), 21,12,11 para YUV 4:2:2 y 22,11,11 para el ltimo mtodo, YUV 4:2:0. Las tcnicas algortmicas usadas para este paso (para su reconstruccin exactamente) suelen ser interpolacin bilineal, vecino ms prximo, convolucin cbica, Bezier, b-spline y Catmun-Roll.rh

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Transformacin discreta de coseno o DCT Cada componente de la imagen se divide en pequeos bloques de 88 pxeles, que se procesan de forma casi independiente, lo que disminuye notablemente el tiempo de clculo. De esto resulta la tpica formacin cuadriculada, que se vuelve visible en las imgenes guardadas con alta compresin. Si la imagen sufri un submuestreo del color, los colores quedaran en la imagen final en bloques de 816 y 1616 pxeles, segn fuese 4:2:2 o 4:2:0. Despus, cada pequeo bloque se convierte al dominio de la frecuencia a travs de la transformacin discreta de coseno, abreviadamente llamada DCT. Un ejemplo de uno de esos pequeos bloques de 88 inicial es este:

El siguiente proceso es restarles 128 para que queden nmeros entorno al 0, entre -128 y 127.

Se procede a la transformacin por DCT de la matriz, y el redondeo de cada elemento al nmero entero ms cercano.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Ntese que el elemento ms grande de toda la matriz aparece en la esquina superior izquierda, este es el coeficiente DC. Cuantificacin digital

"Antes de", en un bloquecillo 88 (ampliacin 16).

"Despus de", en un bloquecillo 88, se notan errores respecto a la primera imagen, como en la esquina inferior izquierda, que est ms clara. El ojo humano es muy bueno detectando pequeos cambios de brillo en reas relativamente grandes, pero no cuando el brillo cambia rpidamente en pequeas reas (variacin de alta frecuencia). Aprovechando este defecto, se puede eliminar las altas frecuencias, sin prdida excesiva de calidad visual. Esto se realiza dividiendo cada componente en el dominio de la frecuencia por una constante para ese componente, y redondendolo a su nmero entero ms cercano. Este es el proceso en el que se pierde la mayor parte de la informacin (y calidad) cuando una imagen es procesada por este algoritmo. El resultado de esto es que los

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

componentes de las altas frecuencias, tienden a igualarse a cero, mientras que muchos de los dems, se convierten en nmeros positivos y negativos pequeos. Una matriz de cuantificacin tpica es la matriz de Losheller que se usa opcionalmente en el estndar JPEG:

Dividiendo cada coeficiente de la matriz de la imagen transformada entre cada coeficiente de la matriz de cuantificacin, se obtiene esta matriz, ya cuantificada:

Por ejemplo, cuantificando el primer elemento, el coeficiente DC, sera as:

Codificacin entrpica La codificacin entrpica es una forma especial de la compresin sin prdida de datos. Para ello se toman los elementos de la matriz siguiendo una forma de zigzag, poniendo grupos con frecuencias similares juntos, e insertando ceros de codificacin, y usando la codificacin Huffman para lo que queda. Tambin se puede usar la codificacin aritmtica, superior a la de Huffman, pero que rara vez se usa, ya que est cubierta por patentes, esta compresin produce archivos un 5%

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

menores, pero a costa de un mayor tiempo de codificacin y decodificacin, esta pequea ganancia, puede emplearse tambin en aplicar un menor grado de compresin a la imagen, y obtener ms calidad para un tamao parecido. En la matriz anterior, la secuencia en zig-zag, es esta: 26, 3, 0, 3, 2, 6, 2, 4, 1 4, 1, 1, 5, 1, 2, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 JPEG tiene un cdigo Huffman para cortar la cadena anterior en el punto en el que el resto de coeficientes sean ceros, y as, ahorrar espacio: 26, 3, 0, 3, 2, 6, 2, 4, 1 4, 1, 1, 5, 1, 2, 1, 1, 1, 2, 0, 0, 0, 0, 0, 1, 1, EOB Ruido producido por la compresin

Tras la compresin, suelen quedar a veces bloques como estos, en este caso en un trozo de una imagen ampliado. El resultado tras la compresin, puede variar, en funcin de la agresividad de los divisores de la matriz de cuantizacin, a mayor valor de esos divisores, ms coeficientes se convierten en ceros, y ms se comprime la imagen. Pero mayores compresiones producen mayor ruido en la imagen, empeorando su calidad. Una imagen con una fuerte compresin (1%-15%) puede tener un tamao de archivo mucho menor, pero tendr tantas imperfecciones que no ser interesante, una compresin muy baja (98%-100%) producir una imagen de muy alta calidad, pero, tendr un tamao tan grande que quizs interese ms un formato sin prdida como PNG. La mayora de personas que naveguen por Internet estarn familiarizadas con estas imperfecciones, son el resultado de lograr una buena compresin; para evitarlos, se tendr que reducir el nivel de compresin o aplicar compresin sin prdida, produciendo mayores ficheros despus.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Decodificacin El proceso de decodificacin es similar al seguido hasta ahora, slo que de forma inversa. En este caso, al haber perdido informacin, los valores finales no coincidirn con los iniciales. Se coge la informacin de la matriz, se decodifica, y se pone cada valor en su casilla correspondiente. Despus se multiplica cada uno de estos valores por el valor correspondiente de la matriz de cuantizacin usada, como muchos valores son ceros, slo se recuperan ( y de forma aproximada) los valores de la esquina superior izquierda. Despus se deshace la transformacin DCT:

Errores producidos por una compresin excesiva: Antes de y despus de.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Y finalmente se suma 128 a cada entrada:

Para comparar las diferencias entre el bloque original y el comprimido, se halla la diferencia entre ambas matrices, la media de sus valores absolutos, da una ligera idea de la calidad perdida:

Se puede observar que las mayores diferencias estn cerca de la mancha, y por la parte inferior, entre la esquina izquierda y el centro, notndose ms esta ltima, ya que corre una mancha clara que antes estaba ms hacia la esquina. La media de los valores absolutos de las restas es 4.8125, aunque en algunas zonas es mayor.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Implementacin Practica en Matlab::

Algoritmo del Codificador: % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @CodificadorJPEG_OpeningFcn, ... 'gui_OutputFcn', @CodificadorJPEG_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:}); else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

% --- Executes just before CodificadorJPEG is made visible. function CodificadorJPEG_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn.

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

% hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to CodificadorJPEG (see VARARGIN) % Choose default command line output for CodificadorJPEG handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes CodificadorJPEG wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = CodificadorJPEG_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in btnAbrir. function btnAbrir_Callback(hObject, eventdata, handles) %Pedimos que ingrese el nombre de la imagen a procesar con su extensin. [nombreImagen,ruta] = uigetfile('*.jpg','Seleccione la Imagen'); if nombreImagen==0 return end %Leemos la imagen y almacenamos su contenido en una matriz. imagen_RGB = imread(fullfile(ruta,nombreImagen)); %axes(handles.imagenOriginal); imshow(imagen_RGB); axis off; handles.imagen = imagen_RGB; guidata(hObject,handles);

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

% --- Executes on button press in btnCodificar. function btnCodificar_Callback(hObject, eventdata, handles) %Leemos la imagen original que se encuentra en la variable imagen imagenRGB = handles.imagen; %Obtenemos el tamao de la imagen. [largo ancho planos]=size(imagenRGB); %Convertimos de RGB a YCbCr. imagenYCbCr=rgb2ycbcr(imagenRGB); %Separamos la la luminancia y las crominancias de la imagen convertida YCbCr. %Luminancia Y = imagenYCbCr(:,:,1); %Primera Crominancia Cb = imagenYCbCr(:,:,2); %Segunda Crominancia Cr = imagenYCbCr(:,:,3);

%========================================================================== %Realizamos el submuestreo de las crominancias %Para Cb Cb_sub = imresize(Cb,0.5,'nearest'); %Para Cr Cr_sub = imresize(Cr,0.5,'nearest');

%========================================================================== %Restamos 128 Y_128=Y; Cb_sub_128=Cb_sub; Cr_sub_128=Cr_sub; %Clculo de las DCT de las tres matrices Y_128_dct = blkproc(Y_128,[8 8],@dct2); Cb_sub_128_dct = blkproc(Cb_sub_128,[8 8],@dct2); Cr_sub_128_dct = blkproc(Cr_sub_128,[8 8],@dct2); %Matrices del estandar JPEG para cuantificar las luminancias y las %Luminancias Q_luminancias=[16 11 10 16 124 140 151 161

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

12 12 14 19 126 158 160 155 14 13 16 24 140 157 169 156 14 17 22 29 151 187 180 162 18 22 37 56 168 109 103 177 24 35 55 64 181 104 113 192 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 199]; %Crominancias Q_crominancias=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99]; %Funcion para cuantificar las luminancias y las crominancias funcLuminancias = @(x) x./Q_luminancias; funcCrominancias = @(x) x./Q_crominancias; %%Clculo de las DCT cuantificadas de las tres matrices Y_128_dct_q = blkproc(Y_128_dct, [8 8],funcLuminancias); Cb_sub_128_dct_q = blkproc(Cb_sub_128_dct, [8 8],funcCrominancias); Cr_sub_128_dct_q = blkproc(Cr_sub_128_dct, [8 8],funcCrominancias); %Aproximamos los valores de cada una de las matrices Y_128_dct_q_r = round(Y_128_dct_q); Cb_sub_128_dct_q_r = round(Cb_sub_128_dct_q); Cr_sub_128_dct_q_r = round(Cr_sub_128_dct_q); %Llamamos a la funcion zigzag funcionZigzag=@zigzag; Y_zz = blkproc(Y_128_dct_q_r, [8 8], funcionZigzag); CB_zz = blkproc(Cb_sub_128_dct_q_r, [8 8], funcionZigzag); CR_zz = blkproc(Cr_sub_128_dct_q_r , [8 8], funcionZigzag);

%Guardar el imagen codificada en un archivo binario [name,path]=uiputfile('*.pro','Guardar Imagen Codificada'); if name==0

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

return end pathCompleto = [path , name]; escribirArchivo(pathCompleto,largo,ancho,Y_zz,CB_zz,CR_zz) %Funcion para leer en zigzag de los bloques de 8x8 de cada matriz function [A]=zigzag(X) f=1; c=1; contador = 1; operacion = 1; valorColumna = size(X,2); parte1 = 0; for k=1:(valorColumna*valorColumna) if parte1 == 1 A(1,contador) = X(f,c); contador = contador + 1; if operacion == 3 f = f+1; if f > valorColumna operacion = 4; f = valorColumna; c = c+1; else c = c-1; end elseif operacion ==4 c = c+1; if c > valorColumna operacion = 3; c = valorColumna; f = f+1; else f = f-1;

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

end end else A(1,contador) = X(f,c); contador = contador + 1; if c==valorColumna operacion = 3; parte1 = 1; divColum = valorColumna/2; multColum = round(divColum)*2; if multColum == valorColumna f =f+1; c=c-1; else f= f+1; end end if operacion ==1 f = f-1; if f == 0 operacion = 2; f=1; end c = c+1; elseif operacion ==2 f = f+1; c = c-1; if c ==0 operacion = 1; c=1; end end end end return %Funcion para obtener el archivo obtenido de la lectura del zigzag

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

function escribirArchivo(pathCompleto,filas,columnas,datosSerializadosY,datosSerializados Cb,datosSerializadosCr) fid = fopen(pathCompleto,'w+'); PIXELESY = filas; PIXELESX = columnas; cabecera = [PIXELESY;PIXELESX]; fwrite(fid,cabecera,'uint16'); for i=1:numel(datosSerializadosY) fwrite(fid,datosSerializadosY(i),'int8'); end for i=1:numel(datosSerializadosCb) fwrite(fid,datosSerializadosCb(i),'int8'); end for i=1:numel(datosSerializadosCr) fwrite(fid,datosSerializadosCr(i),'int8'); end fclose(fid) Algoritmo del Decodificador: % Begin initialization code - DO NOT EDIT gui_Singleton = 1; gui_State = struct('gui_Name', mfilename, ... 'gui_Singleton', gui_Singleton, ... 'gui_OpeningFcn', @DecodifcadorJPEG_OpeningFcn, ... 'gui_OutputFcn', @DecodifcadorJPEG_OutputFcn, ... 'gui_LayoutFcn', [] , ... 'gui_Callback', []); if nargin && ischar(varargin{1}) gui_State.gui_Callback = str2func(varargin{1}); end if nargout [varargout{1:nargout}] = gui_mainfcn(gui_State, varargin{:});

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

else gui_mainfcn(gui_State, varargin{:}); end % End initialization code - DO NOT EDIT

% --- Executes just before DecodifcadorJPEG is made visible. function DecodifcadorJPEG_OpeningFcn(hObject, eventdata, handles, varargin) % This function has no output args, see OutputFcn. % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % varargin command line arguments to DecodifcadorJPEG (see VARARGIN) % Choose default command line output for DecodifcadorJPEG handles.output = hObject; % Update handles structure guidata(hObject, handles); % UIWAIT makes DecodifcadorJPEG wait for user response (see UIRESUME) % uiwait(handles.figure1);

% --- Outputs from this function are returned to the command line. function varargout = DecodifcadorJPEG_OutputFcn(hObject, eventdata, handles) % varargout cell array for returning output args (see VARARGOUT); % hObject handle to figure % eventdata reserved - to be defined in a future version of MATLAB % handles structure with handles and user data (see GUIDATA) % Get default command line output from handles structure varargout{1} = handles.output;

% --- Executes on button press in btnDecodificar. function btnDecodificar_Callback(hObject, eventdata, handles) [nombreArchivo,ubicacion] = uigetfile('*.pro','Seleccione el Archivo'); if nombreArchivo==0 return end ruta=[ubicacion,nombreArchivo];

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

[largo_imagen,ancho_imagen,Y_zz_cod,CB_zz_cod,CR_zz_cod] leerArchivo(ruta); %Transforma la matriz fila en una matriz cuadrada func_inv_zigzag = @invzigzag; Y_128_dct_q = blkproc(Y_zz_cod, [1 64], func_inv_zigzag); Cb_sub_128_dct_q = blkproc(CB_zz_cod, [1 64],func_inv_zigzag); Cr_sub_128_dct_q = blkproc(CR_zz_cod, [1 64], func_inv_zigzag); %Matrices del estandar JPEG para cuantificar las luminancias y las %Luminancias Q_luminancias=[16 11 10 16 124 140 151 161 12 12 14 19 126 158 160 155 14 13 16 24 140 157 169 156 14 17 22 29 151 187 180 162 18 22 37 56 168 109 103 177 24 35 55 64 181 104 113 192 49 64 78 87 103 121 120 101 72 92 95 98 112 100 103 199]; %Crominancias Q_crominancias=[17 18 24 47 99 99 99 99 18 21 26 66 99 99 99 99 24 26 56 99 99 99 99 99 47 66 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99 99]; %Funciones para decuantizar las matrices funcDeLuminancia = @(x) x.*Q_luminancias; funcDeCrominancia = @(x) x.*Q_crominancias; %Decuantizacin de la luminacia y crominancias Y_128_dct= blkproc(Y_128_dct_q, [8 8],funcDeLuminancia); Cb_sub_128_dct = blkproc(Cb_sub_128_dct_q, [8 8],funcDeCrominancia); Cr_sub_128_dct = blkproc(Cr_sub_128_dct_q, [8 8],funcDeCrominancia); %Aplicamos la DCT inversa Y_128 = blkproc(Y_128_dct , [8 8], @idct2); Cb_sub_128 = blkproc(Cb_sub_128_dct, [8 8], @idct2);

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

Cr_sub_128 = blkproc(Cr_sub_128_dct, [8 8], @idct2); %Sumamos 128 Y_idct=Y_128; Cb_sub=Cb_sub_128; Cr_sub=Cr_sub_128; %Escogemos los valores que corresponde a la imagen Y = Y_idct(1:largo_imagen,1:ancho_imagen); Cb_sub = Cb_sub(1:(round(largo_imagen/2)),1:(round(ancho_imagen/2))); Cr_sub = Cr_sub(1:(round(largo_imagen/2)),1:(round(ancho_imagen/2))); %Sobremuestreo de las matrices de crominancias Cb_sobre = imresize(Cb_sub,2,'box'); Cr_sobre = imresize(Cr_sub,2,'box'); %Nueva Imagen en YCbCr Cb = imresize(Cb_sobre, size(Y)); Cr = imresize(Cr_sobre, size(Y)); %Concatenamos las planos YCbCr para formar nuestra imagen nuevaImg = cat(3,Y,Cb,Cr); %Convertimos nuestra imagen al tipo unit8 nuevaImg_uint8 = uint8(nuevaImg); %Cambiamos de YCbCr a RGB RGB = ycbcr2rgb(nuevaImg_uint8); %Muestra la figura en RGB %axes(handles.imagenDecodificada); imshow(RGB); function [A]=invzigzag(X) %Guarda en forma de zig-zag los valores de las matrices f=1; c=1; cont = 1; operacion = 1; maxColum = size(X,2); part1 = 0; for k=1:(maxColum) if part1 == 1

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

A(f,c) = X(1,cont); cont = cont + 1; if operacion == 3 f = f+1; if f > sqrt(maxColum) operacion = 4; f = sqrt(maxColum); c = c+1; else c = c-1; end elseif operacion ==4 c = c+1; if c > sqrt(maxColum) operacion = 3; c = sqrt(maxColum); f = f+1; else f = f-1; end end else A(f,c) = X(1,cont); cont = cont + 1; if c==sqrt(maxColum) operacion = 3; part1 = 1; divColum = sqrt(maxColum)/2; multColum = round(divColum)*2; if multColum == sqrt(maxColum) f =f+1; c=c-1; else f= f+1; end end

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

if operacion ==1 f = f-1; if f == 0 operacion = 2; f=1; end c = c+1; elseif operacion ==2 f = f+1; c = c-1; if c ==0 operacion = 1; c=1; end end end end return function [AlturaImg,AnchoImg,Img_CodifY_zigzag_linea,Img_CodifCB_zigzag_linea,Img_C odifCR_zigzag_linea] = leerArchivo(ruta) fid = fopen(ruta,'r'); %Guarda la altura y el ancho de la imagen AlturaImg = fread(fid,1,'uint16'); AnchoImg = fread(fid,1,'uint16'); AlturaImg_mult8_Y = ceil(AlturaImg/8)*8; AnchoImg_mult8_Y = ceil(AnchoImg/8)*8;

AlturaImg_mult8_CbCr = ceil(round(AlturaImg/2)/8)*8; AnchoImg_mult8_CbCr = ceil(round(AnchoImg/2)/8)*8; i=1; j=1; lecturaColum=0; lecturaFil=0;

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

while lecturaFil < AlturaImg_mult8_Y while lecturaColum < AnchoImg_mult8_Y for c=1:64 Img_CodifY_zigzag_linea_i(i,j)=fread(fid,1,'int8'); %#ok j=j+1; end lecturaColum=lecturaColum+8; end i=i+1; j=1; lecturaColum=0; lecturaFil=lecturaFil+8; end Img_CodifY_zigzag_linea = reshapeColum(Img_CodifY_zigzag_linea_i); i=1; j=1; lecturaColum=0; lecturaFil=0; while lecturaFil < AlturaImg_mult8_CbCr while lecturaColum < AnchoImg_mult8_CbCr for c=1:64 Img_CodifCB_zigzag_linea_i(i,j)=fread(fid,1,'int8'); %#ok j=j+1; end lecturaColum=lecturaColum+8; end i=i+1; j=1; lecturaColum=0; lecturaFil=lecturaFil+8; end Img_CodifCB_zigzag_linea =reshapeColum(Img_CodifCB_zigzag_linea_i);

i=1; j=1; lecturaColum=0; lecturaFil=0; while lecturaFil < AlturaImg_mult8_CbCr while lecturaColum < AnchoImg_mult8_CbCr

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

for c=1:64 Img_CodifCR_zigzag_linea_i(i,j)=fread(fid,1,'int8'); %#ok j=j+1; end lecturaColum=lecturaColum+8; end i=i+1; j=1; lecturaColum=0; lecturaFil=lecturaFil+8; end Img_CodifCR_zigzag_linea =reshapeColum(Img_CodifCR_zigzag_linea_i); fclose(fid) function [A]=reshapeColum(B) i=1; m = size(B,1); columnas=1; tamanio=size(B,2); for i=1: size(B,1) colum = 1; while colum <= size(B,2) exep=1; for fila=1:m if colum <= size(B,2) A(fila,columnas) = B(i,colum); fila = fila + 1; colum = colum+1; end if colum > size(B,2) && numel(A)~=(ceil(numel(B)/m)*m) if exep == 1 if i < size(B,1) i = i+1; end colum = 1; exep = exep +1; end

ESCUELA POLITCNICA NACIONAL


Introduccin a la Multimedia

end i = i+1; end

else if colum > tamanio return end end end columnas = columnas+1;

Conclusiones: Se concluye que el algoritmo de codificacin JPEG es un algoritmo que nos permite comprimir una imagen y de mucho mas resultado o compresin cunado se trata de imagines con una variacin no muy significante en crominancias y en luminancias, sin embargo, y a pesar de que la compresin no es muy grande nos permite guardar imgenes con grandes variaciones como por ejemplo la de paisajes, y el momento de descomprimir el resultado es muy bueno pues solo surgen cambios casi imperceptibles para el ojo humano. SE concluye que una compresin de una imagen usando el algoritmo de compresin JPEG es muy usado cundo se tiene imgenes de alta fidelidad, pues gurda mucha informacin real de la imagen y las perdidas producidas son irrelevantes. Se concluye que el algoritmo de compresin JPEG puede se r con perdidas y sin perdidas dependiendo de la forma de implementacin del algoritmo. Se concluye que una imagen JPEG ocupa mucho mas espacio de memoria que otros formatos debido ala gran cantidad de informacin de la imagen que se gurda. Se concluye que dependiendo de la forma de implementacin del algoritmo JPEG el archivo de la imagen pude muchas veces expandirse o reducirse. Bibliografa: http://es.wikipedia.org/wiki/Joint_Photographic_Experts_Group

www.pensamientoscomputables.com/.../algoritmo-co vimeo.com/41038308 docs.gimp.org/es/gimp-tutorial-quickie-jpeg.html