Procesamiento de Audio y Video Con Matlab

Embed Size (px)

Citation preview

PROCESAMIENTO DE AUDIO E IMAGENES CON MATLABAUDIO AND IMAGE PROCESSING WITH MATLAB

Miguel Ricardo Perez Pereira

Resumen: En este documento se encontraran las ordenes bsicas, como tambin ordenes complejas que tiene el software Matlab para el procesamiento de audio y video, aunque se mostraran la mayora de ordenes importantes, no se mostraran todas debido a la amplia gama con que cuenta este software. Tambin se encontrara ejemplos claros y concisos sobre el uso de cada orden, y explicaciones de conceptos subyacentes que son necesarios para el buen entendimiento de los ejercicios.

1. Procesamiento de audio

1.1 captura de audio:En un sistema de Procesamiento Digital De Seales, es muy importante la captura de la seal, debido a que una captura apropiada conlleva a resultados ptimos del sistema.Los factores ms relevantes que pueden influir en esta captura son: el ruido, la frecuencia de muestreo y la intensidad de la seal. El ruido y la intensidad de la seal son parmetros que debe controlar el diseador y no dependen de Matlab, pero la tercera variable que es la frecuencia de muestreo si es un parmetro que es modificable por software, por esto el diseador debe elegir la frecuencia apropiada.Para la eleccin de una frecuencia apropiada el diseador debe apoyarse en el Teorema Nyquist Segn el teorema de muestreo de Nyquist-Shannon, para poder replicar con exactitud la forma de una onda es necesario que la frecuencia de muestreo sea superior al doble de la mxima frecuencia a muestrear.Matlab posee dos rdenes para la captura de audio, una para archivos previamente guardados y en formato .wav, muy til debido a que el formato .wav no posee compresin de ninguna clase, la orden es [X, Fs] = wavread(*.wav)El vector X contiene el audio a procesar, y la variable Fs la frecuencia de muestreo en que fue capturado el audio.Las ordenes (plot(X), sound(X,Fs)), grafican y reproducen el audio, otra orden alternativa para reproducir el audio seria wavplay(X,Fs);

Grafica 1. Grfica de la seal de audio en muestras.Observe que el eje de la variable independiente no es el Tiempo sino el nmero de muestras, ms adelante se explicar cmo se grafica el tiempo.La otra forma de capturar audio del mundo exterior, es cuando se desea que matlab grabe la seal directamente del medio. La orden utilizada es X=wavrecord(4*Fs,Fs,double);En x queda el vector de audio con la frecuencia de muestreo dada en Fs, X estar en formato doubl usted puede escoger de la Tabla 1 otros formatos.

Tabla 1 . Formatos de captura del audio

El nmero 4 indica los segundos que se piensan capturar en este caso 4 segundos.

Programa 1 captura y grafica en funcin del tiempo una seal de audio

Grafica 2. Captura de audio y grafica en tiempo.

En la Grafica 2 se muestra un pequeo programa que captura la seal de audio por medio de la tarjeta de sonido del computador y lo grafica en amplitud y en tiempo.1.2 Procesamiento de Audio.Matlab posee innumerables funciones para el procesamiento de audio, en gran medida porque Matlab es un software especial para el manejo de vectores y matrices.Para este artculo se expondrn tres operaciones bsicas que se pueden hacer con seales de audio que son: Operaciones matemticas Amplitud Suma de seales Recorte de seal Anlisis en frecuencias Diseo y aplicacin de filtros

1.2.1 Operaciones MatemticasEn Matlab se puede hacer cualquier operacin que la matemtica permite hacer sobre vectores, algunas de estas operaciones no son de mucha aplicacin o no tiene equivalencia en audio. Pero otras son de gran relevancia.Volumen: una de las operaciones que es de gran relevancia es la multiplicacin por un escalar, su equivalente en audio seria el control de volumen de la seal.Para multiplicar un vector por un escalar se tiene>> VectorOut=K*VectorIn;Donde K es el escalar, vectorIn es el vector de entrada, y VectorOut es la respuesta o vector de salida.

Programa 2. Programa que incrementa el volumen de una seal

Grafica 3. Izquierda seal original, derecha seal amplificada

El Programa 2 captura una seal de audio desde un micrfono con una frecuencia de muestreo de 8 KHz, para despus subirle el volumen al doble. La Grafica 3 se muestra la seal original y la seal resultante.Suma de seales: en audio hay una operacin que es de gran utilidad que es las mezclas de audios, dicha operacin no es ms que la suma de dos vectores. Para sumar dos o ms vectores en Matlab solo tiene que aplicar la siguiente orden.>> vectorOut=vector1+vector2;En vectorOut estar el audio mesclado del vector1 y el vector2, para que esta instruccin no genere errores los vectores deben ser del mismo tamao.

Programa 3. Programa que mezcla audio

Grafica 4. Graficas de las seales de entrada t salida

El Programa 6 graba dos audios (captura1, captura2), y la mezcla en un vector llamado mezcla. En la grafica 4 se muestra la grafica de los tres vectores.Recorte de seal: para realizar una operacin de recorte de un vector en un software convencional, seguramente tendra que utilizarse un ciclo repetitivo, esto en Matlab no es necesario debido a las operaciones entre vectores. Para recortar un vector en matlab se emplea la siguiente instruccin.>> vectorOut=[vectorInt(xp:xf)];Donde vectorInt es el vector a recortar, xp y xf son variables que contienen el componente de inicio y fin a recortar, y vectorOut es el vector recortado.

Programa 4. Programa semiautomtico de recorte de la seal por botn de mause

Grafica 5. Grafica de la seal capturada y de la recortada

El programa 4, captura un Audio por el micrfono y lo grafica, despus se capturan dos eventos de mause donde el primero determina el punto de inicio del recorte y el segundo el de final. Posterior mente se recorta el audio y se grafica la seal recortada.1.2.2 Anlisis en FrecuenciasEn audio el anlisis en frecuencia es uno de los anlisis ms importantes que existen, debido a que las componentes frecuenciales del archivo pueden llegar a definir completamente y de manera ms clara a el audio. Maltab posee una instruccin para aplicar la transformada de Fourier de una seal discreta, es decir aplica la transformada rpida de Fourier a la seal, para as pasarla al dominio de la frecuencia. Dicha instruccin es:>>VectorFre= fft(audioInt);El vector audioInt es el vector en el dominio del tiempo, el vectorFre es el vector en el dominio de la frecuencia.

Programa 5. Programa que graba una seal y la grafica en tiempo y en frecuencia.

Grafica 6. Graficas en tiempo y en frecuencia

En el programa, se muestra un algoritmo que captura una seal de audio y lo grafica en tiempo y en frecuencia. Al final encontramos la orden Zoom Xin que me permite hacer un Zoom solo a la componente independiente de la grafica, otras variaciones de esta instruccin son:

Para mayor informacin consultar la seccin Help de Matlab.

1.2.3 Diseo y aplicacin de filtrosEn Matlab hay barias formas de disear filtros. En este documento solo trataremos el diseo de filtros IIR (Respuesta al impulso infinito) debido a que son los ms comn mente utilizados.Dentro de los filtros IIR veremos: Butterworth: pasa altas, pasa bajas, pasa bandas, rechaza banda Chebyshev I: pasa altas, pasa bajas, pasa bandas, rechaza banda Chebyshev II: pasa altas, pasa bajas, pasa bandas, rechaza banda Cauer: pasa altas, pasa bajas, pasa bandas, rechaza banda.Hay que recordar que la diferencia entre estos filtros es primordial mente en su rizado y en su orden. En la tabla 2 se muestra de manera resumida algunas de estas diferencias.

Tabla 2. Diferencia entre filtrosFiltro Butterworth pasa altas:La grafica caracterstica de este filtro es como la que se muestra en la Grafica 7, para el diseo de este filtro se necesitan varias frecuencias que son: Fin de la banda atenuada (Fa), Principio de banda de paso (Pp).

Grafica 7. Grafica del filtro Butterworth pasa altasPara disear este filtro, se da las frecuencias antes mencionadas y Matlab calcula el orden y la frecuencia de corte. Un ejemplo de diseo de este filtro se ve en el programa siguiente.

Programa 6 programa que calcula y grafica un filtro Pasa Altas

Filtro Butterworth pasa bajas:Se utiliza el mismo procedimiento, solo cambia que se bebe quitar la palabra high de la frmula del clculo de los coeficientes de filtro.

Grafica8. Grafica del filtro pasa Bajas.

Filtro Butterworth Pasa Banda:Para el Pasa Banda se necesitan cuatro frecuencias que son: Fin de la banda atenuada (Fa), principio de la banda de paso (Pp), fin de la banda de paso (Fp), Principio de la banda atenuado (Pa).

Grafica 9. Grafica del filtro pasa banda

Programa 7 Programa para calcular un filtro pasa banda

Filtro Butterworth Rechaza Banda:El procedimiento para el diseo de este filtro, es el mismo que para el pasa banda, solo que se debe agregar la palabra stop a la instruccin que calcula losCoeficiente del filtro. Ver Programa 8

Programa 8. Programa que calcula un filtro rechaza banda

Grafica 10. Grafica de un filtro Rechaza banda

Filtros Chebyshev I, Chebyshev II y Cauer Se sigue el mismo procedimiento que en los filtros Butterword solo que se cambian las instrucciones que calculan la frecuencia normalizada y los coeficientes del filtro. Las instrucciones que remplazaran a estas son:

Chebyshev IPara Pasa Altas [N,Wn]=cheb1ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby1(N,Rp,Wn,'high') %coeficientes del filtro

Para pasa bajas [N,Wn]=cheb1ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby1(N,Rp,Wn) %coeficientes del filtro

Para Pasa banda [N,Wn]=cheb1ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby1(N,Rp,Wn) %coeficientes del filtro

Para Rechaza Banda [N,Wn]=cheb1ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby1(N,Rp,Wn, 'stop') %coeficientes del filtro

Chebyshev II

Para Pasa Altas [N,Wn]=cheb2ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby2(N,Rp,Wn,'high') %coeficientes del filtro

Para pasa bajas [N,Wn]=cheb2ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby2(N,Rp,Wn) %coeficientes del filtro

Para Pasa banda [N,Wn]=cheb2ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby2(N,Rp,Wn) %coeficientes del filtro

Para Rechaza Banda [N,Wn]=cheb2ord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=cheby2(N,Rp,Wn, 'stop') %coeficientes del filtro

Cauer

Para Pasa Altas [N,Wn]=ellipord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=ellip(N,Rp,Rs,Wn,'high') %coeficientes del filtro

Para pasa bajas [N,Wn]=ellipord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=ellip(N,Rp,Rs,Wn) %coeficientes del filtroPara Pasa banda [N,Wn]=ellipord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=ellip(N,Rp,Rs,Wn) %coeficientes del filtro

Para Rechaza Banda [N,Wn]=ellipord(Wp,Ws,Rp,Rs); %N orden del filtro, Wn frecuencia normalizada [b,a]=ellip(N,Rp,Rs,Wn,'stop') %coeficientes del filtro

Aplicacin del filtro:

Para aplicar el filtro diseado a un archivo de audio, se debe utilizar la instruccin.

>> filter(b,a,vectorInt)

Donde b y a son los coeficientes del filtro, y vectorInt es el vector de audio.

Programa 9 programa que lee un archivo de audio y le aplica un filtro pasa banda.

Grafica 11. Graficas en frecuencia de una seal filtrada

2. Procesamiento de video

2.1 captura de imagen

Matlab puede leer imagen desde cualquier ubicacin del computador, adems puede leer una gran cantidad de formatos, alguno de ellos son BMP, JPEG, PNG, GIF, TIF para mayor informacin sobre formatos consulte el Help de Matlab.

Para leer una imagen se utiliza la instruccin.

>> imagenInt=imread('nombre de imagen');

La variable imagenInt contiene tres matrices, cada matriz representa el formato RGB (rojo, verde, azul).

Programa 10. Programa que lee una imagen desde cualquier ubicacin

La tres matrices que contiene la variable imagenInt se pueden separa con las siguientes instrucciones

planoR=imagenInt( :, :,1) ; planoG=imagenInt( :, :,2) ; planoB=imagenInt( :, :,3) ;

2.2 Captura De Video Por Cmara Web

Para logar capturar video con Matlab, el primer paso es reunir informacin, sobre controladores de su computador, adaptadores de video, cmaras disponibles, direccin y resolucin.

Imaqhwinfo: obtiene informacin del adaptador de video disponible

Adactador=imaqhwinfo('winvideo')

AdaptorDllName: [1x81 char] AdaptorDllVersion: '3.3 (R2009a)' AdaptorName: 'winvideo' DeviceIDs: {[1]} DeviceInfo: [1x1 struct]

El parmetro DeviceIDs indica cuantos dispositivos de video estn disponibles en este caso [1]

>> Camara=imaqhwinfo('winvideo',1)

Esta orden crea el objeto cmara que se va a utilizar

>> Camara.SupportedFormats Columns 1 through 4

'YUY2_1024x768' 'YUY2_1280x1024' 'YUY2_160x120' 'YUY2_176x144' Columns 5 through 7 'YUY2_320x240' 'YUY2_352x288' 480'

Esta instruccin obtiene informacin de todas las resoluciones disponibles para su dispositivo de video.

Despus de reunir la informacin necesaria se puede capturar el video.Programa 11 programa que captura de una cmara web una imagen en formato RGB.

2.3 Procesamiento de imgenes.

2.3.1 imagen en escala de grises

Cuando la imagen es capturada, se obtienen tres matrices que representan la informacin de color, estas tres matrices se pueden convertir en una, dicha matriz representa la imagen en escala de grises donde negro es representado con el nmero cero (0) y blanco es representado con el numero 255, y hay 255 tonalidades diferentes de grises para representar los colores intermedios. Para convertir una imagen en formato RGB a escala de grises se tiene.

