X Jornadas de Data Mining & BI Octubre 2015 Martin Volpacchio ** * Co-Founder Pi Analytical Solvers ** Profesor FI MDM Universidad Austral ** MS Math Economics Data Sci, Mg Sc. Analytics Research CDR EL PIXEL RE-VISITADO IMAGEN MINING Y VISUALIZACION DINAMICA Complex Made Easy TEMARIO 0. Porque es importante? 1. Videos Gráficos en R 2. Procesamientos de imágenes 3. Ejemplos 3.1 Recuperar imagines borrosas 3.2 Aplicaciones en Diagnóstico 4. Conclusiones 0. POR QUE ES IMPORTANTE? …DONDE APLICA? The Complex Made Easy IMPORTANCIA 3 ASPECTOS… Visualización: Facilitar el entendimiento de procesos dinámicos…Gráficos. Machine Learning, estadística, procesos matemáticos…posee naturaleza dinámica, aplica convergencia, evolución, perturbaciones, etc, Image Mining: Capturar y entender patrones en imágenes y videos. Múltiples posibilidades en Salud, Biología, redes sociales… Procesamiento de imágenes/Visión por computadora: Mejorar el Sistema Visual Humano artificialmente…astronomía, seguridad, Trafico… 1. VIDEO GRAFICOS? …BE DISRUPTIVE The Complex Made Easy BASICS … VIDEOS GRAFICOS Presentan espacial información que cambia sobre el tiempo o presentar otra dimensión a la imagen estatica UN EJEMPLO DE VIDEO PLOT UN EJEMPLO CON ACTIVEPRESENTER…PRIMITIVE PERO ILUSTRATIVO SLIDE 1 UN EJEMPLO DE VIDEO PLOT UN EJEMPLO CON FFMGEP…UN POCO MAS SOFISTICADO…. Los Frame .png El intervalo de Tiempo El programa FFmpeg El Video PLot UN EJEMPLO DE VIDEO PLOT 2. PROCESAMIENTO DE IMAGENES …EJEMPLOS The Complex Made Easy HERRAMIENTAS BASICAS OPEN SOURCE… Lenguajes C++ Java Python Entre otros… Librerias Aforge.net Cimg (http://cimg.sourceforge.net/) OPencv Entre otros… BASICS … EN PROCESAMIENTO DE IMAGENES… LOS RASTER SON ALMACENADOS EN ARCHIVOS DE IMÁGENES (JPG, TIFF, PNG, GIF, BMP DICOM, ENTRE OTROS) Matriz Raster LOS RASTER SON CARACTERIZADO POR ALTURA, ANCHO Y CANTIDAD DE BIT POR PIXEL 70 A 130 PIXEL POR PULGADAS CUADRADA (2,53CM) EL MODELO RGB ES EL MODO MAS USUAL QUE USAN LOS COMPUTADORAS PARA GENERAR ADITIVAMENTE, A PARTIR DEL ROJO, VERDE Y AZUL, UNA GRAN VARIEDAD DE COLORES RGB TRIPLO ( R, G, B). CADA COLOR ES UN ENTERO ENTRE 0 Y 255 EN EL CASO 3 VECTORES DE 8 BIT (24 BIT), PERO PUEDE EXTENDERSE A 10 (1023), A 16 (0 A 65535) Y MAS, EN ALTA RESOLUCIÓN 3 Pixeles SEGMENTACION SEPARAR REGIONES DE INTERÉS (ROI)… img = cv2.imread(‘paisaje.jpg') screen_res = 1280, 720 scale_width = screen_res[0] / img.shape[1] scale_height = screen_res[1] / img.shape[0] scale = min(scale_width, scale_height) window_width = int(img.shape[1] * scale) window_height = int(img.shape[0] * scale) cv2.namedWindow('dst_rt', cv2.WINDOW_NORMAL) ##cv2.resizeWindow('dst_rt', window_width, window_height) cv2.imshow( 'dst_rt', img ) print img.shape[1] print img[1,2,2] f=img.shape[0] c=img.shape[1] m2=0 count=0 for i in range(0,f): for j in range(0,c): m1=(img[i,j,0]+img[i,j,1]+img[i,j,2]) m2=m2+m1 count=count+1 m2 = m2/count for i in range(0,f): for j in range(0,c): for k in (0,1,2): if (img[i,j,k] < m2): img[i,j,k] = 0 else: img[i,j,k] = 255 cv2.namedWindow('grey', cv2.WINDOW_NORMAL) cv2.imshow( 'grey', img ) Filtro DETECCION DE FRONTERAS EXISTEN MUCHOS METODOS…VEAMOS EL GRADIENTE EN SU VERSIÓN MAS SIMPLIFICADA __author__ = 'Martin: PseudoCodigo original import Librerias Cargar imagen en IMG (Grey NO RGB) Calcular Gradiente for i in range(1,f-1): for j in range(1,c-1): 0,4 0,8 dx=(img[i,j]-img[i+1,j]) dy=(img[i,j]-img[i,j+1]) z=(dx*dx+dy*dy)**(.5) Aplicar threshold de gradiente Mostrar resultados con Bordes. 0,6 0,9 3 . EJEMPLOS AVANZADOS …POWERED BY The Complex Made Easy EJEMPLO I …DETECTAR INFRACTORES DE TRANSITO The Complex Made Easy RECUPERAR IMÁGENES BORROSAS …BLUR+MOVIMIENTO+FOCO The Complex Made Easy PROBLEMA CUAL ES EL NUMERO DE PATENTE? Debemos eliminar el Blur+Movimiento+foco… BLUR QUE ES? Efecto de iluminar y esconder ciertos elementos de una imagen def blur_edge(img, d=31): Kernel Usado h, w = img.shape[:2] img_pad = cv2.copyMakeBorder(img, d, d, d, d, cv2.BORDER_WRAP) img_blur = cv2.GaussianBlur(img_pad, (2*d+1, 2*d+1), -1)[d:-d,d:-d] y, x = np.indices((h, w)) dist = np.dstack([x, w-x-1, y, h-y-1]).min(-1) w = np.minimum(np.float32(dist)/d, 1.0) return img*w + img_blur*(1-w) BLUR QUE ES? BLUR Convolución de la imagen con el kernel gausiano…desmitificado! Kernel Usado ELIMINAR TRANSFORMACION AFIN DE UNA IMAGEN… MOVIMIENTO Es una transformacion de la imagen que preserva puntos, lineas y planos de la imagen def motion_kernel(angle, d, sz=65): kern = np.ones((1, d), np.float32) c, s = np.cos(angle), np.sin(angle) A = np.float32([[c, -s, 0], [s, c, 0]]) sz2 = sz // 2 A[:,2] = (sz2, sz2) - np.dot(A[:,:2], ((d-1)*0.5, 0)) kern = cv2.warpAffine(kern, A, (sz, sz), flags=cv2.INTER_CUBIC) return kern SLIDE 1 ACELERANDO LUEGO DE UNOS PASOS ADICIONALES (OMITIDOS)…APLICAMOS UNA TRANSFORMACIÓN DE WEINER… RESULTADO PYTHON+OPENCV…. EJEMPLO II …DETECTAR PATOLOGÍAS EN IMÁGENES MEDICAS The Complex Made Easy SCREENING DE MAMOGRAFIAS …CDR RESEARCH The Complex Made Easy CAD Iniciamos contacto con Radboud University Nijmegen, uno de los centros mas avanzados en CAD CDR existe una de las plataformas mas importantes de imágenes de Latam. CONCLUSIONES The Complex Made Easy ACELERANDO 1. Entender I : Es critico dominar el Data Set de imágenes, sus transformaciones y las técnicas de procesamiento 2. Entender II : Herramientas de procesamiento de imágenes 3. Entender III: sinergias con especialistas del dominio de aplicación Thank You Martin@AnalyticsSolvers.com