Procesamiento Digital de Señales: Audio, Imagen y Codificación Huffman
Enviado por Chuletator online y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 5,32 KB
Práctica 2: Procesamiento de Audio
Este apartado describe el procesamiento de un fichero de audio y la visualización de su histograma.
V1 = audioread('v1.wav'); % Lee el fichero de audio
M = 25;
subplot(2,2,1); % Para mostrar en 2 filas, 2 columnas: posición 1
hist2(V1,M); % Histograma (asumiendo función personalizada)
title('V1');
Procesamiento de Imagen: Luminancia e Histograma
Esta sección detalla cómo obtener y visualizar la luminancia de una imagen, así como su histograma.
Mostrar Iluminancia
x1 = imread('i1.png'); % Lee la imagen RGB
y1 = rgb2gray(x1); % Obtiene la luminancia de cada píxel
subplot(2,4,1), imshow(y1); % Muestra la luminancia en escala de grises
subplot(2,4,2), imhist(y1); % Muestra el histograma de la luminancia
El número de bytes del fichero 'il1' se calcula como:
Nbytes = (f*c) + 4;
La entropía de la imagen y1 (luminancia de i1) se obtiene con:
entropia1 = entropy(y1); % Entropía de i1.
Funciones para Manipulación de Imágenes
A continuación, se presentan funciones para escribir y leer imágenes, útiles para el procesamiento.
Función escribeIm: Escritura de Imágenes
Esta función permite escribir una matriz de imagen en un fichero binario.
function escribeIm(x, fi)
[f, c] = size(x); % Obtiene el número de filas y de columnas
fid = fopen(fi,'w'); % Abre el fichero en modo escritura
fwrite(fid,f,'uint16'); % Escribe el número de filas en el fichero
fwrite(fid,c,'uint16'); % Escribe el número de columnas en el fichero
fwrite(fid,x,'uint8'); % Escribe las palabras código en el fichero
fclose(fid); % Cierra el fichero
end
Función leeIm: Lectura de Imágenes
Esta función lee una imagen desde un fichero binario y la visualiza.
function f = leeIm(fi)
fid = fopen(fi,'r'); % Abre el fichero en modo lectura
f = fread(fid,1,'uint16'); % Lee el número de filas en el fichero
c = fread(fid,1,'uint16'); % Lee el número de columnas en el fichero
x = fread(fid,[f c],'uint8=>uint8'); % Lee las palabras código en el fichero
fclose(fid); % Cierra el fichero
imshow(x);
end
Codificación Huffman
La codificación Huffman es una técnica de compresión de datos sin pérdida. Aquí se describe su aplicación a imágenes monocromáticas.
Obtención del Código Huffman para una Fuente Discreta
Para obtener el código Huffman de una fuente discreta, se utiliza la siguiente función:
[dict, avglen] = huffmandict(sym, prob);
Función HuffmanY: Codificación Huffman de Imágenes
Esta función permite obtener el código de Huffman de una imagen monocromática de 8 bits.
function [dict, avglen] = HuffmanY(y)
sym = 0:255; % Genera el vector de símbolos
[f, c] = size(y); % Obtiene las dimensiones de la imagen
prob = imhist(y)/(f*c); % Obtiene las frecuencias relativas
[dict, avglen] = huffmandict(sym, prob); % Obtiene el código y la longitud media
end
Aplicación a la Luminancia de una Imagen
Para obtener el código Huffman de y1 (luminancia de i1), se invoca la función HuffmanY:
[dict, avglen] = HuffmanY(y1);
Visualización de Histograma y Longitud de Palabras Código
El siguiente programa permite visualizar simultáneamente el histograma de la imagen y la longitud de las palabras código generadas por Huffman.
for k = 1:256
l(k) = length(dict{k,2}); % Obtiene un array con las longitudes
end
subplot(211), imhist(y1); % Dibuja el histograma de y1
subplot(212), bar(0:255,l,0.1); % Muestra la longitud de cada palabra código
axis tight;
Práctica 4: Predicción Compensada en Movimiento (MCP)
Esta sección aborda la estimación y compensación de movimiento, técnicas fundamentales en la compresión de vídeo.
Estimación de Movimiento con estMov
La función estMov realiza la estimación de movimiento entre una imagen (Im) y una imagen de referencia (ImRef). Su declaración es la siguiente:
[VM1, VM2] = estMov(Im, ImRef, b, p);
Generación de Predicción Compensada con predCompMov
A partir de los vectores de movimiento, se puede generar la predicción de Im, conocida como imagen compensada en movimiento (ImComp), utilizando la función predCompMov. Su declaración es:
ImComp = predCompMov(VM1, VM2, ImRef);
Esta función desplaza los bloques de ImRef de acuerdo con los vectores de movimiento especificados en las matrices VM1 y VM2.
Visualización de MCP con imsMcp
La función imsMcp utiliza internamente estMov y predCompMov para visualizar las imágenes que intervienen o se generan en el proceso de Predicción Compensada en Movimiento (MCP). Su declaración es:
MSE = imsMcp(fiVid, ImIni, nIms, b, p);