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);

Entradas relacionadas: