Aplicaciones de Visión por Computador en Farmacia Hospitalaria

Anuncio
Dpto. de Ingeniería de Sistemas y Automática
Escuela Técnica Superior de Ingeniería
Universidad de Sevilla
Aplicaciones de Visión por Computador
en Farmacia Hospitalaria
Proyecto Fin de Carrera
Autor: Julián Ávalos Juárez
Director: José María Maestre Torreblanca
Sevilla, Marzo 2016
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
AUTOR: Ávalos Juárez, Julián
DIRECTOR: Maestre Torreblanca, José María
ENTIDAD COLABORADORA: Hospital Universitario Reina Sofía, Córdoba
RESUMEN DEL PROYECTO
Hoy en día, se antoja necesario tener un control actualizado sobre los activos de
la farmacia de un hospital. Por ello, se realizan inventarios constantemente para llevar
a cabo una adecuada gestión de stocks, que permita, por una parte, satisfacer las
necesidades sanitarias de los pacientes internos y de las consultas externas del
hospital de una manera eficiente, y por la otra optimizar el coste económico que ello
supone.
Sin embargo, realizar estos inventarios con una frecuencia mayor que la
deseada, supone el empleo de horas de trabajo del personal del hospital. Estas horas
de trabajo podrían reducirse con la ayuda de técnicas de visión por computador que
realicen tareas, tales como, la contabilización del número de unidades de un
medicamento disponible, a través de una simple fotografía.
Éste es, de hecho, el objetivo del presente proyecto: el estudio y aplicación de
técnicas de visión por computador en la farmacia hospitalaria, que permitan al
personal farmacéutico la realización de otras tareas gracias a las facilidades que estas
técnicas proporcionan.
Para llevar a cabo este estudio, hemos contado con la colaboración del servicio
de farmacia del Hospital Universitario Reina Sofía de Córdoba.
2
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
COMPUTER VISION APPLICATIONS IN
HOSPITAL PHARMACY
AUTHOR: Ávalos Juárez, Julián
DIRECTOR: Maestre Torreblanca, José María
COOPERATING ENTITY: Hospital Universitario Reina Sofía, Córdoba
PROJECT SUMMARY
Hospitals need nowadays to improve their inventory management at the pharmacy to
save costs while guaranteeing the satisfaction of the clinical needs. Image processing
techniques can be helpful in this regard and in this project they are applied to help two
Spanish hospitals, Reina Sofía and San Juan de Dios, with the inventory management
of their pharmacies.
3
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
ÍNDICE GENERAL
CAPÍTULO 1: STOCKS E INVENTARIOS .......................................................................................6
1.1 CONCEPTO DE STOCK ..................................................................................................... 7
1.2 CONCEPTO DE INVENTARIO .......................................................................................... 7
1.3 GESTIÓN DE STOCKS ....................................................................................................... 8
CAPÍTULO 2: INTRODUCCIÓN A LA VISIÓN POR COMPUTADOR ...............................................9
2.1 OBJETIVO DE LA VISIÓN ARTIFICIAL .............................................................................. 10
2.2 REPRESENTACIÓN DE LA REALIDAD .............................................................................. 10
2.2.1 IMÁGENES ............................................................................................................ 10
2.2.2 ESCENAS 3D.......................................................................................................... 11
2.2.3 SECUENCIAS ANIMADAS ....................................................................................... 11
2.3 ETAPAS DE UN SISTEMA DE VISIÓN .............................................................................. 12
CAPÍTULO 3: VISIÓN POR COMPUTADOR EN MATLAB ........................................................... 13
3.1 INTRODUCCIÓN ............................................................................................................ 14
3.2 IMAGE PROCESSING TOOLBOX ..................................................................................... 14
3.2.1 FILTRADO Y REALZADO DE IMÁGENES .................................................................. 17
3.2.2 SEGMENTACIÓN DE IMÁGENES ............................................................................ 23
3.2.2 CLASIFICACIÓN Y RECONOCIMIENTO .................................................................... 28
3.3 COMPUTER VISION SYSTEM TOOLBOX ......................................................................... 29
3.3.1 PUNTOS DE INTERÉS ............................................................................................. 30
3.3.2 DETECTOR SURF ................................................................................................... 30
CAPÍTULO 4: ADQUISICIÓN DE IMÁGENES ............................................................................. 40
4.1 ADQUISICIÓN DE IMÁGENES CON WEBCAM ................................................................. 41
4.2 ADQUISICIÓN DE IMÁGENES CON KINECT..................................................................... 43
CAPÍTULO 5: APLICACIÓN AL CONTEO DE UNIDOSIS .............................................................. 46
5.1 SERVICIO DE FARMACIA ............................................................................................... 47
5.2 DISTRIBUCIÓN UNIDOSIS DE MEDICAMENTOS ............................................................. 48
5.3 CONTEO AUTOMATIZADO DE UNIDOSIS ....................................................................... 51
5.3.1 CASO SENCILLO .................................................................................................... 52
5.3.2 CASO GENERALIZADO ........................................................................................... 57
4
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.3.3 EJEMPLOS............................................................................................................. 63
CAPÍTULO 6: APLICACIÓN AL CONTEO DE CAJAS .................................................................... 71
6.1 INTRODUCCIÓN ............................................................................................................ 72
6.2 CONTEO DE CAJAS EN DOS DIMENSIONES .................................................................... 72
6.3 CONTEO DE CAJAS EN TRES DIMENSIONES ................................................................... 89
6.3.1 EJEMPLOS............................................................................................................. 96
6.3.2 CONTEO DE CAJAS CON KINECT .......................................................................... 109
CAPÍTULO 7: CONCLUSIONES................................................................................................ 123
7.1 CONCLUSIONES .......................................................................................................... 124
BIBLIOGRAFÍA....................................................................................................................... 125
5
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 1
STOCKS E INVENTARIOS
6
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
1.1
CONCEPTO DE STOCK
Stock es una palabra de origen inglés, y según el diccionario de la RAE se
refiere a existencias (f. pl. Mercancías destinadas a la venta, guardadas en un
almacén o tienda). Algunos libros traducidos al castellano de originales
anglosajones, emplean la palabra inventarios en lugar de stocks. No obstante, en
este proyecto nos estaremos refiriendo a existencias en cada mención a dicho
anglicismo.
Si queremos profundizar un poco más en cuanto al significado de stock que
nos concierne, podemos consultar otros autores. Por ejemplo, para Parra (2005),
“stock es un término que indica un depósito de mercancías, materias primas u otro
objeto cualquiera. Es un concepto estático” [1], mientras que otros autores como
Rambaux (1988), definieron los stocks como “provisiones de artículos en espera
para su utilización” [2], aunque esta definición no presenta a los stocks como
bienes económicos que son.
No ocurre lo mismo con la expresión “gestión de stocks”, que es un proceso
que no se detiene en el tiempo, sino que supone una actividad continuada. Es un
concepto dinámico.
1.2
CONCEPTO DE INVENTARIO
Análogamente al apartado anterior, el diccionario de la RAE define inventario
como
(m. Asiento de los bienes y demás cosas pertenecientes a una persona o
comunidad, hecho con orden y precisión). Es decir, realizar un inventario sobre los
elementos existentes en la farmacia de un hospital, consistirá en saber qué cantidad
de medicamentos se encuentran disponibles físicamente en dicha farmacia.
Como hemos dicho anteriormente, nosotros no nos referiremos a inventario
como a stock, sino en resumidas cuentas, como al proceso de determinar cuál es el
stock del que disponemos en la farmacia.
La realización de inventarios es algo muy importante para tener un control real
sobre los activos de la farmacia.
7
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
1.3
GESTIÓN DE STOCKS
Actualmente, se ha llegado a la conclusión de que el hecho de almacenar
existencias supone un alto coste. En este sentido, Parra (2005), se refiere a la
expresión Gestión de Stock Cero o el Just in Time [1].
El objetivo de la farmacia debe ser, por tanto, mantener el volumen de stock al
más bajo nivel, compatible con el suministro regular de las necesidades del hospital.
Los objetivos a conseguir deben ser [5], [27]:

Minimizar el importe económico de los medicamentos almacenados en el
hospital

Minimizar las roturas de stock

Procurar una eficiente utilización de los recursos

Satisfacer las necesidades de los pacientes y hacerlo de una manera cómoda
Para llevar a cabo la gestión de los activos del hospital, el personal farmacéutico
debe realizar inventarios de manera periódica. En dichos inventarios, se informará del
valor numérico real de las existencias de los distintos tipos de medicamentos, en ese
instante en concreto.
Estas tareas de inventarios suelen resultar bastante tediosas, y son llevadas a
cabo por el propio personal farmacéutico del hospital. Al emplear tiempo útil de trabajo
en estas tareas, se resta tiempo a otras en las que sí que son necesarios
conocimientos farmacéuticos, por lo que se produce un gasto de tiempo innecesario.
Por tanto, la máxima automatización posible se antoja fundamental para ahorrar
tiempos y un mejor funcionamiento del sistema farmacéutico.
La visión por computador puede resultar importante en este ámbito, y esto es lo
que desarrollaremos en los próximos capítulos.
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 2
INTRODUCCIÓN A LA VISIÓN POR
COMPUTADOR
9
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
2.1 OBJETIVO DE LA VISIÓN ARTIFICIAL
La visión artificial tiene como finalidad la extracción de información del mundo
físico a partir de imágenes, utilizando para ello un ordenador. Se trata de un objetivo
ambicioso y complejo que actualmente se encuentra en una etapa primitiva [11].
2.2 REPRESENTACIÓN DE LA REALIDAD
Un sistema de visión artificial debe actuar sobre una representación de la
realidad que le proporciona información sobre propiedades como el brillo, colores o las
formas. Estas representaciones pueden presentarse en forma de imágenes estáticas,
escenas tridimensionales o imágenes en movimiento.
2.2.1 IMÁGENES
Una imagen bidimensional es una función que, a cada par de coordenadas (x,y),
asocia un valor relativo a alguna propiedad del punto que representa, como por
ejemplo, el brillo o el matiz.
Es decir, una imagen digital acromática o en escala de grises, puede ser
representada por una matriz cuyas celdas se corresponden con los píxeles de la
misma. Cada elemento de la matriz puede dar información sobre el brillo o el matiz de
cada píxel de la imagen.
Existen diversas formas de representar digitalmente imágenes en color. La más
común es la representación RGB. Tal y como se muestra en la Figura 1, una imagen
RGB puede representarse asociando a cada punto, una terna de valores que indica la
intensidad de tres planos (rojo, verde y azul). En este caso, son necesarias tres
matrices para la representación de una imagen a color RGB, cada una de las cuales
representa la intensidad de cada plano de color para cada píxel de la imagen.
10
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 1. Descomposición RGB [9].
2.2.2 ESCENAS 3D
Otra posible forma de representación de la realidad, consiste en asignar a cada
punto del espacio que pertenece a un objeto (x,y,z), una propiedad del punto. Al
trabajar con imágenes 3D, como se tiene la forma de los objetos, la información de
brillo y color puede no ser tan relevante.
2.2.3 SECUENCIAS ANIMADAS
Un punto con suficiente brillo que parpadea a una frecuencia superior a 25
pulsos por segundos, es distinguido por nuestros sentidos como un punto fijo.
Cuando se representan sucesiones de imágenes estáticas, a una frecuencia
superior a 25 pps, el sistema visual humano no es capaz de distinguir el cambio y lleva
a la (errónea) interpretación de movimiento, consiguiéndose el efecto de secuencia
animada al que nos referimos.
11
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
2.3 ETAPAS DE UN SISTEMA DE VISIÓN
Diferentes estudios han comprobado que, el ser humano captura la luz a través
de los ojos y que esta información circula a través del nervio óptico, llegando al
cerebro y procesándose en éste.
La visión artificial, en un intento de reproducir digitalmente este comportamiento,
define cuatro etapas o fases:

La primera etapa, se trata de una etapa completamente sensorial. Consiste en
la captura o adquisición de las imágenes digitales, típicamente con un CCD
(dispositivo de carga acoplada). En las cámaras digitales, un CCD es un sensor
con diminutas células fotoeléctricas que registra las imágenes que son
capturadas.

En la segunda fase, el preprocesado, se prepara la imagen, eliminando
partes no útiles o que causan algún tipo de distorsión y se resaltan partes
útiles. Este preprocesado se realiza mediante la aplicación de filtros y
transformaciones geométricas.

A continuación, en la segmentación, se aíslan elementos de interés para su
posterior interpretación.

