tratamiento de imagenes con mathematica

8
Tratamiento de imágenes y aplicaciones Óscar Orozco Ríos y Higinio Ramos Calle En esta comunicación se abordará el tema del tratamiento de imágenes con el programa Mathematica y las posibles aplicaciones que surgen de la utilización de este software. Explicaremos qué es una imagen desde el punto de vista matemático y cómo el Mathematica entiende las imágenes digitales, tanto en escala de grises como en color. Obtendremos los datos que la imagen digital nos aporta los cuales constituyen la información inicial con la que trabajaremos. Por ultimo hablaremos de las aplicaciones que podemos desarrollar en el ámbito de la imagen digital. Trataremos este tema con más profundidad y desarrollaremos dos aplicaciones concretas con una utilización en la vida real, la primera es la encriptación de imágenes digitales y la segunda es la recuperación de imágenes digitales borrosas, como las que se producen al mover una cámara digital en el momento de tomar dicha imagen. Nociones básicas para trabajar con imágenes Imagen desde el punto de vista matematico Una imagen es una función de dos variables definida en una región del plano que a cada punto de dicha región asigna un valor de brillo o un color. Imágenes Digitales Una imagen digital es una celda compuesta por unos elementos llamados pixeles, que son los componentes más pequeños de una imagen digital. Cada pixel es un espacio en la memoria donde se almacena un numero y este numero representa la definición del color y el brillo de una parte de la imagen. Cada pixel puede definir un color solamente y el numero de pixeles define la cantidad de información que contiene una imagen. El número de filas y de columnas en que dividimos la región muestreada proporciona la resolución de la imagen. En las cámaras digitales son frecuentes las resoluciones de 640×480 pixels y de 1024×768 pixels. Naturalmente, cuanto mayor sea la resolución de una imagen mejor se podrán apreciar los detalles. RGB Cualquier color puede ser representado mediante la combinación de los colores rojo, verde y azul, cada uno en diferente proporción. La combinación RGB estándar indica 256 niveles por cada canal, es decir por cada color rojo, verde o azul. Para representar el valor de 256, requerimos de 8 bits para cada canal de color. Lo que nos permite una combinación del orden 2563 lo que nos permite una combinación de casi 17 millones de colores (16.777.216). Introduccion La siguiente matriz la se interpretará como una imagen. Los valores que aparecen en ella corresponden a la luminosidad de cada uno de las 2*8 = 16 pixels representados. Valores más altos corresponden a zonas más claras y los más bajos a las más oscuras. El 0 es el color negro y 255 es blanco.

Upload: higinio

Post on 29-Nov-2015

113 views

Category:

Documents


7 download

TRANSCRIPT

Page 1: Tratamiento de Imagenes Con Mathematica

Tratamiento de imágenes y aplicacionesÓscar Orozco Ríos y Higinio Ramos Calle

En esta comunicación se abordará el tema del tratamiento de imágenes con el programa Mathematica y las posibles aplicaciones que surgen de la utilización de este software.Explicaremos qué es una imagen desde el punto de vista matemático y cómo el Mathematica entiende las imágenes digitales, tanto en escala de grises como en color. Obtendremos los datos que la imagen digital nos aporta los cuales constituyen la información inicial con la que trabajaremos.Por ultimo hablaremos de las aplicaciones que podemos desarrollar en el ámbito de la imagen digital. Trataremos este tema con más profundidad y desarrollaremos dos aplicaciones concretas con una utilización en la vida real, la primera es la encriptación de imágenes digitales y la segunda es la recuperación de imágenes digitales borrosas, como las que se producen al mover una cámara digital en el momento de tomar dicha imagen.

Nociones básicas para trabajar con imágenes� Imagen desde el punto de vista matematico

Una imagen es una función de dos variables definida en una región del plano que a cada punto de dicha regiónasigna un valor de brillo o un color.

� Imágenes Digitales

