Universidad Nacional de Ingeniería Facultad de Ingeniería Mecánica
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Ú
Índice
RETO 1: ENSAMBLAJE Y RESTAURACIÓN DE VEHÍCULOS ANTIGUOS................1
PASO 1:.................................................................................................................................24
PASO 2:.................................................................................................................................24
PASO 3:.................................................................................................................................25
PASO 4:.................................................................................................................................26
PASO 5:.................................................................................................................................27
1ra velocidad:.....................................................................................................................30
2da velocidad:....................................................................................................................40
1ra velocidad:.....................................................................................................................42
2da velocidad:....................................................................................................................44
Conclusiones.............................................................................................................................49
1
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.
Fig. Imágenes de los automóviles, a los cuales se les debe extraer los colores
Capa R Capa G
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
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.
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
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
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
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.
0.9
0.8
0.7
0.6
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.
180
160
140
120
100
80
60
40
20
0
0 20 40 60 80 100 120
Distance along profile
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.
Capa H capa S
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
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
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
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
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.
Fig. 2.8. Comparación entre los resultados de usar el modelo RGB y el HSV
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
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
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
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.
10000
500
5000
0 0
0 0.5 1 0.02 0.04 0.06 0.08 0.1 0.12
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.
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)
Fig. 2.24. Píxel escogido, mostrando los valores de las componentes en el modelo RGB
Fig. 2.23. Resultado del cambio de color del color 6 (negro) a un Hue de 90 (verde)
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.
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
PASO 1:
Primero se inicializa la webcam, se crea la variable cam donde se podrá usar esta
con el comando snapshot.
cam = webcam(1);
while 1
% Captura de la imagen
im = snapshot(cam);
PASO 2:
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
r = double(im(:,:,1));
g = double(im(:,:,2));
b = double(im(:,:,3));
BN = rgb2gray(im);
% Separamos el rojo
objeto_r = r - b - g;
aobjetor = medfilt2(aobjetor);
aobjetor = medfilt2(aobjetor);
masc_p = 1 - aobjetor;
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;
PASO 3:
objeto_b = b - r - g;
aobjetob = medfilt2(aobjetob);
aobjetob = medfilt2(aobjetob);
masc_b = 1- aobjetob;
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;
PASO 4:
objeto_g = g - r - b;
aobjetog = medfilt2(aobjetog);
aobjetog = medfilt2(aobjetog);
masc_g = 1 - aobjetog;
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;
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.
suma_brg = 1 - arb;
grises = double(BN).*suma_brg/255;
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
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
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
tiempo:
1ra velocidad:
A partir de las diferentes imágenes tomadas por la Webcam se eligen 2 (para este caso
diferencia entre el tiempo en que fueron tomadas las fotografías será la respuesta.
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
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
zona deseada. Luego, se definen intervalos para que los valores de H, S y V coincidan y
imshow.
Una vez habiendo culminado con la primera máscara, se repite el mismo proceso para
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
imshow.
De manera final, se repite el mismo proceso, pero ahora para las coordenadas de la
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
imshow.
Habiendo obtenido todas las coordenadas necesarias para el cálculo de los RPM, se
2da velocidad:
Habiendo obtenido todas las coordenadas necesarias para el cálculo de los RPM, se
1ra velocidad:
Primero se definen los parámetros de la Webcam, los cuales son iguales a los de la
Para utilizar la Webcam durante todo el periodo de tiempo requerido, se emplea un ciclo
solución anterior.
41
Al igual que antes se utiliza HSV, obteniendo los parámetros de variación de los
histogramas
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
2da velocidad:
Para las pruebas con la segunda velocidad se repite el mismo proceso con el ciclo while.
43
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);
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));
mask = uint8(mask);
inv_mask = uint8(not(mask));
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.
Prueba de funcionamiento
46
47
48
Conclusiones
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.
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