Вы находитесь на странице: 1из 8

Tratamiento de imgenes y

aplicaciones
scar Orozco Ros y Higinio Ramos Calle
En esta comunicacin se abordar el tema del tratamiento de imgenes con el programa
Mathematica y las posibles aplicaciones que surgen de la utilizacin de este software.
Explicaremos qu es una imagen desde el punto de vista matemtico y cmo el Mathematica
entiende las imgenes digitales, tanto en escala de grises como en color. Obtendremos los datos que
la imagen digital nos aporta los cuales constituyen la informacin 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 ms profundidad y desarrollaremos dos aplicaciones concretas con
una utilizacin en la vida real, la primera es la encriptacin de imgenes digitales y la segunda es la
recuperacin de imgenes digitales borrosas, como las que se producen al mover una cmara digital
en el momento de tomar dicha imagen.
Nociones bsicas para trabajar con imgenes
Imagen desde el punto de vista matematico
Una imagen es una funcin de dos variables definida en una regin del plano que a cada punto de dicha regin
asigna un valor de brillo o un color.
Imgenes Digitales
Una imagen digital es una celda compuesta por unos elementos llamados pixeles, que son los componentes
ms pequeos de una imagen digital. Cada pixel es un espacio en la memoria donde se almacena un numero y
este numero representa la definicin 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 informacin que contiene una imagen. El nmero
de filas y de columnas en que dividimos la regin muestreada proporciona la resolucin de la imagen. En las
cmaras digitales son frecuentes las resoluciones de 640480 pixels y de 1024768 pixels. Naturalmente,
cuanto mayor sea la resolucin de una imagen mejor se podrn apreciar los detalles.
RGB
Cualquier color puede ser representado mediante la combinacin de los colores rojo, verde y azul, cada uno en
diferente proporcin. La combinacin RGB estndar 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 combinacin del orden 2563 lo que nos permite una combinacin
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 ms altos corresponden a zonas ms
claras y los ms bajos a las ms oscuras. El 0 es el color negro y 255 es blanco.
imagen Table[15kj, {k, 1, 2}, {j, 1, 8}];
MatrixForm[imagen]
15 30 45 60 75 90 105 120
30 60 90 120 150 180 210 240
En Mathematica dispone de varios comandos para representar grficamente listas de datos organizadas en una
matriz. Uno de ellos es ListDensityPlot[Matriz, opciones]. Este comando admite bastantes opciones.
Options[ListDensityPlot];
ListDensityPlot[imagen, Frame True,
AspectRatio Automatic, ImageSize 25{8, 2}]
1 2 3 4 5 6 7 8
1.0
1.2
1.4
1.6
1.8
2.0
NOTA: las filas se invierte en la imagen (la fila primera, la ms oscura, es la que se representa en el
borde inferior) y las columnas, no obstante, conservan su orden.
Tambin existe la primitiva grfica bidimensional Raster[Lista, opciones], que se muestra con Show[Graphic-
s[Raster[ ] ] ]. "Lista" puede ser una matriz numrica o una matriz cuyos elementos sean vectores a los que
pueda aplicarse una funcin de color. Por defecto, este comando aplica la directiva grfica GrayLevel[ ] a cada
valor de una matriz y representa una malla rectangular de celdas en escala de grises. Como la directiva grfica
GreyLevel[ ] solamente admite valores numricos comprendidos entre 0 y 1, Mathematica por defecto corta
los valores que estn fuera de este rango hacindolos igual a 0, si son menores que 0, o a 1, si son mayores que
1. 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[imagen]], Frame True,
AspectRatio Automatic, ImageSize 30{8, 2}]]
0 2 4 6 8
0.0
0.5
1.0
1.5
2.0
Otra posibilidad es usar las opciones RasterLista, x
min
, y
min
, x
max
, y
max
, a
min
, a
max
que indican que la
grfica debe ocupar el rectngulo Rectangle[x
min
, y
min
, x
max
, y
max
] y deben escalarse los valores de forma
que a
min
se corresponda con 0 y a
max
se corresponda con 1.
Show[Graphics[Raster[imagen, {{0, 0}, {8, 2}},
{Min[imagen], Max[imagen]}], Frame True,
AspectRatio Automatic, ImageSize 40{8, 2}]];
Con RasterLista, opciones, ColorFunction f se puede aplicar la funcin de color f a los valores de "Lista"
que representan cada celda.
Show[Graphics[Raster[imagen/ Max[imagen], ColorFunction Hue],
Frame True, AspectRatio Automatic, ImageSize 30{8, 2}]]
0 2 4 6 8
0.0
0.5
1.0
1.5
2.0
En el siguiente ejemplo se representar una imagen en color usando la funcin "RGBColor". Cada celda o
pixel tiene ahora tres datos comprendidos entre 0 y 1 que corresponden a los valores de rojo, verde y azul
respectivamente (se usara el modelo de color RGB). Al igual que antes, dependiendo de cmo sean los datos
puede ser necesario ajustarlos.
2 Tratamiento de imagenes y aplicaciones.nb
En el siguiente ejemplo se representar una imagen en color usando la funcin "RGBColor". Cada celda o
pixel tiene ahora tres datos comprendidos entre 0 y 1 que corresponden a los valores de rojo, verde y azul
respectivamente (se usara el modelo de color RGB). Al igual que antes, dependiendo de cmo sean los datos
puede ser necesario ajustarlos.
Clear[imagen]
imagen
Table[{Random[Integer, {1, 255}], Random[Integer, {1, 255}],
Random[Integer, {1, 255}]}, {i, 2}, {j, 8}];
imagen // MatrixForm;
Show[Graphics[
Raster[imagen/ Max[imagen], ColorFunction RGBColor],
Frame True, ImageSize 30{8, 2}]]
0 2 4 6 8
0.0
0.5
1.0
1.5
2.0
Imagen a escala de grises (.jpg)
El comando Import["archivo.extension"] importa datos de un archivo cuyo formato se supone que corresponde
al indicado por la extensin y los convierte en una expresin de Mathematica. Este comando trabaja con
archivos de datos, de imgenes y sonidos.
Antes de usarlo es conveniente establecer el directorio donde este
las imagenes
SetDirectory["C:/Mathematica/"];
Ahora se podr importar directamente cualquier imagen que est en este directorio.
usal Import["usal.jpg"]
Casi siempre que se usa Import[ ] con un archivo de imagen se obtiene un objeto grfico de la forma Image[ ].
Ahora se usar InputForm[ ] para ver como entiende el Mathematica el archivo importado, como se obtiene
una matriz 200200 y cuyo tamao es grande se deber evitar que Mathematica lo escriba en pantalla. Para
ello se usar el comando Shallow para simplificar la salida
Shallow[InputForm[usal]]
Image 200 , "Byte", Rule 2 ,
Rule 2 , Rule 2 , Rule 2
Esas reglas (Rule[ ]) especifican determinadas opciones, y de hecho, se pueden ver:
Position[usal, Rule]
3, 0, 4, 0, 5, 0, 6, 0
Tratamiento de imagenes y aplicaciones.nb 3
usal[[3]]( especifica la opcin ColorSpace )
ColorSpace Grayscale
Los datos que constituyen esta imagen estn en ImageData[usal]. Se trata de una matriz de 200 filas y 200
columnas (pixeles que tiene la imagen) y como es un archivo grande y se debe evitar que Mathematica lo
escriba en pantalla. El nmero de filas indica el alto de la imagen y el nmero de columnas indica el ancho de
la imagen medidos en pixels.
datosusal ImageData[usal] ;
Dimensions[datosusal]
200, 200
Se obtiene el valor de los 5 primeros pixels
ImageData[usal][[1, 1 ;; 5]] ;
Los valores de la matriz son nmeros comprendidos entre 0 y 1.
{{Min[datosusal], Max[datosusal]}, Head[datosusal[[120, 150]]]}
(real significa que son numeros
reales comprendidos entre 0 y 1)
0., 1., Real
El siguiente comando representa lneas de contorno.
usalcontorno
ListContourPlot[datosusal, ContourShading False,
Contours 4, Frame False, ImageSize {200, 200}]
Out[25]=
El comando Export["archivo.extension", "expresion"] exporta datos a un archivo y los convierte a un formato
correspondiente a la extensin del archivo "extension". Con este comando se puede exportar datos, imgenes o
sonidos en una gran variedad de formatos. Algunos formatos tienen opciones de conversin especficas.
Export["usalcontorno.jpg", usalcontorno];
( al ejecutar este comando se
guarda el archivo en formato "jpg" )
Imagen en color
Ahora, se importar una imagen en color
4 Tratamiento de imagenes y aplicaciones.nb
campus Import["campus.jpg"]
Los datos de campus estn en ImageData[campus].
datoscampus ImageData[campus] ;
Dimensions[datoscampus]
datoscampus[[7, 5]]
( el elemento que ocupa la fila 7 columna 5 )
231, 495, 3
0.745098, 0.772549, 0.811765
Se observa que las dimensiones indican que ImageData[campus] es una matriz de 231 filas y 495 columnas
cuyos elementos son vectores de 3 elementos que corresponden a los datos de rojo, verde y azul que represen-
tan cada pixel.
Histogramas
Los siguientes comandos sirven para obtener el histograma de una imagen monocromtica (nmero de veces
que se repite cada valor de luminosidad entre 0 y 255).
Codifica[x_List] : {First[], Length[]} & / Split[Sort[x]];
Histograma[img_List] :
Module[{temp, lista}, lista Flatten[img];
temp Codifica[lista];
faltan Complement[Range[0, 255], temp[[All, 1]]];
If[Length[faltan] 0, Sort[Join[temp,
Transpose[{faltan, Table[0, {Length[faltan]}]}]]][[
All, 2]], temp[[All, 2]]]];
El comando Histograma[Lista], donde se supone que "Lista" es una matriz cuyos elementos son nmeros
enteros del 0 al 255, proporciona como salida una lista con 256 elementos en la que el elemento que ocupa el
lugar n-simo es el nmero de veces que el valor n-1 aparece en "Lista".
histousal Histograma[datosusal];
Se puede hacer los histogramas de rojos, verdes y azules de la imagen anterior "campus" y representarlos
juntos grficamente.
Tratamiento de imagenes y aplicaciones.nb 5
histocampusred Histograma[datoscampusAll, All, 1]];
histocampusgreen Histograma[datoscampusAll, All, 2]];
histocampusblue Histograma[datoscampusAll, All, 3]];
Show[{ListPlot[histocampusred, PlotStyle RGBColor[1, 0, 0]],
ListPlot[histocampusgreen, PlotStyle RGBColor[0, 1, 0]],
ListPlot[histocampusblue, PlotStyle RGBColor[0, 0, 1]]},
ImageSize 0.5 {288, 178}]
100 200 300 400 500
200
400
600
800
1000
Aplicaciones
Encriptacion de una imagen digital
La palabra criptografa, que viene del griego y literalmente significa "escritura oculta", es el arte o ciencia de
cifrar y descifrar informacin mediante tcnicas especiales y se empleada frecuentemente para permitir un
intercambio de mensajes que slo puedan ser ledos por personas a las que van dirigidos y que poseen los
medios para descifrarlos. Para encriptar una imagen digital, solo se necesita operar con matrices, en este
ejemplo se usar dos matrices: la matriz de la propia imagen y una matriz de paso, que se genera mediante un
algoritmo. Este algoritmo funcionar con unos parametros iniciales que a su vez sera nuestro codigo de cifrado.
biblio Import["biblio.jpg"]
datosbiblio ImageData[biblio];
{Head[datosbiblio], Dimensions[datosbiblio]}
List, 235, 235
Es una matriz cuadrada de 235 filas y 235 columnas, por lo que habr que crear una matriz de paso que cumpla
el tamao, para ms tarde hacer el producto entre ellas. Para ello se crear una matriz al azar:
matrizdepaso
Table[{Random[Real, {255 000, 255 000}]}, {i, 235}, {j, 235}];
Una vez creada la matriz de paso se realizar la operacion y se obtedr una nueva matriz que al representarla
dar la imagen ya encriptada
imagenencriptados matrizdepasodatosbiblio;
Se puede observar como la imagen a sido modificada, y sin la matriz de paso anterior no se podr obtener la
imagen inicial
6 Tratamiento de imagenes y aplicaciones.nb
Image[imagenencriptados/ Max[imagenencriptados]]
Recuperacion de una imagen digital borosa
El tratamiento de imgenes se ocupa muy especialmente de la eliminacin de "ruido". El trmino "ruido"
indica cualquier circunstacia que disminuya la calidad de una imagen. Puede ser: falta de contraste, un rango
dinmico pobre o tambien falta de nitidez y definicin, lo que se traduce en una imagen borrosa. Un motivo
que da lugar a imgenes borrosas es cuando el fotgrafo no tiene buen pulso y mueve la cmara en el momento
de tomar la foto. Realmente lo que ocurre en este caso es que cada pixel en la imagen se est promediando con
sus vecinos. Matemticamente, se est haciendo una cierta convolucin. A veces es posible deshacer dicha
convolucin y mejorar considerablemente la nitidez de la imagen.
fotoborosa Import["fotoborosa.dat"];
Se trata de un archivo de imagen constituido por una matriz.
{Head[fotoborosa], Dimensions[fotoborosa]}
List, 128, 256
Image[fotoborosa]
Se trata de una foto borrosa del Campus Viriato de Zamora. Se sabe que el fotgrafo, al tomar la foto, movo la
cmara horizontalmente (pero no verticalmente) de forma que cada pixel sali corrido transformndose en una
lnea horizontal de longitud igual a 25 pixels. Matemticamente, esto quiere decir que cada fila de la matriz de
"fotoborosa" es el resultado de convolucionar cclicamente la correspondiente fila de la matriz de "fotobuena"
con la siguiente seal.
nucleo Table[If[12 m 12, 1/25., 0.0], {m, 128, 127}];
La lista "nucleo" tiene 256 elementos (igual que cada fila de la matriz de la imagen) y es simtrica respecto al
lugar
256
2
1 129.
La operacin de convolucin cclica de una fila de la matriz de "fotobuena" con la lista "nucleo" lo que hace es
calcular promedios. Concretamente, la convolucin de la fila n-sima, "fotobuena[[n]]", con "nucleo" es una
lista con 256 elementos cuyo elemento m-simo es igual al promedio de los 25 elementos consecutivos de
dicha fila empezando en el lugar 116+m:
fotomovidan, m
jm
m24
1
25
fotobuenan, 116 j
Donde se entiende que si 116+j es mayor que 256 entonces debe reducirse mdulo 256, es decir, se sustituye
por el resto de su divisin 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 "deconvolucin". Hay que tener en
cuenta que para cada fila se tiene que:
Tratamiento de imagenes y aplicaciones.nb 7
fotobuenan InversaDft
Dftfotoborosan
Dftnucleo

En trminos de matrices esto es lo que se hace en la siguiente celda.
fotobuena
Re[Map[InverseFourier, Chop[Map[Fourier, fotoborosa]]/
Chop[Table[Fourier[nucleo], {128}]]]] // Chop;
Se puede visualizar la foto del Campus Viriato de Zamora
Image[fotobuena/ Max[fotobuena]]
8 Tratamiento de imagenes y aplicaciones.nb

Вам также может понравиться