Una imagen digital es una celda compuesta por unos elementos llamados pixeles, que son los componentesmás pequeños de una imagen digital. Cada pixel es un espacio en la memoria donde se almacena un numero yeste numero representa la definición del color y el brillo de una parte de la imagen. Cada pixel puede definir uncolor solamente y el numero de pixeles define la cantidad de información que contiene una imagen. El númerode filas y de columnas en que dividimos la región muestreada proporciona la resolución de la imagen. En lascámaras digitales son frecuentes las resoluciones de 640×480 pixels y de 1024×768 pixels. Naturalmente,cuanto mayor sea la resolución de una imagen mejor se podrán apreciar los detalles.

� RGB

Cualquier color puede ser representado mediante la combinación de los colores rojo, verde y azul, cada uno endiferente proporción. La combinación RGB estándar indica 256 niveles por cada canal, es decir por cada colorrojo, verde o azul. Para representar el valor de 256, requerimos de 8 bits para cada canal de color. Lo que nospermite una combinación del orden 2563 lo que nos permite una combinaciónde casi 17 millones de colores (16.777.216).

IntroduccionLa siguiente matriz la se interpretará como una imagen. Los valores que aparecen en ella corresponden a laluminosidad de cada uno de las 2*8 = 16 pixels representados. Valores más altos corresponden a zonas másclaras y los más bajos a las más oscuras. El 0 es el color negro y 255 es blanco.

Page 2: Tratamiento de Imagenes Con Mathematica

imagen = Table@15 * k * j, 8k, 1, 2<, 8j, 1, 8<D;

MatrixForm@imagenD15 30 45 60 75 90 105 120

30 60 90 120 150 180 210 240

En Mathematica dispone de varios comandos para representar gráficamente listas de datos organizadas en unamatriz. Uno de ellos es ListDensityPlot[Matriz, opciones]. Este comando admite bastantes opciones.

Options@ListDensityPlotD;

ListDensityPlot@imagen, Frame ® True,

AspectRatio ® Automatic, ImageSize ® 25 * 88, 2<D

1 2 3 4 5 6 7 81.01.21.41.61.82.0

NOTA: las filas se invierte en la imagen (la fila primera, la más oscura, es la que se representa en el borde inferior) y las columnas, no obstante, conservan su orden.

También existe la primitiva gráfica bidimensional Raster[Lista, opciones], que se muestra con Show[Graphic-s[Raster[ ] ] ]. "Lista" puede ser una matriz numérica o una matriz cuyos elementos sean vectores a los quepueda aplicarse una función de color. Por defecto, este comando aplica la directiva gráfica GrayLevel[ ] a cadavalor de una matriz y representa una malla rectangular de celdas en escala de grises. Como la directiva gráficaGreyLevel[ ] solamente admite valores numéricos comprendidos entre 0 y 1, Mathematica por defecto cortalos valores que están fuera de este rango haciéndolos igual a 0, si son menores que 0, o a 1, si son mayores que1. Por ello, para usar Show[Graphics[Raster[ ] ] ] es obligado situar los valores de luminosidad en el intervalo[0,1]. Una forma de hacerlo es dividir los valores por el mayor de todos ellos.

Show@Graphics@Raster@imagen � Max@imagenDD, Frame ® True,

AspectRatio ® Automatic, ImageSize ® 30 * 88, 2<DD

0 2 4 6 80.00.51.01.52.0

Otra posibilidad es usar las opciones Raster@Lista, 88xmin, ymin<, 8xmax, ymax<<, 8amin, amax<D que indican que lagráfica debe ocupar el rectángulo Rectangle[88xmin, ymin<, 8xmax, ymax<<] y deben escalarse los valores de formaque amin se corresponda con 0 y amax se corresponda con 1.

Show@Graphics@Raster@imagen, 880, 0<, 88, 2<<,

8Min@imagenD, Max@imagenD<D, Frame ® True,

AspectRatio ® Automatic, ImageSize ® 40 * 88, 2<DD;

Con Raster@Lista, opciones, ColorFunction ® f D se puede aplicar la función de color f a los valores de "Lista"que representan cada celda.

