Procesado digital de imágenes. Software

Por Arturo Olivares

La palabra software es un vocablo ingles de dos palabras "soft" suave, blando y "ware" componente, producto. Obviamente esta palabra se refiere a todo lo relacionado con programas de computación en todos los lenguajes que existen, y de toda las consecuencias que se han derivado de estos lenguajes. En pocas palabras el "mundo virtual".

El sofrware es la parte importante entre la comunicación hombre y máquina "computadoras. Hoy en día lo que conocemos como software, ha evolucionado y ha formado estructuras de lenguajes muy complejos, las cuales requieren de mucha memoria, todo ello con el fin de hacer más amigable los ambientes de comunicación entre el usuario y la computadora. El área de procesado digital de imágenes en los países avanzados a progresado enormemente, el cual existe compañías especializadas que trabajan en la investigación "Nasa ", para filtraje y restauración de imágenes de satélites en misiones espaciales o locales. En la industria militar en el estudio de análisis de imágenes para detectar movimientos y macros amplificación de imágenes con características muy particulares cambios de esta etc., la Industria del entretenimiento "cine", y por último en la industria de las comunicaciones con el advenimiento de la "Internet".

En referencia a este último es uno de las áreas con mas desarrollo y donde más dinero se emplea en la investigación de nuevos programas "software" para efectos especiales de transporte de información, tanto de vídeo como de audio.

El futuro de las comunicaciones se ve perfilándose por la super carretera de la información, tanto las computadoras como los teléfonos como los televisores se fusionaran en un solo producto de gran potencial.

El software con todos estos adelantos evoluciona hacia lenguajes mas poderosos de gran capacidad de manipulación de datos y de gran velocidad, esto es que el software no sea un cuello de botella que limite los tiempos de proceso, se buscan y se diseñan nuevas arquitecturas tanto de hardware como software para optimizar procesos y hacer más eficiente el desempeño de las nuevas tecnologías.

En la disciplina de procesado digital de imágenes en México se desarrolla software con lenguaje tradicionales como C++, Borlan C, Visual C, Pascal, Fortran etc. Estos lenguajes permiten a los investigadores desarrollar técnicas de procesado y filtrado pero con fines académicos y no fines comerciales. Debido a que estamos lejos de competir comercialmente con las grandes compañías de software del mundo, tal vez sea posible participar en un paquete de desplegado y tratamiento de imágenes para una compañía de alta competitividad.

En el presente artículo hacemos un ejemplo de software, en este caso para manipular imágenes para el efecto de estereovisión.

ANÁLISIS Y MANIPULACIÓN DE IMÁGENES PARA ESTEREOVISIÓN

Las imágenes son capturadas a colores mediante una cámara digital o cámara de vídeo, las cuales son digitalizadas y procesadas en la computadora en un formato BMP
( Bit Maps Pictures ), con 256 paletas de color en los mapas de bits. Usando el software MathcadÒ 7, y empleando las rutinas para exportar y traer imágenes o gráficas como las siguientes:

La función READBMP(file) Crea un archivo en una representación matricial en niveles de gris, con con 256 paletas de color en los mapas de bits , a partir de una imagen a color con formato BMP. El valor del elemento de matriz corresponde el sombreado del nivel de gris asociado al pixel correspondiente. Cada elemento es un número entero entre 0 (oscuro) y 255 (blanco).

La función READRGB(file) Crea un archivo en una representación matricial, el cual contiene información de los colores, representados en valores apropiados de rojo, verde y azul. Esta matriz consiste de tres submatrices, cada una con el mismo número de renglones y columnas. Tres elementos de matriz, corresponden a un solo elemento por cada pixel de la imagen. Cada elemento es un número entreo entre 0 y 255. Los tres elementos correspondientes, siempre se toman juntos para establecer el color del pixel.

Si tenemos un archivo con una imagen a color en formato BMP , ejemplo cara.bmp la función antes descritas se emplean de la manera siguiente:

Se asigna la dirección y ubicación del archivo, mediante una variable, ejemplo:

A =c/imágenes/flor.bmp

Y se asigna a la función de interés a una variable o palabra, ejemplo:

Gris=READBMP(A)
Color=READRGB(A)

A continuación se determinan los reglones por "r" y columnas "c" de la matriz Color:

r=rows(Color)-1

Después se separan las tres submatrices, que contienen la información de los colores rojo, verde y azul para poder manipularlos a nuestro interés.

rojo=submatrix(Color,0,r,0,c-1)
verde=submatrix(Color,0,r,c,2*c-1)
azul=submatrix(Color,0,r,2*c,3*c-1)

Estos tres archivos por separado se representan en niveles de gris de 0 a 255 valores, ver Fig.1a, con estos 3 archivos es posible construir una imagen a colores Fig.1b, de la forma:

arba
Fig.(1a) separación en niveles de gris de una escena en color

(rojo, verde y azul)
Fig.(1b) imagen con sus respectivas paletas de color

ESTEREOVISIÓN Y EL PUNTO DE ACOMODACIÓN

Para lograr el fenómeno de estereovisión es necesario tener dos imágenes planas a colores o en niveles de gris con una diferencia angular entre cada toma, esto solo se logra para escenas de objetos en 3D. Como se puede observar la primera toma de la escena corresponderá a la imagen plana que observará el ojo derecho Fig.(2a), y la segunda toma corresponde a la imagen plana para el ojo izquierdo Fig.(2b). Un punto importante a considerar es que las tomas de ambas imágenes tengan un punto de acomodación ( cuando los dos ojos coinciden en el mismo punto de observación) de referencia. En nuestro caso corresponde a la flor central.

br,bg,bb cr, cg, cb
fig(2a)imagen para el ojo derecho
fig (2b)imagen para el ojo izquierdo

El punto de acomodación de referencia es importante por que de ello depende el efecto de profundidad a observar. Se presentan tres casos: Si las escenas se toman con el punto de acomodación sobre el objeto mas cercano a la cámara fotográfica. Se observará un efecto de profundidad a partir del plano donde se ubican las escenas.Cuando el punto de acomodación se ubica en un plano intermedio entre el objeto mas cercano a la cámara fotográfica y el objeto más alejado de la cámara fotográfica. En este caso se ven imágenes que sobresalen del plano donde se ubican las escenas e imágenes atrás de este plano. En el caso cuando el punto de acomodación se ubica al objeto más alejado de la cámara fotográfica. La observación corresponde a imágenes que sobresalen del plano donde se ubican las escenas.

INTERPOLACIÓN E INTERCALACIÓN DE LAS IMÁGENES:

La escénica de este trabajo, corresponde a la técnica de intercalación de imágenes, las cuales se mapea una escena en una representación de columnas pares (para el ojo derecho) y la otra escena a las columnas impares (para el ojo izquierdo). La separación de cada imagen para cada ojo, se logra mediante el efecto de rejillas de polarizadores o elementos polarizantes los cuales generan por cada elemento de la rejilla estados perpendiculares de polarización. En esta técnica las escenas al ser representadas en una serie de columnas pares o imapres se deforman, debido a que el área física de la escena se expande en un factor de dos en una dirección. Por este motivo es necesario una interpolación de los renglones, para incrementar el número de elementos de las columnas. Esta interpolación puede ser simplemente por: replica de valores, promedio, splines cúbicos etc. . Estas interpolaciones se aplican a cada archivo de niveles de gris que representan los colores para cada escena.

Después de obtener las submatrices, rojo, verde y azul, es necesario aplicar la interpolación a cada submatriz . En el presente trabajo se aplicó el criterio de replicasión de pixeles dado su simplicidad.

En principio para obtener los índices de la submatriz aplicando la función Gris obtenemos los subíndices de la submatriz roja, el cual tiene el mismo número de elementos que las submatrices verde y azul. Por tanto,

i =0...rows(rojo)-1 j=0...cols(rojo)-1

