128
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 …bibing.us.es/proyectos/abreproy/12325/fichero/PFC.pdfLa visión artificial, en un intento de reproducir digitalmente este comportamiento,

  • Upload
    others

  • View
    4

  • Download
    0

Embed Size (px)

Citation preview

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

2

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

3

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

4

Í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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

5

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

6

CAPÍTULO 1

STOCKS E INVENTARIOS

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

7

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

8

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

9

CAPÍTULO 2

INTRODUCCIÓN A LA VISIÓN POR

COMPUTADOR

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

10

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

11

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

12

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

13

CAPÍTULO 3

VISIÓN POR COMPUTADOR EN MATLAB

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

14

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

15

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

16

Figura 5. Imagen indexada [9].

Figura 6. Imagen RGB [9].

Figura 7. Imagen en escala de grises [9].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

17

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

18

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

19

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

20

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

21

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

22

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

23

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

𝑖𝑚𝑠𝑕𝑜𝑤(𝑏𝑤)

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

24

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

25

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

26

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

27

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

28

Tabla 2. Propiedades del comando regionprops.

PROPIEDAD DESCRIPCIÓN

Area 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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

29

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).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

30

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

31

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

∂x2 𝑔(σ) 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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

32

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

33

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).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

34

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

35

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

36

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;

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

37

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);

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

38

% 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).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

39

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

40

CAPÍTULO 4

ADQUISICIÓN DE IMÁGENES

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

41

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

42

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'

Columns 6 through 10

'352x288' '432x240' '544x288' '640x360' '752x416'

Columns 11 through 15

'800x448' '800x600' '864x480' '960x544' '960x720'

Columns 16 through 19

'1024x576' '1184x656' '1280x720' '1280x960'

>> cam.resolution % 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)

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

43

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

44

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); % Crea un objeto para imagen color depthVid = videoinput('kinect',2); % Crea objeto para imagen profundidad sceneImage=getsnapshot(colorVid); % Captura la imagen depthImage=getsnapshot(depthVid); % Captura la imagen RGB=label2rgb(depthImage); % Realiza una conversión a RGB de la

imagen de profundidad para hacerla más vistosa

figure imshow(sceneImage) figure imshow(RGB);

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

45

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

46

CAPÍTULO 5

APLICACIÓN AL CONTEO DE UNIDOSIS

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

47

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].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

48

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

49

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

50

Figura 44. Carro de medicación unidosis.

Figura 45. Consulta de pacientes externos y sala de unidosis [4].

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

51

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

52

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');

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

53

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

54

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,

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

55

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');

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

56

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

57

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).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

58

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

59

Figura 57. Imagen gris bordes.

Figura 58. Imagen bordes después máscara.

Figura 59. Imagen rellenada.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

60

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

61

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

62

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

63

5.3.3 EJEMPLOS

EJEMPLO 1 (10 cápsulas)

Grupo Área (píxeles) Cápsulas

detectadas

1 2.998 1 2 3.128 1 3 6.064 2 4 2.897 1 5 3.118 1 6 3.025 1 7 3.001 1 8 2.852 1 9 2.910 1

Total cápsulas detectadas

10

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

64

EJEMPLO 2 (12 CÁPSULAS)

Grupo Área (píxeles) Cápsulas

detectadas

1 10.502 3 2 3.926 1 3 3.539 1 4 14.671 4 5 3.463 1 6 3.617 1 7 3.828 1

Total cápsulas detectadas

12

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

65

EJEMPLO 3 (6 CÁPSULAS)

Grupo Área (píxeles) Cápsulas

detectadas

1 4.029 1 2 4.425 1 3 4.409 1 4 13.540 3

Total cápsulas detectadas

6

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

66

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) Cápsulas

detectadas

1 4.314 1 2 4.238 1 3 4.539 1 4 4.611 1 5 4.002 1 6 4.358 1 7 4.039 1 8 4.435 1 9 11.987 3