Por último, se llega a la etapa de reconocimiento o clasificación. En ella, la
finalidad es distinguir objetos segmentados, gracias al análisis de
características que previamente se han establecido, para diferenciarlos.
Figura 2. Diagrama de bloques de las etapas [11].
12
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 3
VISIÓN POR COMPUTADOR EN MATLAB
13
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
3.1 INTRODUCCIÓN
En sus últimas versiones, Matlab proporciona al usuario varias extensiones para
el tratamiento de imágenes.
La primera de ellas se trata de la extensión llamada Image Processing
Toolbox™. Image Processing Toolbox™ proporciona un conjunto completo de
algoritmos, funciones y aplicaciones de referencia estándar para el procesamiento,
análisis y visualización de imágenes, así como para el desarrollo de algoritmos. Puede
llevar a cabo análisis de imágenes, segmentación, mejora, reducción de ruido,
transformaciones geométricas y registro. Soporta una gran cantidad de tipos de
imágenes y, sus características y aplicaciones de visualización, permiten la
exploración tanto de imágenes como de videos.
La segunda extensión se denomina Computer Vision System Toolbox™, y ofrece
algoritmos, funciones y aplicaciones para el diseño y simulación de sistemas de visión
por computador y procesamiento de vídeo. Con marcos basados en aprendizaje
automático, es posible la detección de objetos, reconocimiento de los mismos y
desarrollar sistemas de recuperación de imagen.
Por otra parte, en Matlab, es posible trabajar con imágenes o vídeos
almacenados en un dispositivo electrónico, pero también permite la captura y
tratamiento en tiempo real. Es posible la conexión de una cámara u otros dispositivos
de captura, de manera que el procesado sea dinámico sobre el entorno real. Para todo
esto, existe la extensión denominada Image Acquisition Toolbox ™, que veremos con
detalle posteriormente, al igual que las dos extensiones anteriores.
3.2 IMAGE PROCESSING TOOLBOX
En este apartado, desarrollaremos algunas de las funciones que proporciona
Matlab en su pack de procesado de imágenes, ya que nos serán útiles en el desarrollo
práctico del proyecto.
TIPOS DE IMAGENES EN MATLAB
El pack de procesado de imágenes define cuatro tipos de imágenes.
Estos tipos determinan la forma en la que Matlab interpreta los valores de las
matrices como píxeles de una imagen. Dichos tipos de imágenes y
susaracterísticas, quedan recogidas en la Tabla 1 y las Figuras 4, 5,6 y 7.
14
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Tabla 1. Tipos de imágenes en Matlab.
TIPO DE IMAGEN
INTERPRETACIÓN
Binaria
Imagen representada con una matriz
lógica que contiene ceros y unos,
interpretados como negros y blancos,
respectivamente.
Indexada
Matriz del tipo logical, uint8, uint16 single
o double. Se trata de una imagen cuyos
píxeles tienen valores que son índices
directos a un mapa de color RGB.
RGB (color)
Se trata de una imagen cuyos píxeles son
especificados por 3 valores, uno para
cada componente de color (rojo, verde y
azul) de cada píxel. En Matlab, una
imagen RGB es representada por una
matriz mxnx3 de clase uint8, uint16, o
double.
Escala de grises
Es una imagen cuyos valores de píxeles
corresponden a una escala de grises. En
MATLAB, una imagen de intensidad es
representada por un array de clase uint8,
uint16, o double.
Figura 4. Imagen Binaria Matlab [9].
15
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 5. Imagen indexada [9].
Figura 6. Imagen RGB [9].
Figura 7. Imagen en escala de grises [9].
16
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
3.2.1 FILTRADO Y REALZADO DE IMÁGENES
A continuación, analizaremos algunas de las funciones que implementa Matlab
para el preprocesamiento de imágenes.
OPERACIONES ARITMÉTICAS
Las operaciones aritméticas más comunes en el procesamiento de imágenes
son: suma, resta, multiplicación y división. Para que sea posible llevar a cabo dichas
operaciones, ambas imágenes deben tener el mismo ancho y alto.
En la Figura 8 se muestra la suma de dos imágenes, que se realiza de la forma
𝐹 𝑥, 𝑦 = 𝐺 𝑥, 𝑦 + 𝑉(𝑥, 𝑦), mediante el comando 𝑖𝑚𝑎𝑑𝑑.
F = imadd(G, V)
imview(F)
También es posible aumentar el brillo de una imagen, sumando un valor
constante a cada píxel. En la Figura 9 se muestra el efecto de sumar un escalar a una
imagen, en este caso, 50. La transformación se realiza de la forma 𝐹 𝑥, 𝑦 = 𝐺 𝑥, 𝑦 +
𝐾
F = imadd(G, 50)
imview(F)
De igual manera, es posible realizar una resta de imágenes 𝐹 𝑥, 𝑦 = 𝐺 𝑥, 𝑦 −
𝑉(𝑥, 𝑦) (Figura 10), y también la resta de una constante K. Este último caso,
corresponderá con un oscurecimiento de la imagen que está siendo tratada (Figura
11).
+
=
Figura 8. Suma de imágenes.
17
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
→
Figura 9. Aumento de brillo.
-
=
Figura 10. Resta de imágenes.
→
Figura 11. Reducción de brillo.
Además, Matlab permite otras realizar otras operaciones lógicas aritméticas con
imágenes como, las funciones AND, OR o NOT.
18
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
AJUSTE DE LA INTENSIDAD
La función imadjust permite ampliar, reducir, y generalmente, modificar los
rangos de intensidad de una imagen a unos nuevos rangos de intensidad en la imagen
resultante. Esta función puede ser aplicada a imágenes en escala de grises y de color.
𝐽 = 𝐼𝑚𝑎𝑑𝑗𝑢𝑠𝑡(𝐼), mapea los valores de intensidad en la imagen en escala de
grises I a nuevos valores, de tal forma que se obtiene el 1% de los datos saturados en
las zonas claras y oscuras. De esta forma, se logra incrementar el contraste en la
imagen resultante J.
Imadjust también permite la siguiente sintaxis:
𝐽 = 𝑖𝑚𝑎𝑑𝑗𝑢𝑠𝑡(𝐼, [𝑙𝑜𝑤_𝑖𝑛 𝑕𝑖𝑔𝑕_𝑖𝑛], [𝑙𝑜𝑤_𝑜𝑢𝑡 𝑕𝑖𝑔𝑕_𝑜𝑢𝑡], 𝑔𝑎𝑚𝑚𝑎)
De esta forma, se transforman los valores de intensidad de la imagen J, que
están entre el intervalo
[𝑙𝑜𝑤_𝑖𝑛 𝑕𝑖𝑔𝑕_𝑖𝑛], en valores del intervalo de salida
, [𝑙𝑜𝑤_𝑜𝑢𝑡 𝑕𝑖𝑔𝑕_𝑜𝑢𝑡] . El parámetro gamma especifica la forma de la curva y, si se
omite, toma el valor 1 (Figura 12).
En el siguiente ejemplo, aplicamos la transformación imadjust, con una
expansión de los valores de grises de la imagen de entrade entre 0.5 y 0.75, a unos
valores entre 0 y 1.
𝐽 = 𝑖𝑚𝑎𝑑𝑗𝑢𝑠𝑡(𝐼, 0.5 0.75 , 0 1 )
%Mapeo de intensidad
𝑠𝑢𝑏𝑝𝑙𝑜𝑡 1,2,1
%Representación de la imagen original
𝑖𝑚𝑠𝑕𝑜𝑤(𝐼)
𝑠𝑢𝑏𝑝𝑙𝑜𝑡(1,2,2)
%Representación de la imagen resultante
𝑖𝑚𝑠𝑕𝑜𝑤(𝐽)
Figura 12. Mapeo de intensidad según gamma [33].
19
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 13. Imagen tras ajuste de intensidad.
HISTOGRAMA DE UNA IMAGEN
Un histograma ilustra en un gráfico la manera en la cual se encuentran
distribuidos los píxeles en una imagen, según la cantidad de píxeles en cada nivel de
intensidad de color. A través de él, es posible obtener información acerca de las
sombras (parte izquierda del histograma), los tonos medios (centro), o las
iluminaciones (parte derecha).
El histograma de una imagen en niveles de gris, proporciona información sobre
el número de píxeles que existen para cada nivel de intensidad. En una imagen RGB,
serán necesarios tres histogramas, uno para cada color.
En la Figura 14 se muestra el histograma de una imagen a escala de grises,
utilizando la función 𝐼𝑚𝑕𝑖𝑠𝑡(𝐼)
Figura 14. Histograma de imagen en escala de grises.
20
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
El proceso de ecualizado de un histograma (Figura 15) mejora el contraste de
una imagen, y distribuye uniformemente los diferentes niveles de intensidad. Suele
mejorar la calidad de imágenes con gran saturación.
El ecualizado está presente en Matlab con la función 𝑕𝑖𝑠𝑡𝑒𝑞.
Figura 15. Ecualización de histograma [15].
Como se puede apreciar claramente en la Figura 15, se ha producido una
redistribución de las intensidades de la imagen, en la que anteriormente, había un
excesivo valor de píxeles a la izquierda (imagen muy saturada). De esta manera, es
posible la apreciación de detalles que antes no eran posibles de observar a simple
vista, debido a la saturación de la imagen primitiva.
FILTROS SUAVIZANTES DE PASO BAJO
Los filtros suavizantes suelen emplearse en el preprocesado para reducir el ruido
existente en una imagen [12].
El filtrado paso bajo espacial, está basado en el promedio de los píxeles
adyacentes al píxel que se evalúa en cada momento (vecindad, 3x3…).
El filtrado de promediado de imágenes en Matlab es una operación lineal, y
está implementado con el comando imfilter.
21
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
A continuación se muestra un ejemplo de implementación de este filtro:
I=imread ‘imagen.jpg’ ;
J = imnoise(I,'salt & pepper',0.02);
% añade ruido sal y pimienta a la imagen
h=fspecial('average',5);
% crea un tipo especial de filtro
K=imfilter(J,h);
% aplica el filtro de promedio
Figura 16. Imagen original, imagen con ruido e imagen con filtro media [12].
Otro filtro de paso bajo es el filtro de la mediana. Está basado en la sustitución
del valor de un píxel por el de la mediana del conjunto formado por el mismo y sus
ocho vecinos. Es una operación no lineal que se suele utilizar en el procesamiento de
imágenes para reducir el ruido "sal y pimienta". La mediana de filtrado es más efectiva
cuando el objetivo es reducir el ruido y al mismo tiempo, preservar los bordes.
I = imread ‘imagen.jpg’ ;
J = imnoise(I,'salt & pepper',0.02);
% Añade ruido sal y pimienta a la imagen
K = medfilt2(J);
% Aplica el filtro de la mediana
Figura 17. Imagen original, imagen con ruido e imagen con filtro mediana [12].
22
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Como podemos observar, en este caso de ruido, es mucho más efectivo el filtro
de mediana, ya que se ha eliminado el ruido y conservado los bordes de una manera
más efectiva.
3.2.2 SEGMENTACIÓN DE IMÁGENES
La segmentación es un proceso que consiste en, dividir una imagen digital en
regiones similares con respecto a una o varias características (como por ejemplo el
color, forma, tamaño…). Esto se realiza con el fin de facilitar el posterior análisis y
reconocimiento automático. Se trata de una de las áreas más importantes y complejas
de la visión artificial.
En Matlab, los algoritmos de segmentación se basan generalmente en dos
propiedades básicas acerca de los niveles de grises de una imagen: la umbralización,
discontinuidad y similitud.
UMBRALIZACIÓN
La umbralización permite convertir una imagen en escala de grises o en color, en
una imagen binaria. De esta forma, los objetos de interés son representados (1 ó 0)
con un valor diferente a los píxeles del fondo (0 ó 1). Es una técnica de segmentación
rápida, con un coste computacional barato que, sin embargo, no resulta siempre
efectiva cuando se trabaja con imágenes del mundo real. Esto es debido a la
presencia de ruidos, brillos o de imágenes con histogramas planos.
El método de Otsu es uno de los mejores métodos de selección de umbral para
imágenes del mundo real. Matlab posee la función graythresh, que calcula el umbral
de la imagen global, usando el método de Otsu.
Presenta la siguiente sintaxis:
𝑇 = 𝑔𝑟𝑎𝑦𝑡𝑕𝑟𝑒𝑠𝑕 (𝐼)
Donde I es la imagen original y T es el umbral devuelto, situado entre el intervalo [0 1].
𝐼 = 𝑖𝑚𝑟𝑒𝑎𝑑 ′𝑝𝑙𝑎𝑐𝑎. 𝑗𝑝𝑔′ ;
𝑇 = 𝑔𝑟𝑎𝑦𝑡𝑕𝑟𝑒𝑠𝑕 (𝐼)
% Calcula el valor de umbral óptimo
𝑏𝑤 = 𝑖𝑚2𝑏𝑤 𝐼, 𝑇 ;
% Transforma a imagen binaria
𝑖𝑚𝑠𝑕𝑜𝑤(𝑏𝑤)
23
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 18. Umbralización de imagen con método Otsu.
DETECCIÓN DE BORDES
En una imagen, los bordes o contornos, corresponden a los límites de los objetos
presentes en la misma. Para hallar los contornos, buscamos lugares de la imagen en
los que la intensidad de los píxeles cambia de una manera brusca.
La detección de contornos se encuentra implementada en Matlab a través del
comando edge, y es aplicado a imágenes de intensidad.
La sintaxis es la siguiente:
𝐵𝑊 = 𝑒𝑑𝑔𝑒(𝐼, 𝑚𝑒𝑡𝑜𝑑);
Esta función devuelve una imagen binaria correspondiente a los bordes de la
imagen de entrada. Los métodos más importantes que admite son: sobel, prewitt,
roberts y canny.
Además, es posible ajustar un umbral T de sensibilidad, de manera que los
cambios de intensidad no superiores a ese umbral, no sean considerados como
bordes.
𝐵𝑊 = 𝑒𝑑𝑔𝑒 (𝐼, 𝑚𝑒𝑡𝑕𝑜𝑑, 𝑇);
Figura 19. Imagen a escala de grises.
24
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 20. Detección de bordes con los diferentes métodos.
CRECIMIENTO DE REGIONES
El crecimiento de regiones es un procedimiento a través del cual, son agrupados
píxeles o subregiones en regiones mayores.
El procedimiento más sencillo es el denominado, agregación de píxeles, que
comienza a partir de un conjunto de píxeles de partida (píxeles semilla), de forma que,
a partir de cada semilla van creciendo regiones añadiendo píxeles a estas semillas. Se
agregan aquellos píxeles vecinos que tienen propiedades similares.
Dos problemas fundamentales en el crecimiento de regiones son: por una parte,
la elección de semillas que representen adecuadamente a las regiones de interés, y
por otra, la elección de propiedades adecuadas que puedan añadir píxeles durante el
proceso de crecimiento [26].
La selección de los puntos de partida suele depender de la naturaleza de la
imagen que se pretende segmentar, y la selección del criterio de similitud depende no
sólo del problema considerado, sino también del tipo de imagen disponible.
25
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
En Matlab, dos funciones a tener en cuenta en la distinción de regiones son
bwlabel y RegionProps.
Antes de entrar en detalles en estos comandos, sería conveniente recordar el
concepto de vecindad y conectividad.
Los píxeles que rodean directamente a un píxel de coordenadas (x, y) son
definidos como los vecinos de p. El conjunto de 4 píxeles que colindan horizontal y
verticalmente con p tienen vecindad 4, y están localizados en las coordenadas:
(x+1, y), (x-1, y), (x, y+1), (x, y-1).
Cuando se toman además los píxeles localizados diagonalmente a p, se habla
de vecindad 8, y las coordenadas de estos píxeles son:
(x+1, y+1), (x+1, y-1), (x-1,y+1), (x-1,y-1).
Figura 21. Vecindad 4 y vecindad 8 [11].
El concepto de conectividad de píxeles se utiliza como criterio de decisión en la
definición de regiones de una imagen.
Los objetos presentes en una imagen ocupan un área definida por sus bordes.
Los píxeles pertenecientes a esa región se consideran conectados con conectividad 4
u 8, si cumplen las condiciones de adyacencia descritas anteriormente (vecindad 4 u
8), y además, si, sus respectivos niveles de gris son semejantes, o difieren en un
rango de valores definido.
En Matlab, la función bwlabel etiqueta los componentes conectados en una
imagen binaria. Presenta la siguiente sintaxis:
𝐿 = 𝑏𝑤𝑙𝑎𝑏𝑒𝑙(𝑏𝑤, 𝑛)
Retorna una matriz L del mismo tamaño que la imagen bw, que contiene
etiquetas para los objetos conectados en bw. El valor n podría ser 4 u 8, donde se
especifica si buscamos objetos 4-conectados u 8-conectados, respectivamente. Si el
valor argumento n se omite, toma por defecto el valor 8.
26
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Se muestra a continuación un ejemplo del uso de la función bwlabel con la
siguiente imagen (Figuras 22 y 23)
𝐼 = 𝑖𝑚𝑟𝑒𝑎𝑑 ′𝑓𝑖𝑔𝑢𝑟𝑎𝑠. 𝑗𝑝𝑔′ ;
𝑢𝑚𝑏𝑟𝑎𝑙 = 𝑔𝑟𝑎𝑦𝑡𝑕𝑟𝑒𝑠𝑕(𝐼);
𝐼 = 𝑖𝑚2𝑏𝑤(𝐼, 𝑢𝑚𝑏𝑟𝑎𝑙);
% Binariza la imagen
𝐿 = 𝑏𝑤𝑙𝑎𝑏𝑒𝑙(𝐼);
% Crea la matriz de regiones
El resultado es una matriz con etiquetas para cada uno de los objetos con
valores de 0 a N, siendo N el número de objetos.
Figura 22 y 23. Imagen a segmentar y Matriz de segmentación L.
La función regionprops mide las propiedades de las regiones de una imagen. Su
sintaxis es:
𝑆𝑇𝐴𝑇𝑆 = 𝑟𝑒𝑔𝑖𝑜𝑛𝑝𝑟𝑜𝑝𝑠 (𝐿, 𝑝𝑟𝑜𝑝𝑖𝑒𝑑𝑎𝑑𝑒𝑠)
Esta función devuelve la medida de un grupo de propiedades para cada región
etiquetada en la matriz L. En la Tabla 2 se muestran muestra algunas de las
propiedades que ofrece esta función.
27
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Tabla 2. Propiedades del comando regionprops.
PROPIEDAD
Area
DESCRIPCIÓN
Calcula el área en píxeles de la región
BoundingBox
Calcula la posición y dimensiones del
mínimo rectángulo que envuelve la región
Centroid
Posición del centroide de la región
Eccentricity
Número escalar que da la excentricidad
de la imagen
MayorAxisLength
Longitud en píxeles del eje mayor de la
región
MinorAxisLength
Longitud en píxeles del eje mejor de la
región
Orientation
Ángulo en grados entre el eje x y el eje
mayor de la región
Image
Imagen binaria del mismo tamaño que la
frontera
3.2.2 CLASIFICACIÓN Y RECONOCIMIENTO
La etapa de clasificación suele ser el último objetivo de un sistema de visión
artificial. Un sistema de reconocimiento de caracteres (OCR) clasifica una imagen
como letra determinada, o un sistema de reconocimiento dactilar identifica una huella
como perteneciente a una persona.
Los algoritmos de clasificación tienen la misión de distinguir entre distintos
objetos de un conjunto definido como colección de clases o universo de trabajo [12].
Un clasificador toma un conjunto de características como entrada al proceso y
produce como salida una clase etiquetada.
Las características discriminantes o rasgos son componentes que permiten
determinar, de manera unívoca, a qué clase (de una colección de clases), puede
pertenecer un objeto. Los comandos bwlabel y regionprops, que explicamos de
manera detallada anteriormente, pueden proporcionar estas características
discriminantes, tales como el área o la excentricidad.
28
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Se suele buscar un conjunto mínimo de características que puedan determinar
de manera unívoca a qué clase pertenece cada elemento del universo de trabajo.
El coste del cálculo para la obtención de estas características debe ser
razonable, así como el tiempo de obtención de las mismas. Además, no debe haber
correlación entre distintas características, y se debe tener en cuenta que objetos de
una misma clase, pueden tener vectores de características con unos valores similares,
por lo que la fiabilidad debe ser importante.
Una vez determinadas las características a analizar, y obtenidas las mismas, la
clasificación de un objeto comienza por la obtención de su patrón.
El siguiente paso consistirá en determinar la proximidad o grado de pertenencia
de este patrón a cada una de las clases que existen en el universo, asignando el
objeto a aquellas clases con las que el grado de parecido sea mayor.
Figura 24. Proceso de clasificación de una imagen [12].
3.3 COMPUTER VISION SYSTEM TOOLBOX
Esta extensión de Matlab ofrece algoritmos, funciones y aplicaciones para el
diseño y simulación de sistemas de visión por computador y procesamiento de video.
Ofrece soluciones capaces de detectar características de una imagen de manera que
sea posible la detección de un objeto, su seguimiento a tiempo real, e incluso, la
estimación del movimiento.
Uno de los aspectos más estudiados en aplicaciones de visión por computador,
es la correspondencia entre dos imágenes. Este tipo de tareas suele ser empleado por
una gran cantidad de aplicaciones para el reconocimiento de objetos, como por
ejemplo, si deseamos buscar un objeto (A) dentro de una imagen (B).
29
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
La correspondencia de imágenes abarca tres etapas: la detección de puntos de
interés en cada una de las imágenes, la descripción de los mismos y el
emparejamiento de puntos de interés de ambas imágenes.
El primer paso, como hemos indicado, ha de ser la búsqueda de puntos en la
imagen, de manera que aporten información realmente importante.
El siguiente, describir la zona en cuestión, ya que estos puntos nos aportan
información de localización, pero no es suficiente para una posterior búsqueda de
correspondencia entre imágenes.
Finalmente, se asocian puntos clave de una imagen A en una imagen B, de esta
forma reconociendo un objeto de una imagen A en una imagen B.
3.3.1 PUNTOS DE INTERÉS
La definición de punto de interés no está del todo clara, pero a grosso modo, son
puntos que aportan información sustanciosa y, además, el conjunto de píxeles vecinos
a estos aportan una información local realmente significativa. Son puntos bien
definidos, y al someter la imagen a una operación matemática deben resaltar sobre el
resto de puntos.
Los puntos que vayan a ser localizados deben ser lo más estables posibles, y
permanecer invariantes ante cambios de escala, orientación, rotación o iluminación de
las imágenes. De esta forma se garantiza que dichos puntos puedan ser detectados
de igual forma ante imágenes tomadas en distintos momentos y desde una posición
con cierta variación.
Nos centraremos en uno de los detectores más importantes y eficientes que hay
hoy en día, el detector SURF, y que es el que utilizaremos más adelante en el
desarrollo del proyecto.
3.3.2 DETECTOR SURF
Este detector fue presentado en 2006 por Herbert Bay.
Guarda ciertas similitudes con el detector SIFT (1999), en el que está inspirado, pero
sin embargo, presenta ciertas mejoras como [25]:


Una velocidad de cálculo considerablemente mayor
Mayor robustez ante variaciones en las imágenes
30
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Para conseguir estas mejoras, el detector de SURF reduce la dimensión y
complejidad de los descriptores obtenidos, pero de tal manera que, estos continúan
siendo lo suficientemente característicos y repetitivos.
DETECCIÓN DE PUNTOS DE INTERÉS
Este detector está basado principalmente en la matriz Hessiana, ya que utiliza
una aproximación básica de ésta.
El motivo del uso de esta matriz es el buen rendimiento en cuanto a velocidad de
cálculo computacional y precisión.
A diferencia de detectores anteriores, no utiliza diferentes medidas para el
cálculo de la posición y la escala de los puntos de interés de manera individual, sino
que emplea el determinante de la matriz Hessiana en ambos casos.
Dado un punto 𝑝(𝑥, 𝑦) de una imagen I, la matriz Hessiana 𝐻 𝑝, σ , en el punto p
a la escala σ se define de la siguiente manera [20]:
𝐻 𝑝, σ =
𝐿𝑥𝑥 (𝑝, σ)
𝐿𝑦𝑥 (𝑝, σ)
𝐿𝑥𝑦 (𝑝, σ)
𝐿𝑦𝑦 (𝑝, σ)
Matriz Hessiana
Donde 𝐿𝑥𝑥 (𝑝, σ) es la convolución de la derivada parcial de segundo orden de la
gaussiana
∂2
∂x 2
𝑔(σ) con la imagen I en el punto p y lo mismo ocurre con 𝐿𝑥𝑦 (𝑝, σ) y
𝐿𝑦𝑦 (𝑝, σ).
Los filtros gaussianos son óptimos para el análisis del espacio escala. Debido a
ciertas limitaciones como, la necesidad de ser discretizados y la aparición del siempre
deseado efecto aliasing, se ha probado en los detectores SURF una alternativa a
estos filtros gaussianos. Se trata de los denominados filtros de caja.
Los filtros de caja realizan una aproximación de las derivadas parciales de
segundo orden de las gaussianas, y presentan la ventaja de que pueden ser
evaluados de una manera rápida usando integrales
31
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
La escala más pequeña posible corresponde a un filtro de caja de dimensión
9x9, que corresponde a las aproximaciones de la derivada parcial de segundo orden
de una gausianna con σ =1.2.
Figura 25. Aproximación de las derivadas parciales con filtros tipo caja.
Las aproximaciones de las derivadas parciales se denotan con 𝐷𝑥𝑥 , 𝐷𝑥𝑦 y 𝐷𝑦𝑦 . El
determinante de la matriz Hessiana se calcula de la siguiente manera:
det 𝐻𝑎𝑝𝑟𝑜𝑥
= 𝐷𝑥𝑥 𝐷𝑦𝑦 − (0.9𝐷𝑥𝑦 )2
La imagen de salida que se obtiene tras la convolución de la imagen original con
un filtro de dimensiones 9x9 es considerada como escala inicial.
Mediante la aplicación gradual de filtros de mayores dimensiones, se obtienen
capas sucesivas, evitando de esta manera efectos aliasing.
El espacio escala está dividido en octavas, y estas octavas están compuestas
por un número fijo de imágenes como resultado de la convolución de una imagen
original con una serie de filtros de una dimensión cada vez mayor.
En cada nueva octava, el incremento del tamaño del filtro es el resultado de
doblar en incremento producido en la octava anterior.
32
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 26. Tamaño de filtros en diferentes escalas [25].
Finalmente, para localizar los puntos de interés en una imagen, se eliminan
aquellos que no son máximos en una región 3x3x3. De esta manera, el máximo
determinante de la matriz Hessiana es interpolado en la escala y espacio de la
imagen. Así pues, todos los puntos de interés quedarían localizados.
ASIGNACIÓN DE ORIENTACIÓN
La siguiente etapa en la creación del descriptor, corresponde a la determinación
de la orientación de los puntos de interés hallados en el apartado anterior.
Este paso es muy importante, ya que otorga al descriptor la invariancia ante
cualquier tipo de rotación de la imagen.
Para ello, lo primero es calcular la Respuesta de Haar en la dirección X, y en la
dirección Y, en una región circular de radio 6s, donde s es la escala del punto de
interés.
Una vez calculadas las respuestas de Haar o wavelets, éstas son ponderadas
por una gaussiana centrada en el punto de interés, para dar mayor valor a las
respuestas más próximas al punto.
Finalmente, el área circular alrededor del punto de interés es dividida en 6
secciones, cubriendo un ángulo de π/3 cada una. La orientación dominante será
aquella que, sumando todas las direcciones dentro de cada sección, tenga un vector
de mayor longitud (Figura 28).
33
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figuras 27 y 28. Funciones de Haar y asignación de orientación [22].
EXTRACCIÓN DEL DESCRIPTOR
La extracción del descriptor se realiza construyendo, en primer lugar, una región
cuadrada centrada en el punto de interés y con un tamaño de 20s. A continuación, la
región es dividida en regiones más pequeñas 4x4. Para cada nueva subregión, se
calculan características para puntos de muestra separados por una región 5x5.
La respuesta de Haar en la dirección horizontal la llamaremos 𝑑𝑥 , mientras que a
la respuesta en la dirección vertical la llamaremos 𝑑𝑦 . Una vez obtenidas estas
respuestas, para cada subregión se suman los resultados dx y dy , además de los
valores absolutos de estos resultados.
De modo que, cada subregión tiene como descriptor un vector v de dimensión 4:
𝑣 = ( 𝑑𝑥 ,
𝑑𝑦 ,
𝑑𝑥 ,
𝑑𝑦 )
Por lo tanto, englobando las 4x4 subregiones, para cada uno de los puntos de
interés, resulta un descriptor SURF con una longitud total de 64 valores.
EMPAREJAMIENTO
El último paso del detector, consistirá en enlazar los puntos de interés hallados
en las dos imágenes. Cada punto de interés de la imagen A, será comparado con los
34
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
puntos de interés de la imagen B, a través de la distancia euclídea entre sus
descriptores.
Un emparejamiento es detectado en caso de que la distancia relativa entre
ambos puntos sea menor a 0.7 veces la distancia respecto al segundo vecino más
cercano. Esta estrategia de matching es conocida como la del vecino más próximo.
El procedimiento del algoritmo SURF para detectar puntos de interés en dos
imágenes, y enlazarlos finalmente se resume en la Figura 29.
Figura 29. Algoritmo SURF para la detección de imágenes [22].
DETECTOR SURF EN MATLAB [10]
Matlab presenta una serie de funciones que, combinándolas, forman un
algoritmo que permite la detección de un objeto específico en una imagen.
Se basa en la correspondencia de puntos entre una imagen de referencia a
buscar y la imagen donde se busca esta imagen de referencia. Estos puntos de
referencia pueden tratarse de puntos surf, brisk, o corner.
35
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Es posible detectar objetos a pesar de posibles cambios en la escala, o
rotaciones en el plano entre imagen a buscar e imagen buscada.
Este método de detección puede ser aplicado en el caso de tener que detectar
un objeto específico, por ejemplo, sería posible detectar en una imagen de una
estantería un libro en concreto, pero no cualquier tipo de libro.
Nos centraremos en el caso de puntos característicos surf. En el siguiente
ejemplo trataremos de buscar el elefante que se muestra en la figura, en la fotografía
donde se encuentran más objetos. Las imágenes mostradas en las figuras 30 y 31
han sido obtenidas de Computer Vision System Toolbox ,Matlab User‟s Guide.
Figuras 30 y 31. Elefante que debe ser encontrado y escena donde debe ser
encontrado [20].
% 1. Lectura de ambas imágenes
elephantImage = imread('elephant.jpg');
sceneImage = imread('escritorio.jpg');
% 2. Detección de puntos característicos
elephantPoints = detectSURFFeatures(elephantImage);
scenePoints = detectSURFFeatures(sceneImage);
figure;
36
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
imshow(elephantImage);
title('100 puntos más característicos del elefante');
hold on;
plot(selectStrongest(elephantPoints, 100));
Figura 32. 100 puntos más característicos del elefante.
figure;
imshow(sceneImage);
title('300 puntos más característicos de la escena’);
hold on;
plot(selectStrongest(scenePoints, 300));
Figura 33. 300 puntos más característicos de la escena.
% 3. Extracción de descriptores
[elephantFeatures, elephantPoints] = extractFeatures(elephantImage,
elephantPoints);
[sceneFeatures, scenePoints] = extractFeatures(sceneImage, scenePoints);
37
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
% 4. Emparejamiento de puntos usando los descriptores
elephantPairs = matchFeatures(elephantFeatures, sceneFeatures);
matchedElephantPoints = elephantPoints(elephantPairs(:, 1), :);
matchedScenePoints = scenePoints(elehantPairs(:, 2), :);
figure;
showMatchedFeatures(elephantImage, sceneImage, matchedElephantPoints, ...
matchedScenePoints, 'montage');
title(Puntos conectados (Incluyendo Outliers)');
Figura 34. Puntos conectados (Incluyendo Outliers).
% 5. Localización del objeto
[tform, inlierElephantPoints, inlierScenePoints] = ...
estimateGeometricTransform(matchedElephantPoints, matchedScenePoints,
'affine');
figure;
showMatchedFeatures(ElephantImage, sceneImage, inlierElephantPoints, ...
inlierScenePoints, 'montage');
title('Puntos conectados (Sólo Inliers)');
Figura 35. Puntos conectados (Sólo Inliers).
38
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
boxPolygon = [1, 1;...
% arriba-izquierda
size(elephantImage, 2), 1;...
% arriba-derecha
size(elephantImage, 2), size(elephantImage, 1);... % abajo-derecha
1, size(elephantImage, 1);...
% abajo-izquierda
1, 1];
% arriba-izquierda de Nuevo para cerrar el polígono
newBoxPolygon = transformPointsForward(tform, boxPolygon);
figure;
imshow(sceneImage);
hold on;
line(newBoxPolygon(:, 1), newBoxPolygon(:, 2), 'Color', 'y');
title(‘Elefante encontrado’);
Figura 36. Elefante encontrado.
39
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 4
ADQUISICIÓN DE IMÁGENES
40
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
4.1 ADQUISICIÓN DE IMÁGENES CON WEBCAM
Matlab proporciona a través de su extensión Image Acquisition Toolbox, la
posibilidad de adquirir imágenes y videos con una webcam en tiempo real para el
posterior tratamiento de los mismos.
Para obtener el listado de cámaras instaladas basta con teclear el comando
webcamlist, mostrándose los dispositivos instalados en el equipo.
>> webcamlist
ans =
'Logitech HD Webcam C270'
Creando un objeto con la cámara deseada, se produce la conexión de la misma,
y se establece una conexión exclusiva.
>> cam=webcam(1)
cam =
webcam with properties:
Name: 'Logitech HD Webcam C270'
Resolution: '640x480'
AvailableResolutions: {1x19 cell}
Gain: 192
ExposureMode: 'auto'
Exposure: -5
Brightness: 128
Sharpness: 24
BacklightCompensation: 0
WhiteBalance: 2300
Contrast: 32
Saturation: 32
41
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Es posible mostrar algunas de las propiedades de la cámara y el ajuste de
algunos parámetros tales como la resolución.
>> cam.AvailableResolutions
% Muestra las resoluciones disponibles
ans =
Columns 1 through 5
'640x480'
'160x120'
'176x144'
'320x176'
'320x240'
'544x288'
'640x360'
'752x416'
'864x480'
'960x544'
'960x720'
Columns 6 through 10
'352x288'
'432x240'
Columns 11 through 15
'800x448'
'800x600'
Columns 16 through 19
'1024x576'
'1184x656'
>> cam.resolution
'1280x720'
'1280x960'
% Muestra la resolución actual
ans =
640x480
>> cam.resolution='1280x960'; % Cambia la resolución a ‘1280x960’
Finalmente, previsualizamos el contenido de la cámara y tomamos un fotograma
de la escena, quedando almacenado el mismo en la matriz imagen.
>> preview(cam)
imagen=snapshot(cam)
42
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
4.2 ADQUISICIÓN DE IMÁGENES CON KINECT
Kinect es un dispositivo, pensado inicialmente como un controlador de juego
para Xbox, que integra diversos componentes tales como una cámara RGB, un sensor
de profundidad e infrarrojos (emisor y receptor) y cuatro micrófonos incorporados. Es
capaz de capturar el esqueleto humano y posicionarlo en el plano. Sin embargo, las
diversas funciones que proporcionan hicieron interesante la integración de Kinect en
Matlab, de modo que pudieran utilizarse todas estas funciones más allá que en un
simple videojuego de entretenimiento.
En el presente proyecto aprovecharemos la función de profundidad que Kinect
facilita, a diferencia de una cámara convencional que no proporciona esta información.
Seguidamente, entramos un poco en detalle con cada uno de los componentes
que integran una Kinect [32].

Cámara RGB que ofrece una resolución máxima de 1280x960. Hace posible la
captura de imágenes en color.

Emisor de infrarrojos y sensor de profundidad. El emisor emite luz infrarroja y el
sensor de profundidad mide la luz reflejada de tal forma que hace una
estimación de la distancia entre un objeto y el sensor.

Cuatro micrófonos que permiten capturar sonido y encontrar la localización de
una fuente de sonido y la dirección de una onda sonora.

Acelerómetro que determina la orientación de la Kinect.
Figura 37. Componentes de una Kinect [32].
43
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Existen dos modos para la adquisición de imágenes [30] con información de
profundidad: el Near Mode (modo cercano) y el Default Mode (modo predeterminado).
El Near Mode permite trabajar con imágenes situadas hasta a una distancia de
40cm respecto a la Kinect, mientras que en el Default Mode, los objetos deben estar
alejados al menos a 80cm para una correcta lectura de los valores de profundidad.
El modo cercano ha sido implementado en las últimas versiones de Kinect para
Windows, sin embargo, en la Kinect utilizada en el proyecto, este modo no se
encontraba aún disponible, por lo que ha sido necesario situar los objetos al menos a
80cm del sensor. En la figura 38 se muestra una comparativa de rangos de
funcionamientos de ambos modos.
Figura 38. Rangos de funcionamiento para cada uno de los modos [30].
Mostramos el proceso para adquirir una imagen a color, y la imagen con los
valores de profundidad. La imagen de profundidad será una matriz con los valores (en
milímetros), de la distancia entre el sensor de profundidad y cada punto de la imagen.
colorVid = videoinput('kinect',1);
depthVid = videoinput('kinect',2);
sceneImage=getsnapshot(colorVid);
depthImage=getsnapshot(depthVid);
RGB=label2rgb(depthImage);
% Crea un objeto para imagen color
% Crea objeto para imagen profundidad
% Captura la imagen
% Captura la imagen
% Realiza una conversión a RGB de la
imagen de profundidad para hacerla más
vistosa
figure
imshow(sceneImage)
figure
imshow(RGB);
44
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 39. Imagen real e imagen de profundidad.
Los puntos más cercanos son representados con tonos más fríos, mientras que
los más lejanos son representados con tonalidades más cálidas.
En las imágenes pueden aparecer zonas erróneas [31] de color negro (0cm), que
corresponden o bien a zonas demasiado cercanas a la cámara (menos de 40cm en el
Near Mode y menos de 80cm en el Default Mode), o bien a zonas muertas.
Estas zonas muertas se deben a que al colocar obstáculos delante de la
cámara, el patrón de puntos IR se proyecta sobre ellos y no es posible ver lo que hay
detrás. Como el sensor de captura no está situado en la misma posición que el sensor
que proyecta los infrarrojos, tras el objeto queda una zona en la que no se proyectan
puntos IR. La siguiente figura muestra el fenómeno de aparición de estas sombras.
Figura 40. Aparición de sombras [31].
45
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 5
APLICACIÓN AL CONTEO DE UNIDOSIS
46
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.1 SERVICIO DE FARMACIA
En el servicio de farmacia del Hospital Universitario Reina Sofía de Córdoba,
trabajan unas 60 personas, con el fin de que cada paciente disponga del medicamento
que necesita en el lugar y momento adecuado.
Todos los medicamentos de uso hospitalario que no se encuentran disponibles
en las farmacias, y que deben recoger los pacientes externos en el hospital, toda
aquella medicación que se recibe a diario cuando un paciente está ingresado, o todo
aquel tratamiento de quimioterapia que se administra a pacientes con cáncer, es
gestionado desde este servicio de farmacia.
El servicio de farmacia se divide en 4 almacenes. [4] detalla la distribución de la
farmacia en distintas áreas del complejo hospitalario de la siguiente forma:

Almacén 1, localizado en la planta baja del hospital, se trata del principal
almacén del servicio de farmacia.

Almacén 2, que hace referencia a las máquinas dispensadoras de
medicamentos, las cuales se pueden encontrar en puntos estratégicos del
hospital, como la unidad de cuidados intensivos.

Almacén 3, representaba al antiguo almacén del Hospital Provincial de
Córdoba, absorbido hoy en día por el Almacén 1.

Almacén 4, conocido como Apostore (Figura 41). Se trata de una sala
robotizada, de reciente implantación en el hospital, y localizada dentro del
Almacén 1. En esta localización, son almacenados los medicamentos con un
mayor impacto para el hospital, permitiendo una gestión más eficiente.
Figura 41. Almacén Apostore [4].
47
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.2 DISTRIBUCIÓN UNIDOSIS DE MEDICAMENTOS
Uno de los objetivos del servicio de farmacia hospitalaria es presentar un
sistema eficaz y seguro de dispensación y distribución de medicamentos. Los
medicamentos deben mantenerse disponibles en el lugar apropiado y en forma
oportuna para su aplicación a los pacientes.
El Sistema de Distribución de Medicamentos en Dosis Unitaria (SDMSU) es un
sistema de utilización de medicamentos, formado por un conjunto de procesos que
comprenden la prescripción, validación, dispensación y administración [28].
Figura 42. Ciclo de distribución unidosis [28].
Este sistema presenta una mayor seguridad para pacientes hospitalizados,
comparado con otros sistemas de distribución de medicamentos [26].
A continuación, analizamos las ventajas que el sistema de medicamentos
unidosis, presenta frente a otros tipos de sistemas:

Es el sistema que mejor garantiza que el medicamento prescrito llegue al
paciente al cual ha sido destinado, ya que se basa en la orden médica a cada
paciente en forma individual.

Utiliza de manera eficiente y racional los recursos humanos involucrados en la
distribución de los medicamentos, ya que disminuye el tiempo de manipulación
de los mismos, y el tiempo de control de los niveles de stock, pudiendo de esta
forma dedicar más tiempo al cuidado de los pacientes.
48
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA

Disminuye el coste hospitalario asociado a la medicación, ya minimiza el
tamaño del stock, disminuye el despilfarro por pérdidas, recupera
medicamentos no aplicados al paciente y disminuye los errores de medicación.

Permite un mejor seguimiento y control de los tratamientos farmacéuticos.

Presenta mayor capacidad de adaptación a procedimientos computarizados y
automatizados.
Según el estudio “Evaluación del impacto derivado de la utilización de productos
de dosis unitaria en dos centros de atención primaria”, realizado por Jose Luis Segú,
de la Unidad de Farmacia Clínica y Farmacoterapia de la Universitat de Barcelona, el
uso de dosis unitarias supone un ahorro del 14% se las unidades prescritas, o que
cada paciente no acumulase en su casa más de 19 dosis innecesarias al año.
Los medicamentos suministrados mediante este sistema se encuentran
completamente identificados (nombre comercial, principio activo, dosis, unidades de la
dosis, lote y caducidad), hasta el momento final de la administración, ya que los
fármacos sin identificar pueden suponer un grave peligro para el paciente.
Figura 43. Medicamentos etiquetados [28].
En la etapa de dispensación, la medicación es entregada mediante carros de
unidosis a cada unidad de enfermería para la posterior administración a los pacientes
ingresados en el hospital, o bien a la farmacia que suministra medicamentos a los
pacientes externos que acuden a retirar su medicación.
49
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 44. Carro de medicación unidosis.
Figura 45. Consulta de pacientes externos y sala de unidosis [4].
50
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.3 CONTEO AUTOMATIZADO DE UNIDOSIS
En la farmacia donde son atendidos los pacientes externos del hospital, son
realizados inventarios de forma periódica.
El objetivo de estos inventarios es conocer de una manera real, para cada
medicamento, la cantidad disponible de cada uno de ellos. De esta manera, como
explicamos en el Capítulo 1, se minimiza el importe económico de los medicamentos
almacenados, pero de forma tal que se sigan satisfaciendo las necesidades de los
pacientes que acuden a retirar su medicación.
Estos inventarios requieren el empleo de horas por parte del personal del
hospital, y en este caso práctico, pretendemos automatizar en la medida de lo posible
este proceso para ahorrar horas de trabajo. Para ello, en este caso, trataremos de
contabilizar el número de unidades unidosis de un medicamento en concreto,
mediante técnicas de visión artificial.
Trabajaremos con unidosis de Omeprazol 20mg en cápsulas, uno de los
medicamentos de dosis individual suministrados de manera más frecuente en la
farmacia del Hospital Universitario Reina Sofía de Córdoba.
Las cápsulas irán siendo esparcidas por el personal sobre un fondo liso, en
varias veces, de manera que, una cámara fija tome una imagen cada vez, y un
algoritmo en Matlab informe al farmacéutico y almacene el número de dosis existentes
de manera automática. Así pues, con varios fotogramas, se evitaría el tener que
contar de manera manual e individual, el número de dosis existentes, ahorrando una
gran cantidad de tiempo.
Figura 46. Cápsula de Omeprazol 20 mg.
51
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.3.1 CASO SENCILLO
En este primer ejemplo práctico, consideramos el caso en el cual, las unidosis se
han distribuido de manera que, ninguna se encuentra en contacto físico con ninguna
otra.
Se trataría del caso más sencillo desde el punto de vista de visión artificial, y
supondría un mayor cuidado del farmacéutico a la hora de esparcir las unidosis sobre
el fondo uniforme.
En primer lugar, inicializamos la cámara y realizamos la captura de la escena
una vez distribuidas las dosis sobre el fondo. Trabajaremos con la capa azul de la
imagen RGB capturada.
close all
clear all
cam=webcam;
preview(webcam)
pause
RGB=snapshot(cam);
objetos=0;
% Inicializa el valor de dosis a 0
figure
imshow(RGB)
title('Imagen original');
Figura 47. Imagen original.
gris=RGB(:,:,3);
figure
imshow(gris);
title('Imagen a escala de grises');
52
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 48. Imagen a escala de grises.
A continuación, realizamos una detección de bordes empleando el método sobel,
con un parámetro de 0.05, obteniendo una imagen binaria en blanco y negro.
BW = edge(gris,'sobel',0.05);
figure
imshow (BW);
title('Imagen gris bordes');
Figura 49. Imagen gris bordes.
Como podemos apreciar, las dosis de omeprazol presentan un envoltorio de
carácter metálico, lo que provoca que, ante cualquier incidencia leve de luz, se
53
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
produzcan reflejos, los cuales provocan cambios en los niveles de gris de las
imágenes capturadas.
Estos cambios y saltos de en los niveles de gris, hacen que, los algoritmos de
detección de bordes puedan identificar bordes en lugares internos en los que
realmente no los haya, tal y como se identifica en la imagen anterior. Por tanto,
tendríamos que eliminar estos bordes internos, y quedarnos con aquellos que sean
contornos de las dosis esparcidas sobre el fondo.
Para ello, en primer lugar aplicamos una máscara de unos sobre la imagen
binaria obtenida, para rellenar posibles discontinuidades que el algoritmo de detección
de bordes haya podido introducir de manera poco eficiente.
mascara=ones(5,5)
bwmask=imfilter(BW,mascara);
figure
imshow(bwmask);
title('Imagen bordes despues mascara');
Figura 50. Imagen bordes después máscara
Una vez aplicadas las máscaras, seguimos teniendo una imagen binaria que
contiene, por una parte información acerca de los bordes externos de cada cápsula, y
por otra parte información errónea dentro de cada una de ellas. Esta información
errónea consiste en valores binarios positivos, que no se corresponden con el
contorno exterior de cada unidosis.
El comando imfill con el parámetro „holes‟ rellena agujeros en una imagen
binaria. Si aplicamos este comando a la imagen binaria que hemos obtenido,
54
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
rellenamos el interior de cada una de las cápsulas, y de esta forma, obtenemos una
imagen completamente binarizada que muestra cada una de ellas.
BW2 = imfill(bwmask,'holes')
figure
imshow(BW2);
title('Imagen rellenada');
Figura 51. Imagen rellenada.
A continuación, con el comando imopen, los parámetros „disk‟ y el valor 10,
eliminamos cualquier tipo de ruido que haya podido aparecer, que quepa en un disco
de radio 10, y que por tanto pudiese ser considerado como una cápsula más.
Además, de esta forma, también suavizamos las esquinas de las dosis obtenidas
en la imagen rellenada, lo cual resulta interesante ya que debido a su fabricación, no
todas las dosis presentan esquinas redondeadas.
BW2 = imopen(BW2,strel('disk',10));
figure
imshow(BW2);
title('Imagen rellenada filtrada');
55
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 52. Imagen rellenada filtrada.
Finalmente, procedemos a segmentar la imagen resultante, buscando e
identificando objetos con conectividad 8. Además, obtenemos las propiedades de cada
uno de estos elementos conectados, ya que esto nos será realmente útil en casos
más complejos como en los que mostraremos en el siguiente apartado.
background=BW2;
cc = bwconncomp(background, 8)
cc.NumObjects;
labeled = labelmatrix(cc);
RGB_label = label2rgb(labeled, @spring, 'c', 'shuffle');
figure
imshow(RGB_label)
Figura 53. Representación visual de elementos conectados.
56
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
stats = regionprops(cc, 'all');
areas = [stats.Area];
disp('Elementos conectados')
disp(cc.NumObjects)
Elementos conectados
16
En este ejemplo, el número de elementos conectados, coincide con el número de
cápsulas existentes en la fotografía, ya que en este caso se ha procurado que ninguna
cápsula esté en contacto con ninguna otra.
Sin embargo, si esto ocurriese, tal y como ocurrirá en el siguiente apartado, el
número de elementos conectados no coincidirá con el total de cápsulas, ya que varios
elementos en contacto con conectividad 8, computarían como un único elemento, por
lo que la contabilización no sería correcta.
Por tanto, será necesario añadir algo más a este algoritmo, y esto será lo que
explicaremos en el siguiente caso.
5.3.2 CASO GENERALIZADO
Éste se trataría del caso en el cual una o más dosis de omeprazol estuviesen en
contacto físico. Debemos por tanto, encontrar un método lo más insensible a este
hecho y que pudiera aplicarse igualmente al caso sencillo del apartado anterior.
.
Figura 54. Imagen original (caso generalizado).
57
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Consideraremos, por tanto, el escenario mostrado en la figura anterior, donde
podemos apreciar que, existen seis cápsulas distribuidas sin contacto ninguno, dos
grupos de dos cápsulas en contacto, y un grupo de tres cápsulas conectadas.
Figura 55. Agrupación de cápsulas.
Aplicaremos ahora, los algoritmos explicados en el caso sencillo, mostrándose lo
siguiente:
Figura 56. Imagen a escala de grises.
58
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 57. Imagen gris bordes.
Figura 58. Imagen bordes después máscara.
Figura 59. Imagen rellenada.
59
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 60. Representación visual de elementos conectados.
Elementos conectados
9
En este caso, los elementos con conectividad 8 serían 9, lo cual no coincidiría
con el total de cápsulas disponibles, 13.
Esto demuestra que, por tanto, debemos introducir algo más para solucionar
este problema. Fijémonos ahora en las áreas (en píxeles), de cada uno de los grupos
de elementos conectados.
stats = regionprops(cc, 'all');
areas = [stats.Area];
Figura 61. Áreas de los elementos 8-conectados.
60
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
A mayor numero de cápsulas en cada agrupación de elementos, más grande es
el área de cada una de ellas, evidentemente.
El elemento 2, con valor 11.762, corresponde al grupo de tres, los elementos 3 y
4 con valores 7.628 y 6.785 corresponden a los grupos de dos, y el resto de grupos, a
los grupos unitarios.
Ahora, realizaremos la división del valor mayor del vector de áreas, entre el
menor de ellos,
agrupmayor=max(areas)/min(areas)
agrupmayor =
3.5578
De esta manera, considerando que el grupo de menor área sea siempre un
grupo unitario, obtendríamos un valor aproximado (en principio no entero), del número
de elementos de la agrupación de cápsulas más grande.
Debido a que, durante el procesamiento de las imágenes se incluyeron
máscaras redundantes para eliminar discontinuidades en los bordes, truncaremos al
resultado a la unidad, obteniendo un valor numérico de 3, que coincide con la cantidad
de elementos contenida en la mayor agrupación.
El objetivo sigue siendo determinar a través de las áreas de los grupos, la
cantidad de cápsulas que hay en cada agrupación.
Representando un histograma de las agrupaciones, según sus áreas, con un
número de valores del histograma igual a las dosis contenidas en la agrupación mayor,
es posible solucionar este problema.
figure, hist(areas,agrupmayor)
Figura 62. Histograma de áreas.
61
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
u=hist(areas,agrupmayor)
u=
6
2
1
Así pues, resultan grupos unitarios con frecuencia 6, grupos de dos cápsulas
con frecuencia 2, y 1 grupo de tres cápsulas.
Con esto, resulta bien sencillo obtener el total de cápsulas contenidas en la
fotografía.
h=length(u);
capsulas=0;
for w=1:h
capsulas=capsulas+w*u(w);
end
msgbox(['Número total de cápsulas: ' num2str(capsulas)]);
Por tanto, quedaría resuelto el problema, y obtendríamos el número de dosis de
una manera correcta.
Es importante recalcar que, para que este método funcione, en cada fotograma
debe haber siempre al menos una dosis que no se encuentre en contacto con ninguna
otra.
A continuación, realizamos una batería de prueba con distintos escenarios
posibles, y analizamos los resultados obtenidos.
62
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
5.3.3 EJEMPLOS
EJEMPLO 1 (10 cápsulas)
Grupo
Área (píxeles)
1
2
3
4
5
6
7
8
9
2.998
3.128
6.064
2.897
3.118
3.025
3.001
2.852
2.910
Cápsulas
detectadas
1
1
2
1
1
1
1
1
1
Total cápsulas
detectadas
63
10
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 2 (12 CÁPSULAS)
Grupo
Área (píxeles)
1
2
3
4
5
6
7
10.502
3.926
3.539
14.671
3.463
3.617
3.828
Cápsulas
detectadas
3
1
1
4
1
1
1
Total cápsulas
detectadas
64
12
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 3 (6 CÁPSULAS)
Grupo
Área (píxeles)
1
2
3
4
4.029
4.425
4.409
13.540
Cápsulas
detectadas
1
1
1
3
Total cápsulas
detectadas
65
6
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 4 (19 CÁPSULAS Y FONDO NO HOMOGÉNEO)
Como podemos apreciar en este ejemplo, el método de contabilización funciona
también en presencia de fondos no homogéneos.
Grupo
Área (píxeles)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
4.314
4.238
4.539
4.611
4.002
4.358
4.039
4.435
11.987
3.873
4.457
7.483
8.243
7.183
Cápsulas
detectadas
1
1
1
1
1
1
1
1
3
1
1
2
2
2
Total cápsulas
detectadas
66
19
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 5 (5 CÁPSULAS Y FONDO NO HOMOGÉNEO)
Grupo
Área (píxeles)
1
2
3
4
5
6.142
6.048
6.193
5.634
6.086
Cápsulas
detectadas
1
1
1
1
1
Total cápsulas
detectadas
67
5
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 6 (16 CÁPSULAS Y FONDO NO HOMOGÉNEO)
Grupo
Área (píxeles)
1
2
3
4
5
6
7
8
9
10
18.669
4.891
4.971
4.607
4.933
9.940
9.802
4.629
9.610
4.858
Cápsulas
detectadas
4
1
1
1
1
2
2
1
2
1
Total cápsulas
detectadas
68
16
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 7 (7
HOMOGÉNEO)
CÁPSULAS
DE
OTRO
MEDICAMENTO
Y
FONDO
NO
Observamos que, además, es aplicable también a otro tipo de unidosis (en este
caso, Ibuprofeno).
Grupo
Área (píxeles)
1
2
3
4
5
6
3.542
7.584
3.459
3.521
3.214
3.187
Cápsulas
detectadas
1
2
1
1
1
1
Total cápsulas
detectadas
69
7
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 8 (9 CÁPSULAS DE OTRO MEDICAMENTO)
Grupo
Área (píxeles)
1
2
3
4
5
6
7
5.660
5.467
4.948
5.613
15.890
5.095
5.603
Cápsulas
detectadas
1
1
1
1
3
1
1
Total cápsulas
detectadas
70
9
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 6
APLICACIÓN AL CONTEO DE CAJAS
71
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
6.1 INTRODUCCIÓN
En la farmacia hospitalaria, además de realizarse dispensación en forma de
unidosis se dispensan cajas de medicamentos para los pacientes que acuden a
recoger medicación.
Estas cajas son apiladas en estanterías en los distintos almacenes de la
farmacia, y trataremos de realizar un control del número de unidades a través de
simples fotografías.
Trabajaremos con dos tipos de medicamentos que son dispensados: Primperan
10mg/2ml en envases de 12 ampollas, y Nolotil 575 mg en envases de 25 cápsulas.
6.2 CONTEO DE CAJAS EN DOS DIMENSIONES
El primer caso a tratar será aquel en el que solo exista un nivel de profundidad,
es decir, aquel en el cual todas las cajas se encuentren a la vista, tal y como aparece
en la Figura 63.
Figura 63. Cajas con un nivel de profundidad.
Trabajaremos en el primer ejemplo con cajas de Primperan, y para realizar la
contabilización, recurriremos al algoritmo SURF para la detección de objetos.
72
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Para esto, para cada tipo de medicamento será necesario tener registrada una
imagen de cada tipo de envase.
En primer lugar, obtenemos de una base de datos de medicamentos el perfil de
una caja de Primperan (Figura 64), y realizamos una captura de la escena donde se
desean contar las cajas existentes (Figura 65).
close all
clear all
fin=0;
contar=0;
boxImage = imread('primperan.jpg');
boxImage=boxImage(:,:,2);
figure;
imshow(boxImage);
title(‘Perfil de una caja');
cam=webcam;
cam.resolution='1280x960';
preview(cam);
pause
sceneImage=snapshot(cam);
color=sceneImage;
figure;
imshow(color);
title(‘Escena a analizar’);
sceneImage=sceneImage(:,:,2);
sceneImage=imadjust(sceneImage);
% Variable contador
% Imagen de envase de Primperan
% Capa verde de la imagen
% Inicialización de la cámara
% Captura de la escena
% Realce de intensidad
Figuras 64 y 65. Perfil de una caja y escena a analizar.
73
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Iniciamos un bucle para la contabilización de las cajas, empleando el algoritmo
de Surf.
En cada paso por el bucle, el objetivo será la detección de una caja. En caso de
detección, el lugar de la caja en la imagen de la escena, será reemplazado por un
polígono opaco negro,
aumentaremos el contador de cajas encontradas, e
intentaremos la detección de una nueva, hasta que el algoritmo no detecte ninguna
más, momento en el cual, el proceso habrá finalizado.
while fin==0
% Inicio del bucle
figure;
imshow(sceneImage);
boxPoints = detectSURFFeatures(boxImage);
scenePoints = detectSURFFeatures(sceneImage);
figure;
imshow(boxImage);
title('100 Feature Points más significativos de una muestra');
hold on;
plot(selectStrongest(boxPoints, 100));
figure;
imshow(sceneImage);
title('300 Feature Points más significativos de la escena');
hold on;
plot(selectStrongest(scenePoints, 300));
Figura 66. 100 puntos más significativos de una muestra.
74
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 67. 300 puntos más significativos de la escena.
Seguidamente, extraemos los descriptores de los puntos más significativos, y
buscamos emparejamientos (Figura 68) entre los descriptores de la imagen tipo para
una caja de Primperan (Figura 66), y la escena de trabajo (Figura 67). Es importante
indicar que, como es lógico, es necesario permitir múltiples coincidencias entre la
imagen tipo y la escena de trabajo.
[boxFeatures, boxPoints] = extractFeatures(boxImage, boxPoints);
[sceneFeatures, scenePoints] = extractFeatures(sceneImage, scenePoints);
boxPairs = matchFeatures(boxFeatures, sceneFeatures,
'MaxRatio',1,'Metric','SSD','Method','Threshold');
if isempty(boxPairs)==1
fin=1;
end
% Fin si no hay más coincidencias
if fin==0
contar=contar+1;
matchedBoxPoints = boxPoints(boxPairs(:, 1), :);
matchedScenePoints = scenePoints(boxPairs(:, 2), :);
75
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
figure;
showMatchedFeatures(boxImage, sceneImage, matchedBoxPoints, ...
matchedScenePoints, 'montage');
title('Puntos combinados (Incluyendo Outliers)');
Figura 68. Puntos combinados (Incluyendo Outliers).
[tform, inlierBoxPoints, inlierScenePoints] = ...
estimateGeometricTransform(matchedBoxPoints, matchedScenePoints,
'affine');
figure;
showMatchedFeatures(boxImage, sceneImage, inlierBoxPoints, ...
inlierScenePoints, 'montage');
title('Puntos combinados (Solamente Inliers)');
Figura 69. Puntos combinados (Solamente Inliers).
76
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Considerando solamente puntos inliers (Figura 69), obtenemos
correspondencia de la imagen tipo, con una caja de la escena (Figura 70).
la
El paso siguiente será delimitar la región que corresponde a la caja que acaba
de ser detectada.
boxPolygon = [1, 1;...
% Arriba izquierda
size(boxImage, 2), 1;...
% Arriba derecha
size(boxImage, 2), size(boxImage, 1);... % Abajo derecha
1, size(boxImage, 1);...
% Abajo izquierda
1, 1];
% Arriba izquierda de nuevo para cerrar
newBoxPolygon = transformPointsForward(tform, boxPolygon);
figure;
imshow(sceneImage);
hold on;
line(newBoxPolygon(:, 1), newBoxPolygon(:, 2), 'Color', 'y');
title('Caja detectada');
Figura 70. Caja detectada.
Ahora rellenamos la caja detectada con un polígono opaco negro (Figura 71) y
calculamos el área de este polígono, lo cual nos será útil más adelante en el caso de
cajas agrupadas en varios niveles de profundidad.
77
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
[m,n]=size(sceneImage);
ceros=zeros(m,n);
dimension=numel(newBoxPolygon);
vector=reshape(newBoxPolygon',dimension,1);
sceneImage =
insertShape(sceneImage,'FilledPolygon',{vector},'color','black','opacity',1);
sceneImage=sceneImage(:,:,2);
figure
imshow(sceneImage);
Figura 71. Escena de trabajo tras detección de caja.
% Calculamos el área de la caja detectada
cord(1,:)=vector(1:2,:);
cord(2,:)=vector(3:4,:);
cord(3,:)=vector(5:6,:);
cord(4,:)=vector(7:8,:);
cord(5,:)=vector(9:10,:);
xv=cord(:,1);
yv=cord(:,2);
area(contar) = polyarea(xv,yv);
% Almacenamos en vector area
end
end
78
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
A consecuencia de que una caja ha sido detectada, se volvería a entrar de
nuevo en el bucle, realizando lo mismo que en el caso anterior una y otra vez por cada
caja, hasta que se entre por última vez en el mismo en el momento que no haya más
detecciones.
En las Figura 72-77 se muestran los pasos que ocurren en la última entrada
exitosa en el bucle tras haber detectado el resto de cajas.
Figura 72. Escena de trabajo.
Figura 73. 100 Puntos más significativos de una muestra.
79
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 74. 300 puntos más significativos de la escena.
Figura 75. Puntos combinados (Incluyendo Outliers).
80
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 76. Puntos combinados (Solamente Inliers).
Figura 77. Caja detectada.
Finalmente, se volvería a machacar la escena con el último polígono negro,
como se muestra en la Figura 78, y no se encontraría coincidencia alguna entra la
imagen tipo de una caja y la escena de trabajo resultante, por lo que quedaría
finalizado el caso.
81
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 78. Escena de trabajo.
h = msgbox(['Se han encontrado las siguientes cajas: ' num2str(contar)]);
Se muestran a continuación dos ejemplos prácticos de la aplicación del algoritmo
para la detección de cajas con un único nivel de profundidad.
82
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 1
En este ejemplo podemos observar que el algoritmo es insensible a la rotación
de las cajas, así como a pequeñas modificaciones que puedan producirse, como por
ejemplo ocurre en la caja que presenta una marca roja.
Figura 79. Escena a analizar.
Figura 80. 100 Puntos más significativos de una muestra.
83
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 81. 300 puntos más significativos de la escena.
Figura 82. Puntos combinados (Incluyendo Outliers).
84
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 83. Primera caja detectada.
Figura 84. Última caja detectada.
85
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 2
En este caso trabajaremos con cajas de Nolotil, y podremos observar que el
algoritmo es aplicable igualmente a otro medicamento.
Figura 85. Escena a analizar.
Figura 86. 100 puntos más significativos de una muestra.
86
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 87. 300 Puntos más significativos de la escena.
Figura 88. Puntos combinados (Incluyendo Outliers).
87
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 89. Primera caja detectada.
Figura 90. Última caja detectada.
88
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
6.3 CONTEO DE CAJAS EN TRES DIMENSIONES
En el apartado anterior, se trató con el caso en el cual las cajas se encontraban
apiladas en un único nivel de profundidad. Sin embargo, en este apartado,
trabajaremos casos en los cuales las cajas se encuentren apiladas en varias tandas
distintas, con situaciones en las que se encuentren apiladas en tantos niveles de
profundidad como sea deseable.
Figura 91. Cajas apiladas en dos niveles de profundidad.
89
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Será necesario que las cajas sean apiladas al fondo de la estantería siempre
que sea posible, evitando la creación de huecos interiores invisibles a la aplicación
(Figura 92).
Figura 92. Hueco invisible.
Situaciones como las de la Figura 92 llevarían a un cálculo incorrecto del total de
cajas en el escenario, ya que trabajamos con una cámara situada en el frontal de
todas las cajas, ignorando el contenido que existe en el interior de ellas.
Trabajaremos con las áreas de los polígonos negros correspondientes a la
detección de una caja. Aprovechando la perspectiva que se produce en las cámaras
fotográficas, al igual que se produce en el ojo humano, los objetos situados más lejos
respecto al objetivo se aprecian con un tamaño más pequeño que los que se
encuentran más cerca. Por ello, las cajas situadas al más al fondo y que sean visibles
a la cámara, tendrán un área más pequeña en la representación gráfica en dos
dimensiones que se produce en una fotografía.
En el siguiente ejemplo (Figura 93), trataremos un caso de una estantería con
dos niveles de profundidad.
90
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 93. Cajas apiladas en dos niveles de profundidad.
Aplicando el algoritmo del apartado 6.2, resulta la Figura 94, con polígonos
negros en el lugar correspondiente a cada caja.
Figura 94. Detección de cajas en dos dimensiones.
91
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Tras haber realizado un análisis con múltiples casos, se ha llegado a la
conclusión de que el cociente entre el área del polígono de mayor de tamaño de un
nivel de profundidad y cualquier otra caja presente en ese mismo nivel es inferior a
1.2, es decir, todas las cajas de un mismo nivel sufren como máximo un decremento
de un 16.66% respecto al área de la caja de mayor.
El vector area calculado en el apartado 6.2 nos da información acerca del área
del frontal de cada una de las cajas
Figura 95. Vector area.
Debemos distinguir entre las cajas que se encuentran situadas a más
profundidad y aquellas que se encuentran más cerca.
Para ello, buscamos la caja de área mayor y le asignamos la etiqueta „1‟.
Seguidamente, aquellas cajas con un área no inferior a un 16.66% del valor de la caja
mayor con la etiqueta „1‟, serán etiquetadas igualmente con este mismo valor. Una vez
completado el nivel „1‟, se vuelve a buscar a la caja mayor sin nivel asignado, y se
repite el mismo proceso, asignándole la etiqueta „2‟ y a todas aquellas que no difieren
más de un 16.66%.
Por otra parte, aunque deben ser evitados, es posible que queden niveles
intermedios no visibles a la fotografía, produciéndose un salto de nivel tal y como se
aprecia en la Figura 96.
Técnicamente, esto ocurrirá cuando la siguiente caja de mayor tamaño una vez
completado el nivel anterior, presente un cociente superior a 2.3 respecto al mayor
área del nivel anterior al que nos referimos, esto es, un decremento de un 56.5%. En
este caso, la siguiente etiqueta a asignar para el siguiente nivel sería „3‟, ya que el
nivel „2‟ no quedaría a la vista. Es posible que puedan producirse varios saltos en un
mismo paso, para el caso de dos saltos, el cociente debe ser superior a 4.6, y la
etiqueta a asignar sería „4‟, quedando ocultos los niveles „2‟ y „3‟ y así sucesivamente.
92
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Figura 96 Salto de nivel.
En el ejemplo presente, no se produce ningún salto de nivel como se puede
observar en la gráfica de la Figura 97 donde se muestran los límites para las cajas del
mismo nivel, y para uno, dos y tres saltos de nivel. Observamos que el siguiente nivel
sería el „2‟ (caja número 5).
Figura 97. Área de las cajas y saltos correspondientes al primer nivel.
93
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
La caja de con mayor tamaño del nivel actual se representa en color rojo. Así
pues como la siguiente caja mayor (la número 5), se encuentra fuera del rango de
salto de nivel, se le asigna la etiqueta „2‟ y también a todas las demás dentro de los
márgenes de su mismo nivel. De esta forma queda finalizado el proceso de etiquetado.
Figura 98. Área de las cajas y saltos correspondientes al segundo nivel.
El código que realiza el etiquetado en Matlab es el siguiente:
agrupar=area;
m=length(area);
clases=zeros(1,m);
rango=0;
mayor=max(agrupar);
while max(agrupar)>0
aux=max(agrupar);
salto=floor((mayor/aux)/2.3);
rango=rango+salto;
% Cuenta el número de saltos de nivel
% Actualiza la etiqueta
mayor=max(agrupar);
94
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
rango=rango+1;
for k=1:m
% Etiqueta cajas en un mismo nivel
if((mayor/agrupar(k))<1.2)
clases(k)=rango;
agrupar(k)=0;
end
end
end
Figura 99. Cajas etiquetadas.
Una vez etiquetadas las cajas, resulta bien sencilla la contabilización de las
mismas, conociendo el número de cajas interiores de la fila más cercana. Esto tiene
fácil solución, con un valor de referencia ajustable según la posición de la cámara y el
entorno de trabajo, o bien introduciendo el valor cerca manualmente.
reord=max(clases)+min(clases);
for k=1:m
clases(k)=reord-clases(k);
end
% Inversión de etiquetas
total=0;
for k=1:m
% Suma cajas
total=total+cerca-(max(clases)-clases(k));
end
95
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
h = msgbox(['Se han encontrado las siguientes cajas: ' num2str(total)]);
6.3.1 EJEMPLOS
A continuación se muestran varios casos prácticos de la aplicación del algoritmo
de detección. Además, en ellos se irán mostrando cómo van siendo etiquetadas las
cajas en cada nivel paso a paso.
96
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 1 (9 CAJAS)
Caja
1
2
3
4
5
Área (píxeles)
4.7890e+04
2.8058e+04
2.7573e+04
4.6982e+04
9.7915e+04
Etiqueta
2
3
3
2
1
Total cajas
detectadas
97
9
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 2 (8 CAJAS)
Caja
1
2
3
4
Área (píxeles)
1.3034e+05
1.2261e+05
3.3655e+04
3.1509e+04
Etiqueta
3
3
1
1
Total cajas
detectadas
98
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 3 (8 CAJAS)
Caja
1
2
3
4
5
6
Área (píxeles)
6.6765e+04
7.5423e+04
4.2089e+04
4.2765e+04
3.8318e+04
4.4276e+04
Etiqueta
1
1
2
2
2
2
Total cajas
detectadas
99
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 4 (7 CAJAS)
Caja
1
2
3
4
5
6
7
Área (píxeles)
6.8637e+04
6.9922e+04
6.9749e+04
7.3629e+04
7.7605e+04
7.2206e+04
7.2802e+04
Etiqueta
1
1
1
1
1
1
1
Total cajas
detectadas
100
7
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 5 (8 CAJAS)
Caja
1
2
3
4
Área (píxeles)
2.4695e+04
4.9742e+04
1.8680e+05
2.6929e+04
Etiqueta
4
3
1
4
Total cajas
detectadas
101
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 6 (8 CAJAS)
Caja
1
2
3
4
5
Área (píxeles)
1.3153e+05
2.1985e+04
2.1716e+04
2.1663e+04
2.1638e+04
Etiqueta
1
4
4
4
4
Total cajas
detectadas
102
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 7 (10 CAJAS)
Caja
1
2
3
4
5
6
7
Área (píxeles)
6.2500e+04
6.7287e+04
3.7378e+04
3.7864e+04
3.6418e+04
6.4721e+04
3.5149e+04
Etiqueta
1
1
2
2
2
1
2
Total cajas
detectadas
103
10
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 8 (10 CAJAS)
Caja
1
2
3
4
5
Área (píxeles)
7.2801e+04
3.9260e+04
2.3752e+04
2.3135e+04
7.7374e+04
Etiqueta
1
2
3
3
1
Total cajas
detectadas
104
10
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 9 (9 CAJAS)
Caja
1
2
3
4
5
Área (píxeles)
6.2747e+04
6.2846e+04
2.2177e+04
2.0020e+04
2.1548e+04
Etiqueta
1
1
3
3
3
Total cajas
detectadas
105
9
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 10 (9 CAJAS)
Caja
1
2
3
4
Área (píxeles)
4.4042e+04
4.5311e+04
4.3410e+04
9.1145e+04
Etiqueta
2
2
2
1
Total cajas
detectadas
106
9
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 11 (8 CAJAS)
Caja
1
2
3
4
5
6
7
Área (píxeles)
6.2408e+04
3.4368e+04
3.3615e+04
3.4372e+04
3.0557e+04
3.2751e+04
3.3489e+04
Etiqueta
1
2
2
2
2
2
2
Total cajas
detectadas
107
8
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 12 (10 CAJAS)
Caja
1
2
3
4
Área (píxeles)
5.6817e+04
2.1645e+04
3.1790e+04
1.1973e+05
Etiqueta
2
4
3
1
Total cajas
detectadas
108
10
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
6.3.2 CONTEO DE CAJAS CON KINECT
En el último apartado hemos realizado el conteo de las cajas calculando niveles
de profundidad en función del tamaño de las mismas, en una foto en dos dimensiones
convencional. Sin embargo, si disponemos una cámara que nos proporcione
información acerca de la coordenada Z en una fotografía, puede resultar interesante el
uso de la misma.
En nuestro caso, disponemos de una Kinect para Xbox 360 compatible con
Windows y Matlab, e intentaremos aprovechar los valores de profundidad en una
fotografía que esta cámara especial nos ofrece.
El principal inconveniente que se ha detectado en la práctica ha sido el hecho de
que la versión de Kinect de la que se dispone no es capaz de trabajar con el modo
cercano, por lo que los objetos deben estar situados a 80 centímetros como mínimo
del sensor de profundidad para poder obtener una medida del eje Z. Por ello, ha sido
necesario situar las cajas bastante alejadas de la cámara, perdiéndose de esta forma
precisión en las imágenes RGB que la Kinect captura, y haciendo imposible la
detección de un perfil de una caja con esta misma cámara a una distancia superior a
80 centímetros.
Por todo esto, el problema ha sido resuelto aplicando en primer lugar el conteo
de cajas en dos dimensiones con una cámara convencional, como en el apartado 6.2,
y posteriormente, detectando la distancia de cada una de estas cajas con la Kinect que
disponemos para el proyecto.
En los ejemplos que veremos, trabajaremos con cajas situadas en dos niveles
distintos de profundidad.
En este primer ejemplo, dispondremos de un total de 5 cajas, apiladas en dos
niveles de profundidad, 4 de ellas en el nivel más lejano, y la última delante de estas.
Figura 100. Cajas apiladas a dos niveles de profundidad.
109
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Aplicando el algoritmo del apartado 6.2 para cajas en dos dimensiones,
obtendríamos el número total de cajas detectadas frontalmente como se muestra en la
Figura 101.
Figura 101. Detección de cajas en dos dimensiones
Dicho valor numérico queda almacenado en la variable contar, y será utilizado a
continuación tras el empleo de la Kinect.
colorVid = videoinput('kinect',1);
depthVid = videoinput('kinect',2);
% Inicio de cámara de distancia
handleToAxes = axes();
hImage = image(zeros(480,640,'uint8'));
hold off;
axis auto;
axis on;
preview(colorVid, hImage);
% Inicia vista previa
hold on
110
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
thisBB = [227 345 210 135];
% Crea área para recortar en preview
rectangle('Position', [thisBB(1),thisBB(2),thisBB(3),thisBB(4)],
'EdgeColor','r','LineWidth',2 )
pause
sceneImage=getsnapshot(colorVid);
depthImage=getsnapshot(depthVid);
depthImage = imcrop(depthImage, thisBB);
sceneImage = imcrop(sceneImage, thisBB);
depthImage=fliplr(depthImage);
sceneImage=fliplr(sceneImage);
%
%
%
%
%
%
Captura imagen a color
Captura imagen profundidad
Recorta imagen profundidad
Recorta imagen color
Imagen espejo (real)
Imagen espejo (real)
RGB=label2rgb(depthImage);
figure
imshow(sceneImage)
figure
imshow(depthImage)
figure
imshow(RGB)
% Convierte a escala color
% DepthImage a escala grises
% DepthImage a escala color
Figura 102. Previsualización e imagen a color recortada.
Figura 103. DepthImage a escala de grises y escala de color.
111
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
A continuación, calculamos el histograma de distancias en milímetros de cada
punto de la imagen de profundidad (Figura 104).
x=500:10:1500;
figure, hist(double(depthImage),x);
u=hist(double(depthImage),x);
Figura 104. Histograma de distancias.
Podemos observar que las cajas corresponden a las muestras situadas entre los
valores 800 y 1100 centímetros, el resto será información no deseada que filtraremos.
Las cajas situadas en el nivel más lejano a la cámara serán aquellas con pixeles
con distancias comprendidas entre 910 y 1100 milímetros de distancia y aquellas cajas
más cercanas tendrán valores entre 800 y 910 milímetros.
Así pues, eliminamos todos esos valores fuera de esos rangos, quedándonos
con los valores correspondientes a las cajas, y realizamos una cuenta del número de
píxeles correspondientes a la caja del nivel posterior y del nivel más cercano.
dim=size(depthImage);
% Dimensión imagen recortada
alto=dim(1,1);
ancho=dim(1,2);
copia=zeros(alto,ancho);
112
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
for i=1:alto
for k=1:ancho
copia(i,k)=depthImage(i,k);
if depthImage(i,k)>1100
copia(i,k)=0;
end
if depthImage(i,k)<800
copia(i,k)=0;
end
if copia(i,k)<910&&copia(i,k)>800
cerca=cerca+1;
end
if copia(i,k)>910&&copia(i,k)<1100
lejos=lejos+1;
end
% Filtra valores
% Filtra valores
% Píxeles nivel más cerca
% Píxeles nivel más lejos
end
end
RGB2=label2rgb(copia);
figure
imshow(RGB2)
figure, hist(double(copia),x);
v=hist(double(copia),x);
% Conversión a color
% DepthImage (Solo cajas)
% Nuevo histograma
Figura 105. Nueva imagen de profundidad y nuevo histograma.
113
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
Obtener el total de cajas conocido el porcentaje de píxeles de la fotografía
correspondiente al nivel cercado es bien sencillo.
Calculamos el número de cajas del primer nivel multiplicando el porcentaje de
área delantera por el total de cajas en dos dimensiones, y truncamos la parte decimal
debido a que las zonas más cercanas presentan un mayor número de píxeles debido a
la perspectiva. Este valor sumado al total de cajas en dos dimensiones nos da el
número total de cajas de la figura.
areadelante=cerca/(cerca+lejos);
% Porcentaje área delante
cajasdelante=floor(contar*areadelante);
h = msgbox(['Porcentaje de área delante: ' num2str(areadelante)]);
h = msgbox(['Cajas delante: ' num2str(cajasdelante)]);
h = msgbox(['Número total de cajas: ' num2str(cajasdelante+contar)]);
Por último, se muestran varias situaciones posibles y los valores numéricos y
resultados obtenidos.
114
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 1 (7 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
5
0.4677
2.33
2
7
Histograma de distancias de cajas obtenido
115
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 2 (7 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
7
0
0
0
7
Histograma de distancias de cajas obtenido
116
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 3 (9 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
6
0.5792
3.4754
3
9
Histograma de distancias de cajas obtenido
117
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 4 (8 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
4
1
4
4
8
Histograma de distancias de cajas obtenido
118
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 5 (5 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
3
0.7186
2.1558
2
5
Histograma de distancias de cajas obtenido
119
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 6 (10 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
7
0.5034
3.5241
3
10
Histograma de distancias de cajas obtenido
120
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 7 (8 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
8
0
0
0
8
Histograma de distancias de cajas obtenido
121
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
EJEMPLO 8 (10 CAJAS)
Imagen a color y de profundidad obtenida con Kinect
Número de cajas detectadas
nivel posterior
Porcentaje de área nivel
frontal
Número de cajas detectadas
nivel frontal
Número de cajas detectadas
nivel frontal (truncado)
Total cajas
detectadas
7
0.1786
1.2504
1
8
Histograma de distancias de cajas obtenido
122
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
CAPÍTULO 7
CONCLUSIONES
123
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
7.1 CONCLUSIONES
Según hemos visto en este proyecto, es posible aplicar distintos métodos para el
conteo de medicamentos unidosis y de cajas de medicamentos en una farmacia de un
hospital. Estos métodos resultan muy eficaces y su puesta real en práctica puede
facilitar el trabajo en la realización de inventarios.
Sin embargo, posibles futuras mejoras y líneas de investigación, podrían hacer
más efectivas las propuestas desarrolladas en el presente documento.
En el conteo de medicamentos unidosis, pienso que podría ser bastante útil la
utilización de una báscula electrónica con cierta precisión para realizar conteos
utilizando el peso de las cápsulas.
En cuanto al conteo de cajas, considero interesante el diseño de una estantería
con cierta pendiente, donde las cajas vayan apilándose siempre al fondo, facilitando
una correcta distribución de una forma cómoda. Este diseño no debe presentar mucha
dificultad, y podría llevarse a la práctica con la utilización de una impresora de tres
dimensiones.
En dicha estantería resultaría también bastante útil la inclusión de un código QR
que, al ser detectado, pueda identificar de manera rápida el tipo de medicamento que
está siendo analizado, y el posterior almacenamiento y tratamiento de los datos
obtenidos en una aplicación que permita llevar el control de una manera más
automatizada del stock de la farmacia.
En cuanto a la utilización de una Kinect, las dificultades presentadas al utilizar un
ejemplar sin modo cercano, han impedido un uso más provechoso de la misma.
Pienso que una Kinect con este modo, facilitaría bastante las cosas.
Finalmente, como opinión personal respecto al trabajo, pienso que me ha sido
bastante útil para profundizar conocimientos sobre visión artificial campo sobre el cual,
me encontraba bastante interesado, de hecho por eso elegí un proyecto de este tipo.
Destacar que me siento muy satisfecho con el proyecto realizado y de esta manera
poner así fin así a mi etapa como estudiante de ingeniería de telecomunicaciones.
Sevilla, marzo de 2016
124
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
BIBLIOGRAFÍA
[1] Parra Guerrero, F., 2005. “Gestión de stocks”. 3ª ed. Editorial ESIC, Madrid
[2] Rambaux, A., 1988. “Gestión económica de stocks”. 2ª ed. Editorial Hispano
Europea, Barcelona
[3] Guerrero-Salas, H., 2010. “Inventarios. Manejo y control”. Editorial Starbook
Madrid
[4] López Ramírez, A., 2014. “Optimización de Estimación de la Demanda en Servicio
Farmacéutico Hospitalario”. Escuela Superior de Ingeniería. Universidad de Sevilla
[5] Maestre Torreblanca, J.M., Isla Tejera, B., Fernández García, M.I., del Prado
Llergo, J.R., Álamo Cantarero, T., Fernández Camacho, E., 2011. “Análisis y
minimización del riesgo de rotura de stock aplicado a la gestión en farmacia
hospitalaria”. Farm Hosp. 2012; 36(3):130-134
[6] Díaz-Maroto, S. “Gestión del material sanitario en el Servicio de Farmacia del
Hospital General Penitenciario: (I) Clasificación y elaboración de una Guía de material
sanitario. Farm Hosp 1995; 19: 105-8
[7] Muller, M., 2005. “Fundamentos de administración de inventarios”. Editorial Norma
[8] Image Acquisition Toolbox for use with MATLAB®: user's guide, 2014
[9] Image Processing Toolbox for use with MATLAB®: user's guide, 2014
[10] Computer Vision System Toolbox for use with MATLAB®: user's guide, 2014
125
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
[11] Vélez Serrano, J. F., Moreno Díaz, A. B., Sánchez Calle, A., 2007. “Visión por
computador”. 2ª ed.
[12] García, I.D., 2008. “Visión Artificial y Procesamiento Digital de Imágenes usando
Matlab”. Ecuador
[13] Gonzalez, R.C., Woods R., 2007. "Digital Image Processing", 3ª ed. AddisonWesley
[14] Maravall, D., 1993. "Reconocimiento de Formas y Visión Artificial". Editorial Rama
[15] Procesamiento de imágenes con Matlab
asignatura.us.es/imagendigital/Matlab_PID_1314.pdf
[16] Segmentación de imágenes
http://asignatura.us.es/imagendigital/Tema5_SegmentacionRegionesUmbralizacion.pdf
[17] Fundamentos de la visión artificial
https://rodas5.us.es/file/26a3632e-7124-4e72-b045d9ae3edd3938/1/Fundamentos%20de%20la%20Vision%20Artifical.pdf
[18] Passariello, G., Mora, F., 1995. “Imágenes Médicas: Adquisición, Análisis,
Procesamiento e Interpretación”. 1ª ed. Editorial Equinoccio. Venezuela
[19] Legua, C., 2013 “Seguimiento automático de objetos en sistemas con múltiples
cámaras”. Escuela Politécnica Superior. Madrid
126
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
[20] Romero, A., Cazorla, M., 2009. “Comparativa de detectores de características
visuales y su aplicación al SLAM”. X workshop de agentes físicos. Cáceres
[21] H. Bay, T. Tuytelaars,L. V. Gool, 2006 “Surf: Speeded up robust features”.
ECCV, pp. 404–417
[22] Aracil, R., 2013 “Desarrollo de un sistema cognitivo de visión para la navegación
robótica”. Escuela Técnica Superior de Ingeniería Informática. Universidad Politécnica
de Valencia. Valencia
[23] Lowe, D., 1999. "Object recognition from local scale-invariant features".
Proceedings of the International Conference on Computer Vision. 2. pp. 1150–1157
[24] Guerrero, W., 2011 “Detección y descripción de puntos característicos en
imágenes multiespectrales utilizando esquemas clásicos”.
Escuela Superior
Politécnica del Litoral. Guayaquil
[25] Peraza, J.M., 2009 “Estimación de la distancia recorrida por un robot móvil
mediante la utilización de descriptores surf”. Escuela Politécnica Superior. Universidad
Carlos III. Madrid
[26] Sistema de distribución de medicamentos por dosis unitarias
http://www.sefh.es/bibliotecavirtual/ops/sdmdu.pdf
[27] Gestión de stocks de medicamentos
http://es.slideshare.net/ugcfarmaciagranada/pnt-13-gestin-de-stocks-de-medicamentos
[28] Hospital regional de Málaga. Área de dosis unitaria
http://www.hospitalregionaldemalaga.es/InforCorporativa/UnidadesdeGesti%C3%B3nC
l%C3%ADnica/UGCFarmacia/AreaDosisUnitaria.aspx
127
APLICACIONES DE VISIÓN POR COMPUTADOR
EN FARMACIA HOSPITALARIA
[29] Object Detection in a Cluttered Scene Using Point Feature Matching
http://es.mathworks.com/help/vision/examples/object-detection-in-a-cluttered-sceneusinusing-point-feature-matching.html
[30] Near mode in Kinect
https://blogs.msdn.microsoft.com/kinectforwindows/2012/01/20/near-mode-what-it-isand-isnt/
[31] Modo de funcionamiento normal de una Kinect
http://kinectformatlab.es.tl/MODO-DE-FUNCIONAMIENTO-NORMAL.htm
[32] Aplicaciones con Microsoft Kinect
https://decibel.ni.com/content/blogs/carlosotiniano/2014/04/09/aplicaciones-conmicrosoft-kinect
[33] Mapeo de intensidad de una imagen
http://www-gva.dec.usc.es/~mjose/docencia/3ciclo/tema1.htm
128
Descargar