Você está na página 1de 23

Álgebra Lineal en el seguimiento de color en

imágenes.

Freddy Panchi 1
1
Universidad de las Fuerzas Armadas Espe, Latacunga-Ecuador
2
Email: fspanchi@espe.edu.ec

Abstract. En este proyecto, se podrá observar como las matrices influyen en el


procesamiento de imágenes, esto se podrá ver mediante una programación en
Matlab, el cual nos permitirá, aplicar ciertos cambios a la imagen obtenida, para que
el programa realice un seguimiento de un objeto presente en la imagen, estos
cambios que se realizara se harán mediante procesos algebraicos, estos serán la
binarización de la imagen, convertir a escala de grises, entre otros.

1. Introduction
Resulta indispensable conocer el proceso de generación y representación de una imagen en el
ordenador. Dependiendo de la complejidad de las distintas aplicaciones existirán mayor o menor
número de subprocesos dentro de 2 fundamentales: el proceso de adquisición y el proceso de
análisis de la imagen. La calidad de la imagen obtenida depende esencialmente de las
características de la cámara y del ordenador, [1] tres pasos muy importantes involucrados
durante el análisis de video involucra: detección de objetos en movimiento que nos interesan,
seguimiento de dicho objeto de cada cuadro a otro y análisis de seguimiento de objetos para
reconocer y distinguir su comportamiento. [2]

Las imágenes están representadas en un ordenador mediante matrices. El formato empleado es


RGB (Red, Green, Blue). RGB se refiere a un modelo cromático que consiste en representar
distintos colores a partir de la mezcla de estos tres colores primarios. [4] Los números que
forman cada matriz representan la intensidad de un color en RGB.

Tener una manera de representar imágenes como matrices de números es crucial para procesar
imágenes usando técnicas matemáticas. [5]
Como ya se explicó al inicio, las imágenes en color se pueden representar utilizando varios
formatos; el formato que se utiliza es el RGB, las imágenes se almacenan mediante tres
componentes, que representan sus intensidades en las escalas de rojo, verde y azul. Un color
rojo puro está representado por los valores de intensidad (1, 0, 0), mientras que, por ejemplo, el
amarillo es representado por (1, 1, 0) y el azul por (0, 0, 1); Se pueden obtener otros colores con
diferentes opciones de intensidades. Por lo tanto, para representar una imagen en color,
necesitamos tres valores por píxel. [5]

El tono de color se encuentra en un rango de 0 a 255, valores que toman los elementos de la
matriz de color, estos valores representan un tono de color dentro de la matriz, donde 0
representa negro y 255 representa el blanco, esto se da en forma binaria es decir 0 o 255. [5] En
la imagen cada píxel tiene un color particular; ese color se describe por la cantidad de rojo,
verde y azul que contiene. Si cada uno de estos componentes tiene un rango de 0 a 255, esto da
un total de 16676 colores diferentes posibles en la imagen. Las imagenes pueden ser
consideradas como una "pila" de tres matrices; representando los valores de rojo, verde y azul
para cada píxel. Esto significa que por cada píxel hay tres valores. [6]

La imagen que obtenemos en tiempo real, se la va a cambiar a una imagen binaria en donde
dicha imagen tendrá ahora cada píxel en blanco y negro. Como solo hay dos valores posibles
para cada píxel, solo necesitamos un bit por píxel. Tales imágenes pueden ser eficientes en
términos de almacenamiento. [6]
Las imágenes también se las trabajara en escala de grises, en donde cada píxel es un tono de gris,
normalmente de 0 (negro) a 255 (blanco). Este rango significa que cada píxel puede
representarse mediante ocho bits, o exactamente un byte. Este es un rango muy natural para el
manejo de archivos de imagen. [6]

En este trabajo se analizará la influencia del álgebra lineal en el procesamiento de imágenes,


específicamente en la detección y seguimiento del color, se tomará como eje principal el uso de
las matrices.

2. Análisis matemático
Técnica para la binarización: el tramado (o Dithering). Para el cálculo de los umbrales y el
tramado existen numerosos algoritmos dos de ellos son el:

2.1 Tramado de medio tono de Jarvis, Judice y Ninke