10 3.873 1 11 4.457 1 12 7.483 2 13 8.243 2 14 7.183 2

Total cápsulas detectadas

19

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

67

EJEMPLO 5 (5 CÁPSULAS Y FONDO NO HOMOGÉNEO)

Grupo Área (píxeles) Cápsulas

detectadas

1 6.142 1 2 6.048 1 3 6.193 1 4 5.634 1 5 6.086 1

Total cápsulas detectadas

5

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

68

EJEMPLO 6 (16 CÁPSULAS Y FONDO NO HOMOGÉNEO)

Grupo Área (píxeles) Cápsulas

detectadas

1 18.669 4 2 4.891 1 3 4.971 1 4 4.607 1 5 4.933 1 6 9.940 2 7 9.802 2 8 4.629 1 9 9.610 2

10 4.858 1

Total cápsulas detectadas

16

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

69

EJEMPLO 7 (7 CÁPSULAS DE OTRO MEDICAMENTO Y FONDO NO

HOMOGÉNEO)

Observamos que, además, es aplicable también a otro tipo de unidosis (en este

caso, Ibuprofeno).

Grupo Área (píxeles) Cápsulas

detectadas

1 3.542 1 2 7.584 2 3 3.459 1 4 3.521 1 5 3.214 1 6 3.187 1

Total cápsulas detectadas

7

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

70

EJEMPLO 8 (9 CÁPSULAS DE OTRO MEDICAMENTO)

Grupo Área (píxeles) Cápsulas

detectadas

1 5.660 1 2 5.467 1 3 4.948 1 4 5.613 1 5 15.890 3 6 5.095 1 7 5.603 1

Total cápsulas detectadas

9

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

71

CAPÍTULO 6

APLICACIÓN AL CONTEO DE CAJAS

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

72

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

73

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; % Variable contador boxImage = imread('primperan.jpg'); % Imagen de envase de Primperan boxImage=boxImage(:,:,2); % Capa verde de la imagen figure; imshow(boxImage); title(‘Perfil de una caja'); cam=webcam; % Inicialización de la cámara cam.resolution='1280x960'; preview(cam); pause sceneImage=snapshot(cam); % Captura de la escena color=sceneImage; figure; imshow(color); title(‘Escena a analizar’); sceneImage=sceneImage(:,:,2); sceneImage=imadjust(sceneImage); % Realce de intensidad

Figuras 64 y 65. Perfil de una caja y escena a analizar.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

74

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

75

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 si no hay más coincidencias fin=1; end if fin==0 contar=contar+1; matchedBoxPoints = boxPoints(boxPairs(:, 1), :); matchedScenePoints = scenePoints(boxPairs(:, 2), :);

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

76

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).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

77

Considerando solamente puntos inliers (Figura 69), obtenemos la

correspondencia de la imagen tipo, con una caja de la escena (Figura 70).

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

78

[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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

79

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

80

Figura 74. 300 puntos más significativos de la escena.

Figura 75. Puntos combinados (Incluyendo Outliers).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

81

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

82

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

83

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

84

Figura 81. 300 puntos más significativos de la escena.

Figura 82. Puntos combinados (Incluyendo Outliers).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

85

Figura 83. Primera caja detectada.

Figura 84. Última caja detectada.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

86

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

87

Figura 87. 300 Puntos más significativos de la escena.

Figura 88. Puntos combinados (Incluyendo Outliers).

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

88

Figura 89. Primera caja detectada.

Figura 90. Última caja detectada.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

89

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

90

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

91

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

92

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

93

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

94

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); % Cuenta el número de saltos de nivel rango=rango+salto; % Actualiza la etiqueta mayor=max(agrupar);

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

95

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 % Inversión de etiquetas clases(k)=reord-clases(k); end total=0; for k=1:m % Suma cajas total=total+cerca-(max(clases)-clases(k)); end

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

96

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

97

EJEMPLO 1 (9 CAJAS)

