Hoy veremos que MATLAB puede tambin trabajar con otros tipos de datos: En esta oportunidad le voy a hablar sobre:
Hipermatrices, o matrices de ms de dos dimensiones. HIPERMATRICES
Una posible aplicacin es almacenar con un nico nombre distintas matrices del mismo tamao (resulta una hipermatriz de 3 dimensiones). Los elementos de una hipermatriz pueden ser nmeros, caracteres, estructuras, y vectores o matrices de celdas. El tercer subndice representa la tercera dimensin: la profundidad de la hipermatriz.
Definicin de Hipermatrices Las funciones para trabajar con estas hipermatrices estn en el sub-directorio toolbox\matlab\datatypes. Las funciones que operan con matrices de ms de dos dimensiones son anlogas a las funciones vistas previamente, aunque con algunas diferencias. Ejemplo: Las siguientes sentencias generan, en dos pasos, una matriz de 2 3 2: (: , : , ) = [ ; ] % = 1 2 3 4 5 6 : , : , = ; %
(: , : , 1) = 1 2 3 4 5 6 (: , : , 2) = 2 3 4 5 6 7 FUNCIONES QUE TRABAJAN CON HIPERMATRICES Algunas funciones de MATLAB para generar matrices admiten ms de dos subndices y pueden ser utilizadas para generar hipermatrices.
Entre ellas estn:
rand(), randn(), zeros() y ones(). Por ejemplo: = (, , )
Las siguientes funciones de MATLAB se pueden emplear tambin con hipermatrices: size() devuelve tres o ms valores (el n de elementos en cada dimensin) ndims() devuelve el nmero de dimensiones squeeze() elimina las dimensiones que son igual a uno reshape() distribuye el mismo nmero de elementos en una matriz con distinta forma o con distintas dimensiones permute(A,v) permuta las dimensiones de A segn los ndices del vector v ipermute(A,v) realiza la permutacin inversa
Respecto al resto de las funciones de MATLAB, se pueden establecer las siguientes reglas para su aplicacin a hipermatrices:
1. Todas las funciones de MATLAB que operan sobre escalares (sin(), cos(), etc.) se aplican sobre hipermatrices elemento a elemento (igual que sobre vectores y matrices). Las operaciones con escalares tambin se aplican de la misma manera. 2. Las funciones que operan sobre vectores (sum(), max(), etc.) se aplican a matrices e hipermatrices segn la primera dimensin, resultando un array de una dimensin inferior. 3. Las funciones matriciales propias del lgebra Lineal (det(), inv(), etc.) no se pueden aplicar a hipermatrices. Para poderlas aplicar hay que extraer primero las matrices correspondientes (por ejemplo, con el operador dos puntos (:)) Ejemplo:
Si queremos crear un cubo de nmeros de lado 5 donde la tapa y el fondo sean matrices unidad y el resto sean ceros podemos hacer lo siguiente:
(3, (5), ((5), [1,1,3]), (5)) Manejo Bsicos de imgenes con Hipermatrices
Leyendo imgenes de bin: >>f=imread(wow.jpeg) Obteniendo informacin de f: Para determinar el tamao e la imagen: >>size(f) ans = 177 284 3 Si lo queremos almacenar en una variable: >>[M,N]=size(f) Si lo que queremos es obtener informacin ms detallada de la imagen: >> whos f Name Size Bytes Class Attributes
f 177x284x3 150804 uint8 Mostrando Imgenes imshow(f) Donde f es la imagen.
>> max(f(:)) %todos los elementos ans = 255 imshow(gris)
Ejemplo:
>> c=imread('autumn.tif'); >> whos c Name Size Bytes Class Attributes c 206x345x3 213210 uint8 El gran total es 213.210 elementos con 213,210 bytes >> imshow(c)
>> max(c(:)) %todos los elementos ans = 248 >> gris=(c(:,:,1)+c(:,:,2)+c(:,:,3))/3; >>imshow(gris)