Este tipo de interpolación distribuye los errores entre los 12 píxeles adyacentes en lugar de los 4
cercanos que utiliza FloydSteinberg. Esto es una ventaja y a la vez un inconveniente. Por un
lado el tramado produce menos artefactos visuales pero, por otro, el mismo es más grueso. Sin
embargo, el verdadero problema se hace patente en la gestión de recursos de memoria y tiempo
de proceso. Al utilizar un operador 48 y el hecho de que el filtro debe analizar el contingente del
error en 12 píxeles cercanos (el triple que con la algoritmia de FloydSteinberg), obliga al
aplicativo a gestionar dos conjuntos de errores de recepción de datos, por todo ello el proceso se
ralentiza.[7]

Figura1: Formula para el tramado Jarvis, Judice y Ninke, donde se observa el divisor 48
y la adición de una fila, lo que hace más lenta la binarizacion de la imagen.
Produce un urdido mejor diseminado pero sutilmente más grueso. [7]

2.2Tramado de vibración ordenada


La idea de este filtro es similar a la técnica de umbralización y sustitución del píxel a un valor
binario dependiendo de su intensidad, pero en vez de utilizar un valor único local para toda la
matriz de píxeles usa un conjunto de valores. [7]

Figura 2: Matriz de valores para la tramitación del algoritmo de umbral de vibración


ordenada. Produce un tramado en la imagen parecido al causado por la técnica
de Bayer. [7]
3. Pruebas y resultados

Esta parte lo que se va a observar es el proceso que se lleva a cabo en el programa. Cabe aclarar
que se trabajara con una resolución de 160 x 120, esta será la dimensión de todas las matrices
que saldrán durante todo el proceso. Lo primero que se va a realizar es la asignación de
variables, por lo tanto, se va asignar la variable C al cuadro que se va analizar del video.

Figura3: Imagen original

A esa imagen se la convierte a RBG en escala de grises (0-255) con el código en Matlab
(rgb2gray). Este código lo que hace es convertir los valores RGB en valores de escala de
grises formando una suma ponderada de los componentes R, G Y B:
0.2989 * R + 0.5870 * G + 0.1140 * B

Figura 4: Imagen en escala de grises.

La imagen en escala de grises, en matriz..

Figura 5: Matriz perteneciente a la imagen en escala de grises.


Asignamos variables para los slider que se utilizara, en este caso rv, gv, bv y bw, se los asignara
para el canal rojo,verde, azul y para el canal blanco y negro respectivamente. Estos sliders se
utilizaran para seleccionar el objeto de preferencia en la imagen.

Se va a resaltar el canal de cada uno de los colores, rojo, verde y azul, esto se lo realiza restando
cada matriz en RGB menos la matriz en escala de grises, al resultado de este proceso le
asignaremos la variable orojo, overde y oazul. Este proceso nos servirá para visualizar con más
detalle cómo se vería el objeto que se seleccione en el momento de utilizar el programa. A
continuación, la selección de los objetos de cada color.
orojo = C(:,:,1)-Cgray
Figura 6: Imagen resaltando el canal rojo

Figura 7: Matriz perteneciente a la imagen que resalta el canal rojo

overde = C(:,:,2)-Cgray

Figura 8: Imagen resaltando el canal verde

Figura 9: Matriz perteneciente a la imagen que resalta el canal verde

oazul = C(:,:,3)-Cgray
Figura 10: Imagen resaltando el canal azul

Figura 11: Matriz perteneciente a la imagen que resalta el canal azul

Se va asignar nC a la variable C esto creara una matriz con las mismas dimensiones que la
imagen original C, esto servirá para seleccionar el color de interés. Este proceso se lo realiza
utilizando los sliders, es una forma más fácil para que el usuario seleccione el canal de su
preferencia. Como ya es de conocimiento las variables orojo, overde y oazul son los canale que
resaltan el color rojo, verde y azul, respectivamente. Cada una de estas variables serán
multiplicadas por el valor que se le asigne al slider, cabe recalcar que el slider va de 0 a 1.

nC(:,:,1)=rv.*orojo;

nC(:,:,2)=gv.*overde;