Show@Graphics@Raster@imagen � Max@imagenD, ColorFunction ® HueD,

Frame ® True, AspectRatio ® Automatic, ImageSize ® 30 * 88, 2<DD

0 2 4 6 80.00.51.01.52.0

En el siguiente ejemplo se representará una imagen en color usando la función "RGBColor". Cada celda opixel tiene ahora tres datos comprendidos entre 0 y 1 que corresponden a los valores de rojo, verde y azulrespectivamente (se usara el modelo de color RGB). Al igual que antes, dependiendo de cómo sean los datospuede ser necesario ajustarlos.

2 Tratamiento de imagenes y aplicaciones.nb

Page 3: Tratamiento de Imagenes Con Mathematica

En el siguiente ejemplo se representará una imagen en color usando la función "RGBColor". Cada celda opixel tiene ahora tres datos comprendidos entre 0 y 1 que corresponden a los valores de rojo, verde y azulrespectivamente (se usara el modelo de color RGB). Al igual que antes, dependiendo de cómo sean los datospuede ser necesario ajustarlos.

Clear@imagenDimagen =

Table@8Random@Integer, 81, 255<D, Random@Integer, 81, 255<D,

Random@Integer, 81, 255<D<, 8i, 2<, 8j, 8<D;

imagen �� MatrixForm;

Show@Graphics@Raster@imagen � Max@imagenD, ColorFunction ® RGBColorD,

Frame ® True, ImageSize ® 30 * 88, 2<DD

0 2 4 6 80.00.51.01.52.0

Imagen a escala de grises (.jpg)El comando Import["archivo.extension"] importa datos de un archivo cuyo formato se supone que correspondeal indicado por la extensión y los convierte en una expresión de Mathematica. Este comando trabaja conarchivos de datos, de imágenes y sonidos.

Antes de usarlo es conveniente establecer el directorio donde este las imagenes

SetDirectory@"C:�Mathematica�"D;

Ahora se podrá importar directamente cualquier imagen que esté en este directorio.

usal = Import@"usal.jpg"D

Casi siempre que se usa Import[ ] con un archivo de imagen se obtiene un objeto gráfico de la forma Image[ ].Ahora se usará InputForm[ ] para ver como entiende el Mathematica el archivo importado, como se obtieneuna matriz 200×200 y cuyo tamaño es grande se deberá evitar que Mathematica lo escriba en pantalla. Paraello se usará el comando Shallow para simplificar la salida

Shallow@InputForm@usalDDImage@8<< 200 >><, "Byte", Rule@<< 2 >>D,

Rule@<< 2 >>D, Rule@<< 2 >>D, Rule@<< 2 >>DDEsas reglas (Rule[ ]) especifican determinadas opciones, y de hecho, se pueden ver:

Position@usal, RuleD883, 0<, 84, 0<, 85, 0<, 86, 0<<

Tratamiento de imagenes y aplicaciones.nb 3

Page 4: Tratamiento de Imagenes Con Mathematica

usal@@3DDH* especifica la opción ColorSpace *LColorSpace ® Grayscale

Los datos que constituyen esta imagen están en ImageData[usal]. Se trata de una matriz de 200 filas y 200columnas (pixeles que tiene la imagen) y como es un archivo grande y se debe evitar que Mathematica loescriba en pantalla. El número de filas indica el alto de la imagen y el número de columnas indica el ancho dela imagen medidos en pixels.

datosusal = ImageData@usalD ;

Dimensions@datosusalD8200, 200<Se obtiene el valor de los 5 primeros pixels

ImageData@usalD@@1, 1 ;; 5DD ;

Los valores de la matriz son números comprendidos entre 0 y 1.

88Min@datosusalD, Max@datosusalD<, Head@datosusal@@120, 150DDD<H*real significa que son numeros

reales comprendidos entre 0 y 1*L880., 1.<, Real<El siguiente comando representa líneas de contorno.

usalcontorno =

ListContourPlot@datosusal, ContourShading ® False,

Contours ® 4, Frame ® False, ImageSize ® 8200, 200<D