Programa 11 programa que captura una imagen y la transforma a escala de grises

Imagen 1 imagen en color y en escala de grises

2.3.2 Binarizacin de la imagen.Cuando en una aplicacin no es importante el color de la imagen, sino la forma, la imagen puede ser pasada por un proceso de Binarizacion, que no es ms que pasarla a blanco y negro dependiendo der un umbral.

binaria= matriz>=100; La instruccin anterior ordena a todos los pixeles de la imagen matriz mayores o iguales a 100 que se pongan en uno (1) y los menores a cero, que dando una matriz cuyos componentes son dos valores. Una imagen del resultado de esta orden se ve a continuacin.

Imagen 2 imagen Binarizada

Un cambio que se le puede hacer a la Binarizacion seria que Matlab calcule automticamente el umbral

threshold = graythresh(imagen);imagen =~im2bw(imagen,threshold);

2.3.3 Conteo De Elementos De Una Imagen.

La funcin bwlabel realiza un etiquetado de los componentes existentes en la imagen binaria, la cual puede ser considerada como una forma de averiguar cuntos elementos estn presentes en la imagen. La funcin tiene el siguiente formato

[L Ne]=bwlabel(imagenbinarizada);

En L queda la misma matriz y en Ne el nmero de elementos.

2.3.4 Clculos de propiedades en una imagen.

Matlab posee una funcin muy til para el clculo de propiedades de una imagen la funcin se denomina regionprops y las propiedades que calcula son: Area, Centroid, BoundingBox, SubarrayIdx, MajorAxisLength, MinorAxisLength, Eccentricity, Orientation, ConvexHull, ConvexImage, ConvexArea, Image, FilledImage, FilledArea, EulerNumber Extrema, EquivDiameter, Solidity, Extent, PixelIdxList, PixelList, Perimeter.

Para obtener una de estas propiedades se escribe

propiedad=regionprops(L,'BoundingBox') En la estructura propiedad queda guardada la informacin sobre los puntos inferiores y superiores de cada objeto, que se encuentran en la matriz binarizada L.

Imagen 4. Deteccin de objetos en una imagen

Programa 12. Detecta elementos en una imagen y los seala

2.3.5 Sub-muestreo de imgenes

Hay casos donde la imagen posee mucha informacin, el procesado de esta imagen requiere un costo computacional enorme. Para estos casos es necesario sub-muestrear la imagen, el costo de este sub-muestreo es la prdida de informacin, la imagen resultante de tamao menor a la original.

La imagen puede estar en formato RGB, escala de grises o binarizada.

imageSub2=imagen(1:2:end,1:2:end,1:1:end);

Imagen es la matriz de la imagen la cual es sub-muestreada en dos.

2.3.6 Filtrado De Imgenes.

Matlab posee muchas instrucciones para filtrar imgenes las cuales se pueden aplicar sobre la imagen en cualquier formato.Una instruccin que acta sobre una imagen Binarizada es:

imagen = bwareaopen(imagenbin,Np);

Esta instruccin elimina los objetos en la imagen que sean menor a un numero Np de pixeles.

Una instruccin que acta sobre la imagen en formato Escala De Grises es la que realiza un Filtraje espacial.

ImagenOut=nlfilter(ImageInt,[i j],fun);

Esta instruccin modifica un pixel dependiendo de sus pixeles vecinos, la vecindad es definida por una funcin de ventana dada por el usuario.

La funcin fun es de la forma:

function result=myfunction(x) result=1/9*(x(1,1)+x(1,2)+x(1,3) +x(2,1)+x(2,2)+x(2,3)+x(3,1)+x(3,2)+x(3,3));

2.3.7 Extraccin De Bordes

La funcin edge da la posibilidad de obtener los bordes de la imagen. Por medio de dos diferentes algoritmos (canny y sobel).

ImagenOut=edge(ImageInt, algoritmo);

Figura bordes de la imagen por Canny y Sobel

Figura programa que detecta bordes de una imagen

Referencias [1] E. V. Cuevas Daniel, Z. Navarro, Visin por Computador utilizando MatLAB Y el Toolbox de Procesamiento Digital de Imgenes

[2] D. O. Barragn, Manual De Interfaz Grfica De Usuario En Matlab, Universidad Tcnica Particular De Loja[3] J. Garca, J. Rodrguez, J. Vidal, Aprenda Matlab 7.0 como si estuviera en primero, Universidad Politcnica de Madrid, Madrid Diciembre 2005

[4] R. Valerio., Matlab y el diseo de filtros digitales., revista. nmero 19 septiembre de 2005 volumen ii