nC(:,:,3)=bv.*oazul;

Figura 12: Imagen perteneciente a los slider, que servirá


para cambiar el canal de preferencia, en este caso están
seleccionando el color rojo.

Como ejemplo, si queremos seleccionar el objeto rojo, tenemos que poner los slider de forma
que seleccione correctamente el color, para seleccionar el objeto rojo tenemos que mover el
slider al número 1 y el slider del color verde y azul en 0, el proceso que estaría haciendo seria el
siguiente:

nC(:,:,1)=1*255;

nC(:,:,2)=0*255;

nC(:,:,3)=0*255;
Figura 13: Imagen donde se encuentra seleccionado
el canal rojo.

Al multiplicar por 1 en el canal rojo y 0 en los canales azul y verde, lo que se está haciendo es
que el programa seleccione solo los valores que tengan una iluminación de 255 de la matriz de
la imagen seleccionada.

Hasta aquí se ha cargado la matriz nC con los requerimientos del usuario resaltando los canales
de color específicos. El proceso que se está llevando en el recuadro que se encuentra a la
izquierda es la binarizacion de la imagen por nombre nC (imagen modificada por el usuario),
asignándolo al umbral bw antes ya mencionado.

La binarizacion consiste en la realización de un barrido en la matriz de la imgen digital, por


medio de bucles o recursividad, con el fin de que el proceso produzca la reducción de la escala
de grises a dos únicos valores. Negro (=0) y blanco (=255), o lo que es lo mismo, un sistema
binario de ausencia y presencia de color 0-1. [7] El proceso que se realiza es el método global.
El cual consiste en:

0 𝑠𝑖 𝑔 < 𝑡
𝑇𝑔𝑙𝑜𝑏𝑎𝑙 (𝑔) = {
0 𝑠𝑖 𝑔 ≥ 𝑡
Figura 14: Imagen binarizada que resalta el canal rojo.

Figura 15: Matriz de la imagen binarizada que resalta el canal rojo.

El siguiente código nos servirá para eliminar objetos pequeños los cuales impiden una mejor
selección del objeto.

imbw = bwareaopen(imbw,str2num(get(handles.delpix,'String')));

Figura 16: Esta parte permite remover los pixeles que nos
impiden una mejor selección del objeto.

Figura 17: Se puede ver un ejemplo de los objetos pequeños que


impiden una correcta selección del objeto, el removedor de pixeles
se encuentra en 10 (Esto significa que se quitaran los pixeles menores a 10).
Figura 18: Aquí se puede ver la corrección y eliminación de los objetos pequeños por el cambio en la
parte del removedor de pixeles este se encuentra ahora en 200 (Esto significa que se quitaran los pixeles
menores a 200).

Aquí está la matriz binarizada, el objeto seleccionado está representado con el número 1.
Ahora se va a extraer las propiedades de la matriz imbw la cual es la matriz binarizada, de aquí
se va a extraer el centroide y el Boundingbox, el cual es el área que se va a enmarcar del objeto
que se ha seleccionado para el seguimiento, después mediante lo que se a extraído se va a crear
n rectángulos de acuerdo a los n objetos detectados.

Figura 19: Imagen con el objeto de color rojo seleccionado.

Objeto seleccionado en un recuadro. En este caso el centroide se ubica en la Fila y Columna


(60.265082, 84.7806) y el BoundingBox (41.5000, 68.5000, 35, 29) estos números son las
posiciones de las esquinas del recuadro que se creo para seleccionar el objeto, estos se crean
alrededor del centroide.
Estos datos se los puede encontrar en el Workspace. Están asignadas con la variable de (prop).
Ahí se encuentran los valores del centroide y del BoundingBox.
Figura 20: Imagen del Workspace, donde se encuentra la variable prop.

Figura 21: Imagen del contenido de la variable prop. Se puede observar los valores del centroide y del
boundingbox.

Al final se extrae la los canales rojo, verde y azul de la matriz modificada a color nC, estos
canales pertenecen a la imagen en donde se está seleccionando el objeto.

Figura 22: Imagen con el objeto de color rojo seleccionado, en esta imagen se
puede observar como la mano no interfiere en la selección del color.
A continuación se podrá observar cada uno de los canales ya modificados por el usuario, en este
caso se esta utilizando como ejemplo la selección del color rojo.
Canal rojo.

Figura 23: Imagen en donde Figura 24: Matriz de la imagen en donde se resalta el canal rojo.
se resalta el canal rojo

Figura 25: Matriz de la imagen en donde se resalta el canal rojo.


Canal verde

Figura 26: Imagen del canal Figura 27: Matriz de la imagen perteneciente al canal verde, esta se
verde. Encuentra llena de ceros.

Canal azul

Figura 28: Imagen del canal Figura 29: Matriz de la imagen perteneciente al canal azul, esta se
Azul. Encuentra llena de ceros.

Como se puede observar en el canal rojo aparece el objeto que estamos seleccionando.
Ahora se va a realizar el mismo proceso, pero seleccionando el color verde, si queremos
seleccionar el objeto verde, tenemos que poner los slider de forma que seleccione correctamente
el color, para seleccionar el objeto verde tenemos que mover el slider al número 1 y el ahora el
slider del color rojo y azul en 0, el proceso que estaría haciendo seria el siguiente:

nC(:,:,1)=0*255;

nC(:,:,2)=1*255;

nC(:,:,3)=0*255;

Figura 30: Imagen donde se encuentra seleccionado


el canal verde.

Al multiplicar por 1 en el canal verde y 0 en los canales rojo y azul, lo que se está haciendo es
que el programa seleccione solo los valores que tengan una iluminación de 255 de la matriz de
la imagen seleccionada.

Hasta aquí se ha cargado la matriz nC con los requerimientos del usuario resaltando los canales
de color específicos. El proceso que se está llevando en el recuadro que se encuentra a la
izquierda es la binarizacion de la imagen por nombre nC (imagen modificada por el usuario),
asignándolo al umbral bw antes ya mencionado.

Figura 31: Imagen binarizada que resalta el canal verde.


Figura 32: Matriz de la imagen binarizada que resalta el canal rojo.

Aquí está la matriz binarizada, el objeto seleccionado está representado con el número 1.
Ahora se va a extraer las propiedades de la matriz imbw la cual es la matriz binarizada, de aquí
se va a extraer el centroide y el Boundingbox, el cual es el área que se va a enmarcar del objeto
que se ha seleccionado para el seguimiento, después mediante lo que se a extraído se va a crear
n rectángulos de acuerdo a los n objetos detectados.

Figura 33: Imagen con el objeto de color verde seleccionado.

Objeto seleccionado en un recuadro. En este caso el centroide se ubica en la Fila y Columna


(98.5925, 47.86375) y el BoundingBox (84.50000, 29.5000, 28, 36) estos números son las
posiciones de las esquinas del recuadro que se creó para seleccionar el objeto, estos se crean
alrededor del centroide.
Estos datos se los puede encontrar en el Workspace. Están asignadas con la variable de (prop).
Ahí se encuentran los valores del centroide y del BoundingBox.

Figura 34: Imagen del Workspace, donde se encuentra la variable prop.


Figura 35: Imagen del contenido de la variable prop. Se puede observar los valores del centroide y del
boundingbox.

Al final se extrae los canales rojo, verde y azul de la matriz modificada a color nC, estos canales
pertenecen a la imagen en donde se está seleccionando el objeto.

Figura 36: Imagen con el objeto de color verde seleccionado, en esta imagen se
puede observar como la mano no interfiere en la selección del color.

A continuación, se podrá observar cada uno de los canales ya modificados por el usuario, en
este caso se está utilizando como ejemplo la selección del color verde.

Canal rojo.

Figura 37: Imagen en donde Figura 38: Matriz de la imagen en donde se resalta el canal rojo.
se resalta el canal rojo
Canal verde

Figura 39: Imagen del canal Figura 40: Matriz de la imagen perteneciente al canal verde.
verde.

Canal azul

Figura 41: Imagen del canal Figura 42: Matriz de la imagen perteneciente al canal azul, esta se
Azul. Encuentra llena de ceros.

Como se puede observar en el canal verde aparece el objeto que estamos seleccionando.
Ahora se va a realizar el mismo proceso, pero seleccionando el color azul, si queremos
seleccionar el objeto azul, tenemos que poner los slider de forma que seleccione correctamente
el color, para seleccionar el objeto azul tenemos que mover el slider al número 1 y ahora el
slider del color rojo y verde en 0, el proceso que estaría haciendo seria el siguiente:

nC(:,:,1)=0*255;

nC(:,:,2)=0*255;

nC(:,:,3)=1*255;

Figura 43: Imagen donde se encuentra seleccionado


el canal azul.

Al multiplicar por 1 en el canal azul y 0 en los canales rojo y verde, lo que se está haciendo es
que el programa seleccione solo los valores que tengan una iluminación de 255 de la matriz de
la imagen seleccionada.

Hasta aquí se ha cargado la matriz nC con los requerimientos del usuario resaltando los canales
de color específicos. El proceso que se está llevando en el recuadro que se encuentra a la
izquierda es la binarizacion de la imagen por nombre nC (imagen modificada por el usuario),
asignándolo al umbral bw antes ya mencionado.

Figura 44: Imagen binarizada que resalta el canal azul.


Figura 45: Matriz de la imagen binarizada que resalta el canal azul.

Aquí está la matriz binarizada, el objeto seleccionado está representado con el número 1.
Ahora se va a extraer las propiedades de la matriz imbw la cual es la matriz binarizada, de aquí
se va a extraer el centroide y el Boundingbox, el cual es el área que se va a enmarcar del objeto
que se ha seleccionado para el seguimiento, después mediante lo que se a extraído se va a crear
n rectángulos de acuerdo a los n objetos detectados.

Figura 46: Imagen con el objeto de color azul seleccionado.

Objeto seleccionado en un recuadro. En este caso el centroide se ubica en la Fila y Columna


(45.57885, 39.058925) y el BoundingBox (32.50000, 23.5000, 29, 34) estos números son las
posiciones de las esquinas del recuadro que se creó para seleccionar el objeto, estos se crean
alrededor del centroide.
Estos datos se los puede encontrar en el Workspace. Están asignadas con la variable de (prop).
Ahí se encuentran los valores del centroide y del BoundingBox.

Figura 47: Imagen del Workspace, donde se encuentra la variable prop.


Figura 48: Imagen del contenido de la variable prop. Se puede observar los valores del centroide y del
boundingbox.

Al final se extrae los canales rojo, verde y azul de la matriz modificada a color nC, estos canales
pertenecen a la imagen en donde se está seleccionando el objeto.

Figura 49: Imagen con el objeto de color verde seleccionado, en esta imagen se
puede observar como la mano no interfiere en la selección del color.

A continuación, se podrá observar cada uno de los canales ya modificados por el usuario, en
este caso se está utilizando como ejemplo la selección del color azul.
Canal rojo.

Figura 50: Imagen en donde Figura 51: Matriz de la imagen en donde se resalta el canal rojo.
se resalta el canal rojo
Canal verde

Figura 52: Imagen del canal Figura 53: Matriz de la imagen perteneciente al canal verde.
verde.
Canal azul

Figura 54: Imagen del canal Figura 55: Matriz de la imagen perteneciente al canal azul.
Azul.

Como se puede observar en el canal azul aparece el objeto que estamos seleccionando.
Ahora se va a realizar el mismo proceso, pero seleccionando los tres colores, si queremos
seleccionar los tres colores, tenemos que poner los sliders de forma que seleccione
correctamente los colores, tenemos que mover los sliders al número 1 el proceso que estaría
haciendo seria el siguiente:

nC(:,:,1)=1*255;

nC(:,:,2)=1*255;

nC(:,:,3)=1*255;

Figura 56: Imagen donde se encuentra seleccionado


los tres colores.

Al multiplicar por 1 en el canal azul y 0 en los canales rojo y verde, lo que se está haciendo es
que el programa seleccione solo los valores que tengan una iluminación de 255 de la matriz de
la imagen seleccionada.

Hasta aquí se ha cargado la matriz nC con los requerimientos del usuario resaltando los canales
de color específicos. El proceso que se está llevando en el recuadro que se encuentra a la
izquierda es la binarizacion de la imagen por nombre nC (imagen modificada por el usuario),
asignándolo al umbral bw antes ya mencionado.

Figura 57: Imagen binarizada que resalta los tres canales.


Figura 58: Matriz de la imagen binarizada que resalta los tres canales.

Aquí está la matriz binarizada, el objeto seleccionado está representado con el número 1.
Ahora se va a extraer las propiedades de la matriz imbw la cual es la matriz binarizada, de aquí
se va a extraer el centroide y el Boundingbox, el cual es el área que se va a enmarcar del objeto
que se ha seleccionado para el seguimiento, después mediante lo que se a extraído se va a crear
n rectángulos de acuerdo a los n objetos detectados.

Figura 59: Imagen seleccionando los tres objetos.

Objeto seleccionado en un recuadro. En este caso el centroide de la figura de color rojo se ubica
en la Fila y Columna de(34.01972872, 52.72009864) el de la figura de color verde se ubica en
(59.8915441, 84.5441176) el de la figura color azul de ubica en (94.5182767, 46.391644)y el
BoundingBox de la figura de color rojo es (16.500000, 34.5000, 34, 37), el BoundingBox de la
figura de color verde es (40.50000, 68.5000, 36, 28) , el BoundingBox de la figura de color azul
es (80.500000, 28.50000, 28, 36) estos números son las posiciones de las esquinas del recuadro
que se creó para seleccionar los objetos, estos se crean alrededor del centroide.
Estos datos se los puede encontrar en el Workspace. Están asignadas con la variable de (prop).
Ahí se encuentran los valores del centroide y del BoundingBox.

Figura 60: Imagen del Workspace, donde se encuentra la variable prop.


Figura 61: Imagen del contenido de la variable prop. Se puede observar los valores del centroide y del
boundingbox.

Al final se extrae los canales rojo, verde y azul de la matriz modificada a color nC, estos canales
pertenecen a la imagen en donde se está seleccionando el objeto.

Figura 62: Imagen con el objeto de color verde seleccionado, en esta imagen se
puede observar como la mano no interfiere en la selección del color.

A continuación, se podrá observar cada uno de los canales ya modificados por el usuario, en
este caso se está utilizando como ejemplo la selección de los tres colores.
Canal rojo.

Figura 63: Imagen en donde Figura 64: Matriz de la imagen en donde se resalta el canal rojo.
se resalta el canal rojo
Canal verde

Figura 65: Imagen del canal Figura 66: Matriz de la imagen perteneciente al canal verde.
verde.
Canal azul

Figura 67: Imagen del canal Figura 68: Matriz de la imagen perteneciente al canal azul.
Azul.

Como se puede observar en los tres calanes aparecen los objetos que estamos seleccionando.

[1] Cuevas, E., Zaldívar, D., & Pérez, M. (2016). Procesamiento digital de imágenes con
MATLAB & Simulink. Ra-Ma.

[2] Raza, Kazim & Kumar Selvaperumal, Dr Sathish & Natarj, Chandrasekharan &
Lakshmanan, Ravi & Seeralan, Arun. (2018). Enhanced Object Detection and Tracking
Algorithm in Complex Videos. 1-8. 10.1109/AEEICB.2018.8480996.

[4] Autores: Julián Pérez Porto y María Merino. Publicado: 2014. Actualizado: 2016.
Definicion.de: Definición de RGB (https://definicion.de/rgb/)
[5] Hansen, Per Christian, James G. Nagy, and Dianne P. O'leary. Deblurring images:
matrices, spectra, and filtering. Vol. 3. Siam, 2006.

[6] McAndrew, A. (2004). An introduction to digital image processing with matlab notes for
scm2511 image processing. School of Computer Science and Mathematics, Victoria University
of Technology, 264(1), 1-264.

[7] MAGRO, Rafael. Binarización de imágenes digitales y su algoritmia como herramienta


aplicada a la ilustración entomológica. Boletín de la Sociedad Entomológica Aragonesa, 2013,
vol. 53, p. 443-464.

Você também pode gostar