0% encontró este documento útil (0 votos)
121 vistas50 páginas

Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica

El documento presenta 5 retos relacionados con el procesamiento digital de imágenes. El primer reto involucra la extracción del color rojo de un automóvil antiguo mediante el uso de canales RGB y HSV. Se concluye que el canal H del espacio de color HSV es el más efectivo para este propósito.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
121 vistas50 páginas

Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica

El documento presenta 5 retos relacionados con el procesamiento digital de imágenes. El primer reto involucra la extracción del color rojo de un automóvil antiguo mediante el uso de canales RGB y HSV. Se concluye que el canal H del espacio de color HSV es el más efectivo para este propósito.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como DOCX, PDF, TXT o lee en línea desde Scribd

1

UNIVERSIDAD NACIONAL DE INGENIERÍA


FACULTAD DE INGENIERÍA MECÁNICA

PRÁCTICA CALIFICADA 1
PROCESAMIENTO DIGITAL DE IMÁGENES

GRUPO 1:
Alfaro Barrientos, Gino Javier 20170006D
Cabello Oqueña, Jorge Francisco 20174110K
Mallma Véliz, Aldahir Javier 20172018J
Luo Lin, Eduardo 20174002C
Soto Conde, Nick 20172007H

DOCENTE:
Ing. Gustavo Omar Mesones Málaga

LIMA-PERÚ

6 de mayo del 2021


2

Índice
RETO 1: ENSAMBLAJE Y RESTAURACIÓN DE VEHÍCULOS ANTIGUOS................1

RETO 2: DISEÑO DE INTERIORES......................................................................................9

Por ejemplo, para identificar al color naranja (2do cojín):.......................................................9

Para el color verde..................................................................................................................13

Para el color azul....................................................................................................................14

Para el color rojo....................................................................................................................15

RETO 3: DETECCIÓN DEUN OBJETO DE COLOR VERDE Y OBJETOS CON


CARACTERÍSTICAS DE FORMA CON DOS COLORES................................................24

PASO 1:.................................................................................................................................24

PASO 2:.................................................................................................................................24

PASO 3:.................................................................................................................................25

PASO 4:.................................................................................................................................26

PASO 5:.................................................................................................................................27

RETO 4: ESTIMACIÓN DE VELOCIDAD ANGULAR DE UN VENTILADOR DE


BAJA VELOCIDAD................................................................................................................30

Solución a base de fotografías tomadas con la Webcam luego de un intervalo de tiempo:


...............................................................................................................................................30

1ra velocidad:.....................................................................................................................30

2da velocidad:....................................................................................................................40

Solución a base de fotografías tomadas con la Webcam en tiempo real:.........................42

1ra velocidad:.....................................................................................................................42

2da velocidad:....................................................................................................................44

RETO 5: ESTABLECER UNA APLICACIÓN PRÁCTICA USANDO UN DISPOSITIVO


MÓVIL QUE SE VINCULE CON SU ESPECIALIDAD.....................................................45

Conclusiones.............................................................................................................................49
1

RETO 1: ENSAMBLAJE Y RESTAURACIÓN DE VEHÍCULOS ANTIGUOS

Un coleccionista de vehículos desea desarrollar aplicaciones en línea para ofrecer este

tipo de automóviles a clientes exigentes y está dispuesto a montar una planta industrial

en la ciudad de Huancayo para tal fin como centro de desarrollo tecnológico modelo.

La misión es extraer el color que pertenece a ambos vehículos, el resto de la imagen se


presentará en tonos grises.

Fig. Imágenes de los automóviles, a los cuales se les debe extraer los colores

Para lo cual en primera instancia se piensa en realizar el filtrado selectivo mediante lo


canales RGB que conforman los colores de los automóviles. Para lo cual se realiza la

Capa R Capa G

Capa B Imagen Original

Fig. Separación de canales del auto rojo, canales RGB.

separación de dichos canales para su mejor apreciación.


Como se puede observar para los canales B y G El auto presenta valores pequeños,
puesto que el auto no presenta, en su mayoría, combinación de estos canales. Por lo que
se pone más importancia al canal R, pero eso no conlleva a desligar a los otros canales
de la tarea, ya que para los detalles, en especial el césped observamos que en la imagen
2

del canal R hay zonas que no quedan completamente exentas de rojo, por lo que
haciendo una colaboración con el canal G, sería la mejor solución.
Para encontrar la tonalidad adecuada del canal R para su filtrado nos hacemos ayuda del
comando improfile () para poder ver los cambios en los valores de dicho color.
Para lo cual, un valor ideal para el filtrado de color rojo sería de 100.

250

200

150

100

50

0
0 20 40 60 80 100 120 140 160 180
Distance along profile