Caja Área (píxeles) Etiqueta

1 4.7890e+04 2 2 2.8058e+04 3 3 2.7573e+04 3 4 4.6982e+04 2 5 9.7915e+04 1

Total cajas detectadas

9

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

98

EJEMPLO 2 (8 CAJAS)

Caja Área (píxeles) Etiqueta

1 1.3034e+05 3 2 1.2261e+05 3 3 3.3655e+04 1 4 3.1509e+04 1

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

99

EJEMPLO 3 (8 CAJAS)

Caja Área (píxeles) Etiqueta

1 6.6765e+04 1 2 7.5423e+04 1 3 4.2089e+04 2 4 4.2765e+04 2 5 3.8318e+04 2 6 4.4276e+04 2

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

100

EJEMPLO 4 (7 CAJAS)

Caja Área (píxeles) Etiqueta

1 6.8637e+04 1 2 6.9922e+04 1 3 6.9749e+04 1 4 7.3629e+04 1 5 7.7605e+04 1 6 7.2206e+04 1 7 7.2802e+04 1

Total cajas detectadas

7

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

101

EJEMPLO 5 (8 CAJAS)

Caja Área (píxeles) Etiqueta

1 2.4695e+04 4 2 4.9742e+04 3 3 1.8680e+05 1 4 2.6929e+04 4

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

102

EJEMPLO 6 (8 CAJAS)

Caja Área (píxeles) Etiqueta

1 1.3153e+05 1 2 2.1985e+04 4 3 2.1716e+04 4 4 2.1663e+04 4 5 2.1638e+04 4

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

103

EJEMPLO 7 (10 CAJAS)

Caja Área (píxeles) Etiqueta

1 6.2500e+04 1 2 6.7287e+04 1 3 3.7378e+04 2 4 3.7864e+04 2 5 3.6418e+04 2 6 6.4721e+04 1 7 3.5149e+04 2

Total cajas detectadas

10

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

104

EJEMPLO 8 (10 CAJAS)

Caja Área (píxeles) Etiqueta

1 7.2801e+04 1 2 3.9260e+04 2 3 2.3752e+04 3 4 2.3135e+04 3 5 7.7374e+04 1

Total cajas detectadas

10

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

105

EJEMPLO 9 (9 CAJAS)

Caja Área (píxeles) Etiqueta

1 6.2747e+04 1 2 6.2846e+04 1 3 2.2177e+04 3 4 2.0020e+04 3 5 2.1548e+04 3

Total cajas detectadas

9

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

106

EJEMPLO 10 (9 CAJAS)

Caja Área (píxeles) Etiqueta

1 4.4042e+04 2 2 4.5311e+04 2 3 4.3410e+04 2 4 9.1145e+04 1

Total cajas detectadas

9

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

107

EJEMPLO 11 (8 CAJAS)

Caja Área (píxeles) Etiqueta

1 6.2408e+04 1 2 3.4368e+04 2 3 3.3615e+04 2 4 3.4372e+04 2 5 3.0557e+04 2 6 3.2751e+04 2 7 3.3489e+04 2

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

108

EJEMPLO 12 (10 CAJAS)

Caja Área (píxeles) Etiqueta

1 5.6817e+04 2 2 2.1645e+04 4 3 3.1790e+04 3 4 1.1973e+05 1

Total cajas detectadas

10

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

109

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

110

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

111

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); % Captura imagen a color depthImage=getsnapshot(depthVid); % Captura imagen profundidad depthImage = imcrop(depthImage, thisBB); % Recorta imagen profundidad sceneImage = imcrop(sceneImage, thisBB); % Recorta imagen color depthImage=fliplr(depthImage); % Imagen espejo (real) sceneImage=fliplr(sceneImage); % Imagen espejo (real) RGB=label2rgb(depthImage); % Convierte a escala color figure imshow(sceneImage) figure imshow(depthImage) % DepthImage a escala grises figure imshow(RGB) % DepthImage a escala color