Creando tres matrices subindizadas de la forma:

rrj = rojoij, vij = verdeij, aij = azulij

En la interpolación de renglones, para incrementar el número de elementos de las columnas, esto es; subíndice "i" tenemos que manejar un subíndice comodín, que corresponde al doble de elementos que el subindices "i", esto es "ii"Ó:

ii=2*i ii=0...2*row(rojo)-1

Se crea entonces seis matrices con subíndices pares e impares, a partir de las submatrices rojo, verde y azul respectivamente.

ir1 2*i,j = r i,j - - - - - - ir2 2*i+1,j = r i,j

iv12*i,j = v i,j - - - - - - iv2 2*i+1,j = v i,j

ia1 2*i,j = a i,j -- - - - ia2 2*i+1,j = a i,j

Después se reagrupan cada matriz con los subindices pares e impares, para formar una matriz con el doble de elementos en sus columnas, para cada color, obteniéndose tres matrices de la forma:

jr ii,j = if [( ii - - floor ( ii )} - = 0, ir1 ii,j , ir2 ii,j ]
_______-_________ - - - - - -___
- 2- - - ----- - -2- - - --- - - - - - -

iv ii,j = if [( ii - - floor ( ii )} - = 0, iv1 ii,j , iv2 ii,j ]
_____________________________- - - - - - -
_____________?2__________2__________________-- - - - - - -

ja ii,j = if [( ii- - floor ( ii )} - = 0, ia1 ii,j , ia2 ii,j ]
________________________
----2------------2-------------------

La función floor le quita las partes fraccionarias de la expresión (ii/2). Las matrices ir, iv, ia, son ahora una triada de matrices de niveles de gris que al juntarse forman una matriz a color pero con la imagen incrementada en sus valores a lo largo de las columnas. como se observa en la Fig.(3a,b).

fig. (vr, vg vb)

ESPACIAMIENTO ENTRE COLUMNAS E INTERCALACIÓN

Las submatrices ir, iv,ia, por separado se expanderan con el criterio, de mapear cada matriz a una matriz con el doble de terminos en el subíndice ÒjÓ , creando un subíndice comodin ÒjjÓ para espaciar las columnas de cada submatriz.

         &

jj = 2* j - - - - - - - - - jj = 0....2* cols(rojo) -1

Se crea entonces seis matrices con subíndices pares e impares, donde estos últimos son iguales a cero, para tener en las columnas pares representada la imagen a color a partir de las submatrices interpoladas rojo ÒirÓ, verde ÒivÓy azul ÒiaÓ respectivamente:

jr1 ii,2* j = ir ii,j - - - - - - - - - jr2 2*i+1,j = 0

jv1 ii,2* j = iv ii,j - - - - - - - - - jv2 2*i+1,j = 0

ja1 ii,2* j = ia ii,j - - - - - - - - ja2 2*i+1,j = 0

Después se reagrupan cada matriz con los subíndices pares e impares, para formar una matriz con el doble de elementos en sus renglones , teniendo como consecuencia un espaciamiento entre las columnas, para cada color, obteniéndose tres matrices de la forma:

jr ii,jj = if [( jj - - floor ( jj )} - = 0, ir1 ii,j , ir2 ii,j ]
_____________ - - - - - -___
- - - - - - - ----2 - - - - - - - -2

jv ii,jj = if [( jj - - floor ( jj )} - = 0, iv1 ii,j , iv2 ii,j ]
_____________ - - - - - -___
- - - - - - - ----2 - - - - - - - -2

jf ii,jj = if [( jj - - floor ( jj )} - = 0, ia1 ii,j , ia2 ii,j ]
_____________ - - - - - -___
- - - - - - - ----2 - - - - - - - -2

Las matrices jr, jv, ja, son ahora una triada de matrices de niveles de gris que al juntarse forman una matriz a color pero con la imagen incrementada en sus valores a lo largo de los renglones, provocando que exista un intercalación entre las columnas pares y las impares . como se observa en la Fig.(4).