Fig. Registro de valores entre el auto y el césped en el canal R.

Imagen Filtrada Imagen Original

Fig. Primer resultado de filtrado (solo canal R).

Para tratar de eliminar las zonas verdes, se complemente lo realizado anteriormente con
el canal verde. Seleccionando como punto de quiebre el valor de 80.
Teniendo finalmente como resultado, el color del automóvil filtrado del fondo de la
escena.

Imagen Filtrada Imagen Original

Fig. Resultado del filtrado mediante canales RGB.


3
200

180

Como se puede observar, este método utilizando los canales RGB, no nos brinda los
160

resultados deseados esto debido a la combinación de colores cuyos tonos son muy
140

cercanos entre el automóvil y el resto del paisaje, en especial por los detalles como el
120

brillo, cambios de iluminación por el perfil y las sombras que pudiesen darse por la
100

80
Formato HSV - Auto Rojo

60

40

20

0
0 50 100 150 200 250
Distance along profile

Fig. Registro de valores entre el auto y el césped en el canal G.

Fig. Auto rojo convertido a formato HSV.

dirección de la iluminación.
Para solucionar este inconveniente se recurre a la conversión a canales HSV.
Procederemos como en el caso anterior, separar los canales para poder detectar cambios
entre los elementos de la imagen. Se observa que el canal V tiene valores altos para el
automóvil y valores relativamente altos [ara ciertos sectores del resto de la imagen, por
lo que por sí solo no será suficiente para realizar el filtrado.
Por otra parte, se observa el canal H que tiene valores muy altos para el color del
automóvil y muy bajos para el paisaje del fondo, con valores regulares para los
accesorios del carro y el pavimento.
4

Capa H capa S

capa V Imagen Original

Fig. Separación de canales HSV.

Teniendo en cuenta el análisis anterior se procede a encontrar el valor para el filtrado


mediante el canal V, para seguidamente hacer una comparación con el filtrado
utilizando el canal H, para no perder los detalles del automóvil y eliminar el resto de la
imagen de fondo.

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0 50 100 150 200 250
Distance along profile

Fig. Registro de valores entre el auto y el césped en el canal V.

Según los datos adquiridos la mejor separación se daría para un valor de 0.75 para una
separación entre el color del automóvil y el césped.

Al filtrarlo podemos observar una buena separacion, pero algunos detalles del automobil
no los puede detectar, por ello se presenta la necesidad de involucrar un canal adicional
para detectar dichos detalles.

Imagen Filtrada Imagen Original


5

Continuando con el proceso de [Link]ón


Filtrado mediante el canal
de valores, vemosV. que para el canal H, el valor
idóneo sería 0.75 a través de un tramo que me diferencia el césped del detalle que no se
puede reconocer en el filtrado anterior y finalmente tener la imagen correctamente
filtrada, resaltando el color del automóvil.

0.9

0.8

0.7

0.6

Imagen Filtrada Imagen Original


0.5

0.4

0.3

0.2

0.1

0
0 10 20 30 40 50 60 70 80 90
Distance along profile

Fig.
[Link]
Registro final del Filtrado
de valores entre elhaciendo
auto y eluso de los
césped encanales
el canalHV.
y V.

Para el auto de color celeste, se realiza un procedimiento similar, ya que la selección de


colores se hace con un tono del automóvil alto respecto del fondo mas opaco, como
normalmente ocurre al visualizar automóviles en un ambiente natural.
Para el filtrado basado en el formato RGB, se utiliza el canal B. Siendo el valor limite
para el B de 140.

180

160

140

120

100

80

60

40

20

0
0 20 40 60 80 100 120
Distance along profile

Fig. Registro de valores para la selección en el canal B.


6

Teniendo como resultado una imagen casi filtrada del todo, de no ser por el detalle del
césped que se puede ver a través de las ventanas de los autos.

Para corregir el detalle se recurre al formato HSV.


Formato HSV - Auto Celeste

Capa H capa S

Fig. Imagen del auto celeste en formato HSV.

capa V Imagen Original

Imagen Filtrada Imagen Original

Fig. Imagen filtrada haciendo uso del formato RGB.


Fig. Separación de canales HSV.

Separando en canales se tiene.


Al igual que en el caso anterior vemos que la capa V nos selecciona el automóvil
completo exceptuando por algunos detalles de los accesorios del carro. Escogemos el
valor de 0.5.

Realizamos lo mismo para el canal H, para así tener los detalles que se pudiesen obviar
solamente tomando en cuenta el canal V.

Para poder eliminar el tema del césped detrás de la ventana del automóvil escogemos el
valor de 0.5 para el canal H.

0.9

0.8

0.7

0.6

0.5

0.4

0.3

0.2

0.1

0
0.9
Fig. Registro de valores para la selección en el canal H.
0.8

0.7
7
0.6

0.5

Para que así finalmente tengamos la imagen del automóvil filtrada respecto del fondo.
0.4

0.3

0.2

0.1

0
0 20 40 60 80 100 120 140 160 180
Imagen Filtrada DistanceImagen
along profile Original

Fig. Registro de valores para la selección en el canal V.

Fig. Resultado final del Filtrado haciendo uso de los canales H y V.

RETO 2: DISEÑO DE INTERIORES

Usando el modelo de color RGB:

Para extraer los colores, se emplearon condicionales para restringir el rango en cada
componente RGB. Se usó la función improfile para observar los valores en cada
componente de lugares específicos de la imagen.
8

Por ejemplo, para identificar al color naranja (2do cojín):

250
250

200
200

150
150

100
100

50 50

0 0
0 10 20 30 40 0 10 20 30 40
Distance along profile Distance along profile

Fig. 2.1. Perfil de componentes Fig. 2.2. Perfil de componentes


RGB de la línea A RGB de la línea B

250

200

150

100

50

0
0 10 20 30 40 50 60
Distance along profile

Fig. 2.3. Perfil de componentes Fig. 2.4. Algunas líneas analizadas para el
RGB de la línea C reconocimiento del 2do cojín

Este procedimiento es iterativo para obtener un perfil aproximado de valores permitidos


para las componentes RGB que debería tener para pertenecer a este cojín. Para puntos
específicos, se puede ampliar y observar los valores precisos de un píxel determinado
con la función impixel y seleccionando los píxeles que se desean observar. Esto es
especialmente útil si se desean ajustar los contornos de la imagen afectados por
sombras.
La figura resultante se obtiene de aplicar esta máscara a la imagen original, obteniendo
solo lo que se desea aislar. Un conjunto de condiciones más específica significa un filtro
más preciso, extrayendo una mayor cantidad de píxeles de la imagen. Se usó, para este
caso, 3 condicionales para tres tonos de naranja: La primera permite tonos más oscuros,
la segunda permite tonos medios y la tercera permite tonos claros de naranja.
9

Usando el modelo de color HSV:

Fig. 2.5. Aislamiento del 2do cojín (de color naranja)

Esta representación, en primaria instancia, debe ser más sencilla que la segmentación
usando el modelo RGB debido a que se agrupan colores “cercanos” con valores de H, S
y V parecidos.
Empleando la función rgb2hsv para convertir una imagen en modelo RGB al modelo
HSV, se pueden observar los valores que pueden tomar al usar la función histogram.

Después de observar las gráficas de distribución de los parámetros del HSV, se eligen
los rangos con los cuales se crea el filtro, el cual se ha caracterizado por un valor medio
y una amplitud en ambos sentidos para cada parámetro.

1500
2000

1000

1000
500

0 0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1

1000

500

0
0 0.2 0.4 0.6 0.8

Fig. 2.6. Gráficas de distribución del Hue (arriba a la izquierda), Saturation (arriba a la
derecha) y Value (abajo) de la imagen recortada del cojín naranja
10

Notar que se evitó tomar los valores de Hue cercanos a 0 debido a que estos representan
a los tonos rojos, de manera que se seleccionarían, además del cojín naranja, las
paredes, la alfombra y demás objetos rojos de la imagen.
Finalmente, se crea la máscara y se aplica a la imagen original.

Comparando ambos resultados, se observa que se obtienen resultados parecidos; sin

Fig. 2.7. Resultado de separar el color naranja empleando el modelo HSV

embargo, empleando el modelo HSV se emplea un procedimiento y rangos para el filtro


más simples y sencillos de iterar, por lo que se usará este modelo para el resto de esta
solución. Para cambiar de color, simplemente se cambiaría el parámetro de Hue.

Fig. 2.8. Comparación entre los resultados de usar el modelo RGB y el HSV

Por lo tanto, se procede de manera similar con los demás colores.


Para el color violeta:
3000 3000

2000 2000

1000 1000

0 0
0 0.2 0.4 0.6 0.8 1 0.2 0.4 0.6 0.8 1

800
400

200

0
0 0.2 0.4 0.6 0.8 11
Fig. 2.9. Gráficas de distribución del Hue (arriba a la izquierda), Saturation (arriba a la
derecha) y Value (abajo) de la imagen recortada del cojín violeta

Fig. 2.10. Resultado de separar el color violeta

Para el color verde:

2000
2000
1500
1500

1000
1000

500 500

0 0
0 0.5 1 0.2 0.4 0.6 0.8 1

600

400

200

0
0 0.2 0.4 0.6 0.8

Fig. 2.11. Gráficas de distribución del Hue (arriba a la izquierda), Saturation (arriba a la
derecha) y Value (abajo) de la imagen recortada del cojín verde
12

Fig. 2.12. Resultado de separar el color verde

Para el color azul:


2000 2500

2000
1500

1500
1000
1000

500
500

0 0
0 0.2 0.4 0.6 0.8 1 0 0.2 0.4 0.6 0.8 1

500

400

300

200

100

0
0 0.2 0.4 0.6 0.8

Fig. 2.13. Gráficas de distribución del Hue (arriba a la izquierda), Saturation (arriba a la
derecha) y Value (abajo) de la imagen recortada del cojín azul
13

Fig. 2.14. Resultado de separar el color azul

Para el color rojo:


Para este color, se puede tomar en cualquier área roja (pared, alfombra, cojín) para
graficar el histograma y, a partir de esos valores, variarlos para filtrar todos los objetos
rojos. Para este caso, se estás tomando dos áreas que contengan dos tonos de rojo para
facilitar el filtrado.

Fig. 2.15. Áreas seleccionadas


para graficar el histograma
(rectángulos azules)

2000
1000 600
1500
800
1500 400
600
1000
1000400
200

200 500
500
0 0
0 0.2 0.4 0.6 0.8 1 0.85 0.9 0.95 1
0 0
0 0.5 1 0.6 0.8 1
1000

1500800
Fig. 2.16. Gráficas de
distribución del Hue (arriba a la
600
Fig. 2.17. Gráficas
izquierda), de (arriba a la
Saturation
1000400
distribución del Hue (arriba
derecha) y Value (abajo) a la
de la
200 izquierda),
primera imagen recortada del a la
Saturation (arriba
500 0 derecha)
color rojoy Value (abajo) de la
0.5 0.6 0.7 0.8 0.9
segunda imagen recortada del
0 color rojo
0.4 0.6 0.8
14

Se observa que toma tonalidades de rojo cercanas a 0 y a 1, por lo que se incluirán estas
dos tonalidades en las condicionales. Se tienen que unir los conjuntos solución de
ambos histogramas para incluir las tonalidades de ambos rectángulos.

Fig. 2.18. Resultado de separar el color rojo

Para el color negro:


15000
1000

10000

500
5000

0 0
0 0.5 1 0.02 0.04 0.06 0.08 0.1 0.12

1000 Fig. 2.19. Gráficas de


distribución del Hue (arriba a la
500 izquierda), Saturation (arriba a la
derecha) y Value (abajo) de la
0
imagen recortada de color negro
0.2 0.3 0.4
15

Sin embargo, los histogramas muestran una distribución bastante amplia de valores para
los parámetros de Saturation y Hue. Se emplearon otras muestras de píxeles para
registrar la mayor cantidad de tonalidades de negro, y se plantearon las condiciones para
la máscara.
Los resultados empleando el modelo HSV sugieren unas condiciones más específicas,
resultando en un código más extensivo. Debido a esto, se planteó trabajar con el modelo
RGB, en el cual la característica de los colores en la escala de grises es que están
formados por componentes Red, Green y Blue con valores cercanos, y que, para colores
oscuros, tienen valores pequeños. Se añadió una tercera condición de valores pequeños
sin importar la distancia entre ellos, ya que, al ser más cercanos a cero, el tono oscuro
no diferencia de los demás colores y se asemeja más al negro, a pesar de tener una
mayor proporción de alguna componente respecto a otra. Para representar estas
condiciones numéricamente, los valores de la matriz RGB tuvieron que ser cambiados
de tipo a una variable que acepte valores negativos.

Fig. 2.21. Resultado de separar el color negro con el modelo RGB

Fig. 2.20. Resultado de separar el color negro con el modelo HSV


16

Se observa un mejor resultado al emplear el modelo RGB, y unas condiciones más


simples y fáciles de manipular.
Finalmente, para las áreas de un tono blanco, se consideró no realizar la separación de
colores, ya que un cambio en estas áreas incluiría también colorear el canto (parte
opuesta al lomo) de los libros.
Una vez separados los píxeles por colores, la aplicación de cambiar los colores se puede
realizar al variar el valor del Hue de las respectivas zonas.
Se ha creado una función de Matlab que recibe dos argumentos: El primero indica qué
color inicial se desea cambiar, y el segundo indica cuál será el color final.
Inicialmente se definen las máscaras de cada color, agregando las condiciones
previamente calculadas para cada color, y se crea un condicional para elegir cuál será la
máscara por usar durante el cambio de color.

La función aplica el nuevo color a la máscara seleccionada, crea una máscara en


negativo, la multiplica por elemento por la imagen original, y se suman estas dos
componentes para formar la nueva matriz Hue. Se reconstruye la imagen y finalmente
se muestran los resultados.
17

La función
Fig.hsv2rgb transforma
2.22. Resultado unadeimagen
del cambio color delen modelo
color 5 (rojo)HSV al modelo
a un Hue RGB, pero en
de 45 (amarillo)
escala normalizada, es decir, con valores entre 0 y 1. Debido a esto, se multiplica por
255 y se transforma la variable a uint8.
Sin embargo, al usar la función para el color 6 (negro y escala de grises), se observa lo
siguiente:

Fig. 2.23. Resultado del cambio de color del color 6 (negro) a un Hue de 166 (cyan)

Al observar los valores HSV de un píxel específico, se observa que el procedimiento


planteado por la función sí fue correcto. Sin embargo, el color sigue siendo gris a la
vista, debido al valor reducido de saturación. Una solución para esto propuesta es
maximizar el valor de saturación al 100% (1.000) para todos los píxeles de este color.

Fig. 2.24. Píxel escogido, mostrando los valores de las componentes en el modelo RGB

Finalmente, la implementación de esta funcionalidad muestra resultados aceptables.


18

Fig. 2.23. Resultado del cambio de color del color 6 (negro) a un Hue de 90 (verde)

Finalmente, se implementó una interfaz gráfica de usuario para una visualización


adecuada de la aplicación:

Fig. 2.23. Interfaz gráfica para el cambiado de colores


19

Se agregó el parámetro de saturación del color negro para que se pueda distinguir su
color final. Así, se modifica un poco el código de la función para cambiar colores de la
imagen para agregar el parámetro de la saturación del color negro y la imagen de
entrada.

Y se comprueba su correcto funcionamiento para elegir colores de cojines, paredes y


demás.

Fig. 2.24. Diseño final de la interfaz gráfica

Para que se actualice el cambio de color cada vez que se cambie la posición de la slider,
se incluyen las líneas de cambio de color en la función de actualización del slider. Por
ejemplo, para un cambio en la slider del color naranja:
20

La presencia del parámetro de imagen de entrada en la función de cambio de color


permite realizar cambios sucesivos, ingresando la misma imagen a la función, y
reemplazando a esta con la salida.
El botón de reinicio reemplaza a la imagen que se muestra en la interfaz por la imagen
original, y restablece los valores de las sliders.
21

RETO 3: DETECCIÓN DEUN OBJETO DE COLOR VERDE Y OBJETOS CON

CARACTERÍSTICAS DE FORMA CON DOS COLORES

% Programa para captura de imagen desde webcam

clc; clear; close all;

PASO 1:

Primero se inicializa la webcam, se crea la variable cam donde se podrá usar esta
con el comando snapshot.

% Se crea la variable para la camara

cam = webcam(1);

% Creacion del ciclo while para la captura de imagenes

while 1

% Captura de la imagen

im = snapshot(cam);

PASO 2:

Separamos la imagen tomada por la webcam en la capa de colores RGB, luego


generamos la imagen en escala grises.

Separamos el color rojo de los demás, aplicamos un filtro para eliminar cualquier
ruido presente, luego obtenemos los componentes rgb del objeto color rojo y
mediante el comando cat los integramos, luego calculamos la imagen a escala
22

grises. Finalmente sumamos la imagen de color con la imagen a escala grises


obteniendo la imagen color rojo.

% Separacion de la capa de colores RGB

r = double(im(:,:,1));

g = double(im(:,:,2));

b = double(im(:,:,3));

% Generacion de la imagen en escala de grises

BN = rgb2gray(im);

% Separamos el rojo

objeto_r = r - b - g;

% Limite para la intensidad del rojo

aobjetor = objeto_r > 20;

% Filtro de las imagenes para eliminar el ruido

aobjetor = medfilt2(aobjetor);

aobjetor = medfilt2(aobjetor);

% Negativo de la mascara roja

masc_p = 1 - aobjetor;

% Obtencion del objeto coloreado color rojo

r.*double(aobjetor)/255;

g1 = g.*double(aobjetor)/255;

b1 = b.*double(aobjetor)/255;
23

color = cat(3,r1,g1,b1);

imagen_final_r = double(BN).*masc_p/255;

% Sumamos la imagen a color con la imagen escala grises

img_red = color + imagen_final_r;

PASO 3:

Hacemos lo mismo que en el paso 2, la única diferencia radica en que ahora


separaremos el color azul.

% Separamos ahora el color azul

objeto_b = b - r - g;

% Limite para la intensidad azul

aobjetob = objeto_b > 10;

% Filtrado para eliminar el ruido

aobjetob = medfilt2(aobjetob);

aobjetob = medfilt2(aobjetob);

% Obtencion del negativo de la mascara azul

masc_b = 1- aobjetob;

% Obtencion del objeto coloreado color azul

r1b = r.*double(aobjetob)/255;

g1b = g.*double(aobjetob)/255;

b1b = b.*double(aobjetob)/255;
24

colorb = cat(3,r1b,g1b,b1b);

imagen_final_b = double(BN).*masc_b/255;

% Sumamos la imagen a color con la imagen escala grises

img_blue = colorb + imagen_final_b;

PASO 4:

Realizamos lo mismo que en el paso 2, separando ahora el color verde de los


demás componentes.

% Separamos ahora el color verde

objeto_g = g - r - b;

%Limite para la intensidad del verde

aobjetog = objeto_g > 10;

% Filtrado para eliminar el ruido

aobjetog = medfilt2(aobjetog);

aobjetog = medfilt2(aobjetog);

%Obtencion del negativo de la mascara verde

masc_g = 1 - aobjetog;

% Obtencion del objeto color verde

r1g = r.*double(aobjetog)/255;

g1g = g.*double(aobjetog)/255;

b1g = b.*double(aobjetog)/255;
25

colorg = cat(3,r1g,g1g,b1g);

imagen_final_g = double(BN).*masc_g/255;

% Sumamos la imagen a color con la imagen escala grises

img_green = colorg + imagen_final_g;

PASO 5:

Obtenemos la suma de las mascaras de los colores rojo, azul y verde para luego
con esto calcular la imagen a escala grises.

Finalmente sumamos la imagen es grises con las imágenes a color, obteniendo la


imagen que detecta colores rojo, verde y azul.

% Sumamos las mascaras rojo, azul y verde

arb = aobjetob + aobjetor + aobjetog;

% Negativo de la mascara rojo, azul y verde

suma_brg = 1 - arb;

grises = double(BN).*suma_brg/255;

% Suma de la imagen a color con la imagen a escala grises

img_brg = grises + colorb + color + colorg;

% Muestreo de las imagenes

figure(1)

subplot(2,3,1); imshow(im);

subplot(2,3,2); imshow(img_red);
26

subplot(2,3,3); imshow(img_blue);

subplot(2,3,4); imshow(img_green);

subplot(2,3,5); imshow(img_brg);

end

El orden de ploteo es el siguiente: primero se plotea la imagen que captura la webcam,


luego a la derecha se tiene la imagen que detecta solo color rojo, luego la imagen que
solo detecta color azul, se continua con la imagen que detecta solo color azul y por
último se plotea la imagen sumada con los tres colores detectados.

1.- Primero vamos a comprobar que se detecte objetos de color rojo.

Observamos que detecta el color rojo, lo demás es monocromático.

2.- Ahora verifiquemos que se detecte el color azul.


27

3.- Por último, verifiquemos que se detecte el color verde.

Se observa que el enchufe del audífono posee un leve color verde, el cual se puede
detectar, pero dependiendo de la posición que se tenga y debido a la luz no lo detecta en
toda la superficie.

Si colocamos varios objetos a la vez se puede observar que los detecta de manera
simultánea en tiempo real.
28

RETO 4: ESTIMACIÓN DE VELOCIDAD ANGULAR DE UN VENTILADOR

DE BAJA VELOCIDAD

El objetivo es determinar los RPM (revoluciones por minuto) de un ventilador. Para que

el reto sea alcanzable, use un ventilador y configúrelo a dos velocidades bajas para que

la Webcam pueda detectar la posición de un aspa y estimar los RPM.

Solución a base de fotografías tomadas con la Webcam luego de un intervalo de

tiempo:

1ra velocidad:

Primero se definieron los parámetros de la Webcam; así como su formato, el cual se

puede saber a través de Simulink y como se puede observar en Fig. 4.1.


29

Fig. 4.1. Parámetros de la Webcam en Simulink

Luego se configurará la Webcam para tomar fotografías y guardarlas en diferentes

archivos de imágenes .jpg usando el comando getsnapshot(y) de Matlab.

Fig. 4.2. Imágenes generadas por las capturas de la Webcam


30

A partir de las diferentes imágenes tomadas por la Webcam se eligen 2 (para este caso

se eligieron las imágenes 7 y 8).

Fig. 4.3. Imagen 7

Fig. 4.4. Imagen 8

El método de solución a efectuar a través de las 2 imágenes es determinar el centro del

ventilador (color celeste) y la posición de la marca morada adherida a un aspa de la

ventiladora de la imagen 7. Luego de la imagen 8 se obtendrá la nueva posición de la

marca morada adherida al aspa del ventilador. A continuación, se pasará a obtener la

posición relativa de la marca morada en la imagen 7 y 8 tomando como referencia el


31

centro del ventilador. Finalmente se aplica atan () a las coordenadas obtenidas y la

diferencia entre el tiempo en que fueron tomadas las fotografías será la respuesta.

Siguiendo con el método de solución:

Se importarán las 2 imágenes para luego identificar el centro del ventilador y posición

de la marca morada

Luego se pasa la imagen a HSV, para facilitar el proceso de detección del color

mediante las máscaras.

8000 10000

8000
6000

6000
4000
4000

2000
2000

0 0
0 0.2 0.4 0.6 0.8 1 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35

2500

2000
1000

500

0
32
0.7 0.75 0.8 0.85 0.9 0.95 1

Fig. 4.5. Histogramas del centro del ventilador

A partir de los histogramas se obtienen parámetros que facilitarán la detección de la

zona deseada. Luego, se definen intervalos para que los valores de H, S y V coincidan y

finalmente se obtiene la máscara HSV.

Por último, habiendo obtenido la máscara, se obtendrá sus dimensiones y se sacará un

promedio para las coordenadas X e Y. Dichas coordenadas, servirán como referencia

para la velocidad en RPM posteriormente.


33

Finalmente, se presenta la imagen de la máscara final habiendo usado el comando

imshow.

Fig. 4.6. Máscara del centro de la ventiladora

Una vez habiendo culminado con la primera máscara, se repite el mismo proceso para

determinar las primeras coordenadas de la marca morada.


34

2500 1000

2000 800

1500 600

1000 400

500 200

0 0
0 0.2 0.4 0.6 0.8 1 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35 0.4

1500

1000

500

0
0.5 0.6 0.7 0.8 0.9 1

Fig. 4.7. Histogramas de la primera posición de la marca morada

Nuevamente habiendo obtenido la máscara se calcula los valores promedios de X e Y.


35

Finalmente, se presenta la imagen de la máscara final habiendo usado el comando

imshow.

Fig. 4.8. Máscara de la marca morada en la imagen 7

De manera final, se repite el mismo proceso, pero ahora para las coordenadas de la

marca morada en la imagen 8.


36

1200 1200

1000 1000

800 800

600 600

400 400

200 200

0 0
0 0.2 0.4 0.6 0.8 0 0.05 0.1 0.15 0.2 0.25 0.3 0.35

1500

1000

500

0
0.55 0.6 0.65 0.7 0.75 0.8 0.85 0.9

Fig. 4.9. Histogramas de la segunda posición de la marca morada

Nuevamente habiendo obtenido la máscara se calcula los valores promedios de X e Y.


37

Finalmente, se presenta la imagen de la máscara final habiendo usado el comando

imshow.

Fig. 4.10. Máscara de la marca morada en la imagen 8

Habiendo obtenido todas las coordenadas necesarias para el cálculo de los RPM, se

utiliza el siguiente código Matlab.


38

Obteniendo finalmente el siguiente resultado:

Teniendo como valor de RPM 66.5378.

2da velocidad:

De manera similar se efectúa el mismo proceso para diferentes imágenes en una

velocidad distinta. Para este caso se eligieron las imágenes 9 y 10.

Fig. 4.11. Imagen 9


39

Fig. 4.12. Imagen 10

Habiendo obtenido todas las coordenadas necesarias para el cálculo de los RPM, se

utiliza el siguiente código Matlab.

Obteniendo finalmente el siguiente resultado:


40

Solución a base de fotografías tomadas con la Webcam en tiempo real:

1ra velocidad:

Primero se definen los parámetros de la Webcam, los cuales son iguales a los de la

solución anterior; además de otros parámetros empleados a lo largo del código.

Para utilizar la Webcam durante todo el periodo de tiempo requerido, se emplea un ciclo

while. Donde se capturará una fotografía y se procesará de la misma manera que en la

solución anterior.
41

Al igual que antes se utiliza HSV, obteniendo los parámetros de variación de los

histogramas

Y nuevamente se calcula el promedio de las coordenadas X e Y


42

Consiguientemente se aplica lo mismo para la posición de la marca morada. Hasta llegar

a la sección de cálculo de RPM.

A diferencia de la solución anterior, esta vez se agregó 2 variables promant para guardar

los valores anteriores de la posición de la marca morada y así hacer el cálculo respectivo

de las RPM. Obteniendo como resultado lo mostrado en el siguiente array.

El valor de las RPM se mantiene en 60 RPM aproximadamente.

2da velocidad:

Para las pruebas con la segunda velocidad se repite el mismo proceso con el ciclo while.
43

Esta vez, obteniendo los siguientes resultados en el array.

El valor de las RPM se mantiene en 80 RPM aproximadamente.

RETO 5: ESTABLECER UNA APLICACIÓN PRÁCTICA USANDO UN

DISPOSITIVO MÓVIL QUE SE VINCULE CON SU ESPECIALIDAD

La aplicación práctica elegida para desarrollar en un dispositivo móvil fue un detector


de color que muestre el color elegido sin alterar y el fondo monocromático. En este
caso, para la realización del detector se eligió al verde, debido a la disposición de
muchos objetos de ese color para realizar las pruebas.

Para realizar este detector de color se creó el siguiente diagrama de bloques en


Simulink.

El primer bloque de izquierda a derecha se encarga de captar la imagen de la cámara del


dispositivo móvil y entrega la señal separada en los componentes RGB, estos
componentes, antes de ser ingresados al bloque de detección, son concatenados para
formar la imagen que va a entrar en el bloque de detección.

El bloque de detección procesa la imagen y la entrega en sus componentes RGB para


que se pueda visualizar en la pantalla del dispositivo móvil por medio del último
bloque.

Ahora se procederá a revisar a más detalle la función encargada de la detección del


color verde.
44

Primero se transforma la matriz de RGB a HSV, ya que permite una mejor selección de
los colores a comparación de trabajar con los componentes RGB, y luego se separa en
cada uno de sus componentes H,S y V.

dot = rgb2hsv(img);

H = dot(:,:,1);

S = dot(:,:,2);

V = dot(:,:,3);

Luego se establecen los límites de detección para el color verde, determinados


experimentalmente variando los valores hasta ajustarse al color, estos límites son
ingresados dentro de condicionales para crear la máscara de detección del color en cada
uno de sus componentes.

masH = (H>=0.2470)&(H<=0.5251);

masS = (S>=0.5020);

masV = (V>=0.1176);

Para que funcionen adecuadamente la detección de color, las tres máscaras creadas
anteriormente deben cumplir con sus condiciones por lo que se define a la máscara
encargada de la detección del color de la siguiente manera.

mask = (masH)&(masS)&(masV);
45

Una vez obtenida la máscara, se usa el comando imopen que se encarga de expandir los
pixeles detectados en los alrededores de acuerdo con el argumento ingresado, esto a fin
de mejorar la detección del color en los bordes, en este caso se usan discos con radio de
5 píxeles.

mask = imopen(mask,strel('disk',5));

Una vez obtenida la máscara, se transforma a un valor entero de 8 bits y se calcula el


negativo de la máscara y se transforma en un entero de 8 bits.

mask = uint8(mask);

inv_mask = uint8(not(mask));

También se transforma la imagen de RGB a monocromática y se multiplica por el


negativo de la máscara para obtener una imagen a escala de grises con ceros en el lugar
donde la máscara detecta el color verde.

BW = rgb2gray(img);

BW = BW.*inv_mask;

Con todos los parámetros necesarios obtenidos, se procede a calcular las salidas. Cada
parámetro RGB de la imagen captada en la cámara del dispositivo móvil se multiplica
por la máscara de detección y luego se le suma la imagen monocromática para obtener
una imagen de salida con el color detectado sin alterar y su entorno monocromático.

Rout = uint8(img(:,:,1).*mask + BW);

Gout = uint8(img(:,:,2).*mask + BW);

Bout = uint8(img(:,:,3).*mask + BW);

Prueba de funcionamiento
46
47
48

Conclusiones

 Para el adecuado reconocimiento del color, se debe realizar las pruebas en

lugares adecuadamente iluminados para evitar errores en la detección del color.

 El programa presentado no está limitado a la detección del color verde, ya que

también puede detectar más colores, solo hay que cambiar los parámetros HSV

presentados en el código por otros que se ajusten mejor al color que se requiere

detectar.

 Es recomendable reducir la cantidad de procesamiento que se realiza sobre las

imágenes debido a que la aplicación está destinada a un dispositivo móvil de

menor capacidad de procesamiento que una computadora.

 Las funciones de imcrop, improfile, impixel e histogram son herramientas útiles

para la calibración de los filtros para los colores de una imagen.

 La función de imcrop permite seleccionar áreas específicas de una imagen para

un análisis más especializado de los componentes de los píxeles que se

encuentran dentro del recuadro seleccionado.

 Las funciones de improfile e histogram permiten observar la distribución de

cada una de las componentes de un conjunto de píxeles que se desean analizar,

mientras que la función impixel realiza una selección individual de píxeles.

 Los filtros de colores se definen de una manera más simple cuando la imagen

está expresada en el modelo HSV. Una excepción a esto es para el color negro o

para colores, donde es más conveniente trabajar con el modelo RGB.

 La implementación de una interfaz gráfica de usuario permite un desarrollo más

apreciable para la aplicación de cambio de colores dinámico.

También podría gustarte