Español
Blog de Nibcode Solutions
 

El álgebra lineal y el procesamiento digital de imágenes. Parte I.

23-09-2016
|
Anibal
|
0
image-processing-I.png

Cuando pensamos en el álgebra lineal, la primera idea que nos viene a la mente es un sistema de ecuaciones lineales que necesita ser resuelto, o su variante gráfica más sencilla, un plano cartesiano con dos rectas, para hallar el punto de intersección; pero lo que probablemente muchos no saben es que herramientas como Photoshop o librerías de funciones como OpenGL o DirectX hacen un amplio uso del álgebra lineal para muchas de sus funcionalidades.

En esta serie de artículos abordaremos algunos conceptos básicos de la aplicación del álgebra lineal en el Procesamiento de Imágenes. En el primer artículo nos centraremos en sus aplicaciones y cómo representar una imagen como una matriz, en el segundo y tercero vamos a exponer algunas de las operaciones con matrices en una imagen, y en el último mostraremos algunos ejemplos prácticos en JavaScript.

La aplicación del álgebra lineal en el procesamiento de imágenes

El procesamiento de imágenes se puede definir como el uso de operaciones matemáticas aplicadas a una imagen con el objetivo de mejorarla en algún sentido u obtener parámetros de la misma. Con la introducción de los ordenadores, el procesamiento se realiza por medio de algoritmos gráficos a las imágenes digitales, las cuales se obtienen mediante un proceso de digitalización o directamente utilizando cualquier dispositivo digital. A este procesamiento se le llama Procesamiento Digital de Imágenes.

El procesamiento digital de imágenes no se limita solamente a retocar o cambiar el tamaño de las imágenes capturadas con la cámara; su uso se extiende a muchos campos de la ciencia y la tecnología. Algunos de los campos más importantes son: la medicina, la detección remota, la transmisión y codificación de datos, la robótica, la visión artificial, el reconocimiento de patrones, la industria cinematográfica, procesamiento de imágenes obtenidas de microscopios y la restauración y enfocado de imágenes.

Ejemplos del procesamiento digital de imágenes usando herramientas del álgebra lineal son: traslación, rotación, sesgado, escalado, uso de las curvas de Bézier, reflexión y ajustes de canal, brillo y contraste. Otras operaciones más complejas como filtros, requieren la combinación del álgebra lineal con otras herramientas matemáticas.

¿Cómo puede una imagen ser representada como una matriz?

Vamos a considerar la siguiente imagen accept y su variante en blanco y negro accept black and white.

Si hacemos un acercamiento a la imagen en blanco y negro, obtenemos:

accept

Nótese que la imagen puede ser representada como una rejilla de 16x16 pequeños elementos, conocidos como píxeles (el elemento gráfico más pequeño de una imagen, que puede tomar solamente un color a la vez). Si podemos asignar números a cada color, entonces, la cuadrícula de píxeles se puede representar como una matriz numérica.

Si en la imagen anterior, asignamos 1 al color blanco, y 0 al negro, entonces, la imagen se puede representar como una matriz de 16 x 16, cuyos elementos son los números 0 y 1.

    ┌                                 ┐
    │ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 │
    │ 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 │
    │ 1 1 1 1 0 1 1 1 1 1 0 0 1 1 1 1 │
    │ 1 1 1 0 1 0 0 0 0 0 0 0 0 1 1 1 │
    │ 1 1 0 1 0 0 0 0 0 0 0 0 0 0 1 1 │
    │ 1 0 1 0 0 0 0 0 0 0 0 1 0 0 0 1 │
    │ 1 0 1 0 0 0 0 0 0 0 1 1 0 0 0 1 │
    │ 1 0 1 0 1 1 0 0 0 1 1 1 0 0 0 1 │
    │ 1 0 1 0 1 1 1 0 1 1 1 0 0 0 0 1 │
    │ 1 0 1 0 0 1 1 1 1 1 0 0 0 0 0 1 │
    │ 1 0 0 0 0 0 1 1 1 0 0 0 0 0 0 1 │
    │ 1 1 0 0 0 0 0 0 0 0 0 0 0 0 1 1 │
    │ 1 1 1 0 0 0 0 0 0 0 0 0 0 1 1 1 │
    │ 1 1 1 1 0 0 0 0 0 0 0 0 1 1 1 1 │
    │ 1 1 1 1 1 0 0 0 0 0 0 1 1 1 1 1 │
    │ 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 │
    └                                 ┘

Utilizando el mismo procedimiento, también podemos representar la imagen en escala de grises como matrices, pero en este caso, hay más de dos números. Para este propósito la mayoría de los ficheros digitales usan números entre 0 (negro) y 255 (blanco) como una representación de la intensidad.

accept

La representación matricial de imágenes multicolor depende del sistema de color utilizado por el programa que está procesando la imagen. Para propósitos didácticos vamos a utilizar el RGB (el más popular), donde cada píxel especifica la cantidad de rojo (R), verde (G) y azul (B), y cada color puede variar de 0 a 255. Por lo tanto, en el RGB, un píxel puede ser representado como un vector tridimensional (r, g, b) donde r, g y b son números enteros de 0 a 255.

accept

Varios programas almacenan el vector tridimensional como un solo número entero, utilizando la siguiente función:

v = f(r, g, b) = r*65536 + g*256 + b

Note que 65536 = 2562

El procedimiento opuesto (obtener el vector de colores a partir del valor entero) se puede hacer usando las siguientes fórmulas:

r = v / 65536

g = (v % 65536) / 256

b = v % 256

donde % es un operador para obtener el resto de la división entera y / es el operador de la división entera.

Veamos un ejemplo. El color
se representa como el vector (131, 197, 29), y como 8.635.677 cuando se utiliza la función que obtiene un único valor entero.

Otros programas almacenan los vectores como valores hexadecimales, concatenando los tres valores en notación hexadecimal. Esta es la forma en que los colores se almacenan en las páginas web. El ejemplo anterior se representa como 83C51D en esta notación.

En el próximo artículo vamos a mostrar algunas operaciones con matrices aplicadas a la representación matricial de las imágenes, y cómo estas operaciones afectan la imagen original.

Quizás te pueda interesar

Linear Algebra Decoded
Versión: 1.26
Precio: $22.95 USD  (Versión completa - Comprar Ahora)
Versión descargable: Versión demo - Funcionalidades limitadas
Sistema operativo: Windows
Tamaño: 3.2 MB (3270 KB)
descargar
comprar
paypal

Aún no hay comentarios

Se el primero en comentar
Tu nombre 
E-mail (no será publicado) 
Sitio web
Tu comentario 
© Nibcode Solutions. Todos los derechos reservados.