Figura 102. Previsualización e imagen a color recortada.

Figura 103. DepthImage a escala de grises y escala de color.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

112

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);

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

113

for i=1:alto for k=1:ancho copia(i,k)=depthImage(i,k); if depthImage(i,k)>1100 % Filtra valores copia(i,k)=0; end if depthImage(i,k)<800 % Filtra valores copia(i,k)=0; end if copia(i,k)<910&&copia(i,k)>800 % Píxeles nivel más cerca cerca=cerca+1; end if copia(i,k)>910&&copia(i,k)<1100 % Píxeles nivel más lejos lejos=lejos+1; end end end RGB2=label2rgb(copia); % Conversión a color figure imshow(RGB2) % DepthImage (Solo cajas) figure, hist(double(copia),x); % Nuevo histograma v=hist(double(copia),x);

Figura 105. Nueva imagen de profundidad y nuevo histograma.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

114

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.

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

115

EJEMPLO 1 (7 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

5

Porcentaje de área nivel frontal

0.4677

Número de cajas detectadas nivel frontal

2.33

Número de cajas detectadas nivel frontal (truncado)

2

Total cajas detectadas

7

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

116

EJEMPLO 2 (7 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

7

Porcentaje de área nivel frontal

0

Número de cajas detectadas nivel frontal

0

Número de cajas detectadas nivel frontal (truncado)

0

Total cajas detectadas

7

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

117

EJEMPLO 3 (9 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

6

Porcentaje de área nivel frontal

0.5792

Número de cajas detectadas nivel frontal

3.4754

Número de cajas detectadas nivel frontal (truncado)

3

Total cajas detectadas

9

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

118

EJEMPLO 4 (8 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

4

Porcentaje de área nivel frontal

1

Número de cajas detectadas nivel frontal

4

Número de cajas detectadas nivel frontal (truncado)

4

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

119

EJEMPLO 5 (5 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

3

Porcentaje de área nivel frontal

0.7186

Número de cajas detectadas nivel frontal

2.1558

Número de cajas detectadas nivel frontal (truncado)

2

Total cajas detectadas

5

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

120

EJEMPLO 6 (10 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

7

Porcentaje de área nivel frontal

0.5034

Número de cajas detectadas nivel frontal

3.5241

Número de cajas detectadas nivel frontal (truncado)

3

Total cajas detectadas

10

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

121

EJEMPLO 7 (8 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

8

Porcentaje de área nivel frontal

0

Número de cajas detectadas nivel frontal

0

Número de cajas detectadas nivel frontal (truncado)

0

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

122

EJEMPLO 8 (10 CAJAS)

Imagen a color y de profundidad obtenida con Kinect

Histograma de distancias de cajas obtenido

Número de cajas detectadas nivel posterior

7

Porcentaje de área nivel frontal

0.1786

Número de cajas detectadas nivel frontal

1.2504

Número de cajas detectadas nivel frontal (truncado)

1

Total cajas detectadas

8

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

123

CAPÍTULO 7

CONCLUSIONES

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

124

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

125

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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

126

[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. Addison-

Wesley

[14] Maravall, D., 1993. "Reconocimiento de Formas y Visión Artificial". Editorial Ra-

ma

[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-b045-

d9ae3edd3938/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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

127

[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

APLICACIONES DE VISIÓN POR COMPUTADOR

EN FARMACIA HOSPITALARIA

128

[29] Object Detection in a Cluttered Scene Using Point Feature Matching

http://es.mathworks.com/help/vision/examples/object-detection-in-a-cluttered-scene-usinusing-point-feature-matching.html

[30] Near mode in Kinect

https://blogs.msdn.microsoft.com/kinectforwindows/2012/01/20/near-mode-what-it-is-

and-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-con-

microsoft-kinect

[33] Mapeo de intensidad de una imagen

http://www-gva.dec.usc.es/~mjose/docencia/3ciclo/tema1.htm