Out[25]=

El comando Export["archivo.extension", "expresion"] exporta datos a un archivo y los convierte a un formatocorrespondiente a la extensión del archivo "extension". Con este comando se puede exportar datos, imágenes osonidos en una gran variedad de formatos. Algunos formatos tienen opciones de conversión específicas.

Export@"usalcontorno.jpg", usalcontornoD;

H* al ejecutar este comando se

guarda el archivo en formato "jpg" *L

Imagen en colorAhora, se importará una imagen en color

4 Tratamiento de imagenes y aplicaciones.nb

Page 5: Tratamiento de Imagenes Con Mathematica

campus = Import@"campus.jpg"D

Los datos de campus están en ImageData[campus].

datoscampus = ImageData@campusD ;

Dimensions@datoscampusDdatoscampus@@7, 5DDH* el elemento que ocupa la fila 7 columna 5 *L8231, 495, 3<80.745098, 0.772549, 0.811765<Se observa que las dimensiones indican que ImageData[campus] es una matriz de 231 filas y 495 columnascuyos elementos son vectores de 3 elementos que corresponden a los datos de rojo, verde y azul que represen-tan cada pixel.

HistogramasLos siguientes comandos sirven para obtener el histograma de una imagen monocromática (número de vecesque se repite cada valor de luminosidad entre 0 y 255).

Codifica@x_ListD := 8First@ðD, Length@ðD< & �� Split@Sort@xDD;

Histograma@img_ListD :=

Module@8temp, lista<, lista = Flatten@imgD;

temp = Codifica@listaD;

faltan = Complement@Range@0, 255D, temp@@All, 1DDD;

If@Length@faltanD > 0, Sort@Join@temp,

Transpose@8faltan, Table@0, 8Length@faltanD<D<DDD@@All, 2DD, temp@@All, 2DDDD;

El comando Histograma[Lista], donde se supone que "Lista" es una matriz cuyos elementos son númerosenteros del 0 al 255, proporciona como salida una lista con 256 elementos en la que el elemento que ocupa ellugar n-ésimo es el número de veces que el valor n-1 aparece en "Lista".

histousal = Histograma@datosusalD;

Se puede hacer los histogramas de rojos, verdes y azules de la imagen anterior "campus" y representarlosjuntos gráficamente.

Tratamiento de imagenes y aplicaciones.nb 5

Page 6: Tratamiento de Imagenes Con Mathematica

histocampusred = Histograma@datoscampusPAll, All, 1TD;

histocampusgreen = Histograma@datoscampusPAll, All, 2TD;

histocampusblue = Histograma@datoscampusPAll, All, 3TD;

Show@8ListPlot@histocampusred, PlotStyle ® RGBColor@1, 0, 0DD,

ListPlot@histocampusgreen, PlotStyle ® RGBColor@0, 1, 0DD,

ListPlot@histocampusblue, PlotStyle ® RGBColor@0, 0, 1DD<,

ImageSize ® 0.5 8288, 178<D

100 200 300 400 500

200

400

600

800

1000

Aplicaciones� Encriptacion de una imagen digital

La palabra criptografía, que viene del griego y literalmente significa "escritura oculta", es el arte o ciencia decifrar y descifrar información mediante técnicas especiales y se empleada frecuentemente para permitir unintercambio de mensajes que sólo puedan ser leídos por personas a las que van dirigidos y que poseen losmedios para descifrarlos. Para encriptar una imagen digital, solo se necesita operar con matrices, en esteejemplo se usará dos matrices: la matriz de la propia imagen y una matriz de paso, que se genera mediante unalgoritmo. Este algoritmo funcionará con unos parametros iniciales que a su vez sera nuestro codigo de cifrado.

biblio = Import@"biblio.jpg"D

datosbiblio = ImageData@biblioD;

8Head@datosbiblioD, Dimensions@datosbiblioD<8List, 8235, 235<<Es una matriz cuadrada de 235 filas y 235 columnas, por lo que habrá que crear una matriz de paso que cumplael tamaño, para más tarde hacer el producto entre ellas. Para ello se creará una matriz al azar:

matrizdepaso =

Table@8Random@Real, 8-255 000, 255 000<D<, 8i, 235<, 8j, 235<D;

Una vez creada la matriz de paso se realizará la operacion y se obtedrá una nueva matriz que al representarladará la imagen ya encriptada

imagenencriptados = matrizdepaso * datosbiblio;

Se puede observar como la imagen a sido modificada, y sin la matriz de paso anterior no se podrá obtener laimagen inicial

6 Tratamiento de imagenes y aplicaciones.nb

Page 7: Tratamiento de Imagenes Con Mathematica

Image@imagenencriptados � Max@imagenencriptadosDD

� Recuperacion de una imagen digital borosa

El tratamiento de imágenes se ocupa muy especialmente de la eliminación de "ruido". El término "ruido"indica cualquier circunstacia que disminuya la calidad de una imagen. Puede ser: falta de contraste, un rangodinámico pobre o tambien falta de nitidez y definición, lo que se traduce en una imagen borrosa. Un motivoque da lugar a imágenes borrosas es cuando el fotógrafo no tiene buen pulso y mueve la cámara en el momentode tomar la foto. Realmente lo que ocurre en este caso es que cada pixel en la imagen se está promediando consus vecinos. Matemáticamente, se está haciendo una cierta convolución. A veces es posible deshacer dichaconvolución y mejorar considerablemente la nitidez de la imagen.

fotoborosa = Import@"fotoborosa.dat"D;

Se trata de un archivo de imagen constituido por una matriz.

8Head@fotoborosaD, Dimensions@fotoborosaD<8List, 8128, 256<<Image@fotoborosaD

Se trata de una foto borrosa del Campus Viriato de Zamora. Se sabe que el fotógrafo, al tomar la foto, movío lacámara horizontalmente (pero no verticalmente) de forma que cada pixel salió corrido transformándose en unalínea horizontal de longitud igual a 25 pixels. Matemáticamente, esto quiere decir que cada fila de la matriz de"fotoborosa" es el resultado de convolucionar cíclicamente la correspondiente fila de la matriz de "fotobuena"con la siguiente señal.

nucleo = Table@If@-12 £ m £ 12, 1 � 25., 0.0D, 8m, -128, 127<D;

La lista "nucleo" tiene 256 elementos (igual que cada fila de la matriz de la imagen) y es simétrica respecto al

lugar 256

2+ 1 = 129.

La operación de convolución cíclica de una fila de la matriz de "fotobuena" con la lista "nucleo" lo que hace escalcular promedios. Concretamente, la convolución de la fila n-ésima, "fotobuena[[n]]", con "nucleo" es unalista con 256 elementos cuyo elemento m-ésimo es igual al promedio de los 25 elementos consecutivos dedicha fila empezando en el lugar 116+m:

fotomovida@@n, mDD = âj=m

m+24 1

25fotobuena@@n, 116 + jDD

Donde se entiende que si 116+j es mayor que 256 entonces debe reducirse módulo 256, es decir, se sustituyepor el resto de su división por 256. Los primeros 116 lugares de "nucleo" son ceros.

Para mejorar la nitidez de la imagen se somete cada fila de la matriz a una "deconvolución". Hay que tener encuenta que para cada fila se tiene que:

Tratamiento de imagenes y aplicaciones.nb 7

Page 8: Tratamiento de Imagenes Con Mathematica

fotobuena@@nDD = InversaDftB Dft@fotoborosa@@nDDDDft@nucleoD F

En términos de matrices esto es lo que se hace en la siguiente celda.

fotobuena =

Re@Map@InverseFourier, Chop@Map@Fourier, fotoborosaDD �Chop@Table@Fourier@nucleoD, 8128<DDDD �� Chop;

Se puede visualizar la foto del Campus Viriato de Zamora

Image@fotobuena � Max@fotobuenaDD

8 Tratamiento de imagenes y aplicaciones.nb