Está en la página 1de 4

Con los ejemplos vistos previamente se aprendió la manera de usar ciclos para recorrer una

imagen. Ahora se usará ese recorrido para mover una ventana de inspección por la imagen.

Supongamos que tomamos una imagen, la convertimos en una imagen binaria y deseamos
recorrer una ventana de inspección para extraer los patrones que aparecen en ella. Si
amplificamos una región para ver la manera de hacer esto observaríamos que los pixeles
presentan diferentes ordenamientos, se apreciaría algo parecido a la siguiente figura.

Si ahora definimos una ventana de observación de 9 pixeles cuadrados (3x3 pixeles) , codificamos
los patrones observados como números binarios, al colocarnos en un punto (pixel) particular en la
imagen observaríamos algo como lo mostrado en la figura siguiente:

Si se observa cada pixel como si fuera un


bit se puede observar el siguiente
patrón.

1 0 0

0 1 0

0 1 1

Si ahora se usa ese patrón observado


para construir un número binario, se
puede leer de izquierda a derecha y de
arriba abajo para construir una cadena
binaria que describe un número binario
asociado al patrón observado.

1 0 0 0 1 0 0 1 1 = 275 10
Es importante notar que si la posición de referencia de la ventana de inspección es el pixel central,
entonces existirá una serie de puntos que no son alcanzables por la ventana debido a que si se
llegan a usar se codificarán patrones incompletos, es decir, menores a 9 bits. Como se aprecia con
el recuadro rojo, que al estar en una esquina de la imagen solamente puede observar un patrón
descrito por 4 bits. Así que se debe tener cuidado con el recorrido que puede realizar la ventana
de inspección. En el caso particular que se está tratando, el área de inspección alcanzable por la
ventana está marcado por el recuadro anaranjado que se muestra en la figura siguiente:

Así, si una imagen está descrita por 30 renglones y 20 columnas, puede observarse que puede
extraer (30-2) x (20 - 2) = 28 x18 = 504 patrones, en lugar de 600 patrones tentativos,
representando casi un 17% de posible información faltante del total de la imagen. Sin embargo, si
consideramos ahora una imagen de 100 x 100 pixeles se tendrán 9 604 patrones de 10 000
patrones posibles, lo que representa una pérdida cercana apenas al 4% debida a patrones
incompletos. El caso particular mostrado en la última figura muestra que el total de patrones que
pueden extraerse en esa región son 25.

Como observación acerca del recorrido de la ventana de inspección sobre la imagen, de la figura
anterior puede observarse que los índices que marcarán el recorrido están dados por:

Renglón de inicio = segundo elemento del renglón.

Renglón de término = penúltimo elemento del renglón.

Columna de inicio = segundo elemento de la columna.

Columna de finalización = penúltimo elemento de la columna.

Así, para recorrer por completo una imagen de N renglones por M columnas se recorrerán los
intervalos de [2, N-1]x[2xM-1]. Como en Python los índices de los arreglos inician en 0 en lugar de
1, el intervalo del recorrido de la ventana de inspección estará dado por [1, N-2]x[1xM-2].
Antes de pasar a la implementación en software, se procederá a extraer algunos patrones en
forma manual. Para ello nos apoyaremos en la siguiente figura, que es la imagen almacenada en el
archivo “MuestraTextura.png”.

En la siguiente tabla se muestran algunos patrones binarios de la imagen “MuestraTextura.png”


pertenecientes a las posiciones indicadas. Se usa la convención de índices matriciales requerida
por Python. La imagen mencionada y los valores mostrados en la tabla se usarán para validar el
algoritmo de extracción de patrones que será implementado.

Renglón Columna Patrón Binario Código Decimal


1 1 011 100 101 229
2 110 001 010 394
3 101 010 101 341
2 1 100 101 011 299
5 001 101 110 110
5 5 101 001 110 334

En forma análoga a lo visto previamente

Un histograma de patrones CCR se obtiene realizando el conteo de la ocurrencia de cada uno de


los patrones.

Si se normaliza el histograma se tiene ahora una distribución de probabilidad de ocurrencia para


cada patrón. Tentativamente esta distribución de probabilidad de patrones puede usarse como
característica de la imagen inspeccionada. Entonces ya se tiene una representación matemática de
la imagen, que es una distribución de probabilidad de ocurrencia de patrones presentes en la
imagen y que en este caso particular también es un vector de probabilidades de 512
componentes, o 512 dimensiones.
Extracción de patrones LBP y construcción de Vectores LBP

Ahora se procederá a realizar la extracción del vector LBP de la imagen que se ha estado usando
en todo el documento, es importante mencionar que, aunque la imagen en sí ya está en blanco y
negro absolutos, el proceso de extracción de patrones es aplicable a toda imagen en escala de
grises. La siguiente es una figura conocida a la que le aplicaremos la extracción de patrones LBP
considerando que para que sean tomados en cuenta, los vecinos deben superar el valor de
intensidad del pixel central.

En la siguiente tabla se muestran algunos patrones binarios de la imagen “MuestraTextura.png”


pertenecientes a las posiciones indicadas. Los valores mostrados en la tabla se usarán para validar
el algoritmo de extracción de patrones implementado.

Renglón Columna Patrón Binario Código Decimal


1 1 011 1 0 101 117
2 110 0 1 010 202
3 000 0 0 000 0
2 1 100 1 1 011 155
5 001 1 1 110 62
5 5 101 0 1 110 174

El resto del proceso de generación del vector LBP es semejante al proceso de extracción del vector
CCR.

- Se construye un histograma de ocurrencia de patrones.


- Se normaliza el histograma para convertirlo en una distribución de probabilidad que
puede ser tratado como un vector, en este caso de 256 componentes.

Ahora que ya se cuenta con herramientas que permiten convertir una imagen en un vector se
puede usar esta representación para efectos de comparación de imágenes. Estas representaciones
captan información estadística de las estructuras encontradas en la imagen mediante la ventana
de inspección.

También podría gustarte