PARTE 1 Introducción al tratamiento de imágenes Disciplina multidisciplinaria Sensores de imágenes Visible, IR cercano (banda 400, 1100 nm) : CCD, CMOS Infrarrojo térmico (banda transmisión atmósfera 1.4 à 2.6 µm (IRI), 35µm (IRII) ; 8-14µm(IRIII)) Rayos X, principio de los sensores (pantalla fluorescente más CCD o CMOS) Imágenes radar hiperfrecuencias (longitudes de onda utilizadas: 1m1mm, 300 Mhz, 300 Ghz) Imágenes ecografía (frecuencia ultrasonidos de 2Mhz à 10 Mhz, λ del orden del mm) Imágenes de cuenta de fotones Tratamiento de imágenes: codificación, compresión, filtración Interpretación de imágenes: segmentación, binarización, extracción de objetos Imágenes calculadas: realidad virtual, infografismo, reconstitución1 de imagen 3D a partir de imagen 2D (Escáner rayos X, CT scan) Aplicaciones muy diversas Algunos ejemplos: - Restauración de imagen: reducción del ruido o de los defectos de la cadena de adquisición - Mejoramiento de imagen para la visualización - Adaptación de imagen para la impresión - Codificación y compresión para el almacenamiento y la transmisión - Identificación de objetivos o extracción de informaciones en una imagen: reconocimiento de la escritura, vigilancia, control de una cadena de producción, análisis de imágenes médicas, análisis de imágenes satélites para la prospección minera, indización de imágenes con arreglo a su contenido, biometría, persecución de objetos en movimiento etc. Tratar un problema de tratamiento de imágenes pide un conocimiento de la cadena que va del sensor y sus defectos, al utilizador final y sus manías. Puede apelar a la electrónica, la óptica, el tratamiento de la señal, el análisis numérico, las estadísticas, la teoría de la información, el arte, la 2 fisiología, la psicofísica, la psicología. 1 Aplicacion 1 : Presentacion de un problema de ayuda al diagnosis Differenciacion entre infeccion fuerte (bacterial) y cronica (tuberculosis) bajo analisis de imagen de una biopsie de los pulmones 3 Preparacion de la imagen Coagulacion del tejido con formol Rigidificacion de la estructura tissular con parafina Corte del tejido en lamas de 5µm de espesor Coloracion rosa con hématéina Ampliacion microscopio x 4 Imagen tamaño 1280x1024 4 2 Infecion bacterial fuerte · Présencia de fibrina (color amarillo) · Hémoragia (mas rosado) · Zonas homogeneas donde las alveolas no son visibles Alveolas sanas muy claras 5 Infecion cronica (tuberculosis) Cellulas gigantes de color mas clara al interior y nucleos interiores Disparicion de las alvéolas sanas Zoom 6 3 Aplicacion 2 : Ubicacion de escaleras en una foto de baja resolucion 7 Representación de las imágenes Imágenes blanco y negro: matriz I de N líneas por M columnas, cada píxel (i, j) tiene su nivel de gris I codificado sobre 8 bits, 0 negro y 255 blanco. El punto (0,0) está arriba a la izquierda de la matriz. j i Matlab : >>I = imread ('C:\ camino…\poumon infecté.jpg') ; % I se transforma en una matriz de dimensión correcta conteniendo las informaciones de % la imagen; si se olvida el « ; » después de imread uno tiene derecho al desfile de los % valores de la matriz! >>whos; % permite tener un conjunto de informaciones sobre la imagen, y saber su dimensión % NxM, uint8 para enteros sin asignatura de 0 à 255 etc. Imagen color RGB: está constituida de 3 planos de colores, un rojo, un verde, un azul (blue), cada plano es una imagen con niveles de gris (píxel codificado entre 0 255). Para pasar de imagen RGB a la imagen negro y blanco : I(i,j) = (R(i,j) +G(i,j)+B(i,j))/3 8 4 Matlab : J = rgb2gray(I) ; %convierte la imagen RGB en %niveles de gris haciendo %(R+G+B)/3 Matlab imagen RGB matriz NxMx3 : capa roja I (x,y,1), capa verde I(x,y,2), capa azul I(x,y,3) RGB Rojo + Verde = Amarillo Rojo + Azul = Magenta Verde + Azul = Cyan Rojo + Verde + Azul = Blanco X, Y y Z siendo numeros entre 0 y 1, Color = (X * Rojo + Y * Verde) + (Z *Azul) Colores son additivas 9 >>a=imread('escalier1.jpg'); >> b=im2uint8(a);figure;imshow(b); (conversion 8 bits) 10 5 Imagen de gris : >> c=rgb2gray(b) ; figure ; imshow(c); 11 Capa roja >> b1 = b(:,:,1) ; imshow(b1); 12 6 Capa verde : >> b2 = b(:,:,2) ; imshow(b1); 13 Capa azul : >> b3 = b(:,:, 3) ; imshow(b3); 14 7 >> I = imread ('escalier1.jpg'); >> imshow (I); >> improfile; 15 >> I=imread('escalier1.jpg'); >> imtool(I); (ventana tool pixel region) 16 8 >> mask = (I(:,:,1)>220)&(I(:,:,2)<90)&(I(:,:,3)<90); >> imshow (mask); 17 18 9 Sistema HSV H: el tinte varía entre 0 y 2π (rojo 0°, amarillo 60° etc.) los colores complementarios son distantes de 180 °) S: saturación comprendida entre 0 y1 V: intensidad luminosa entre 0 y 1 Matlab : I (h,s,v) con 0 < h < 1 en lugar de O° y 360° 0 Rojo,1/6 Amarillo, 2/6 Verde, 3/6 Cyan, 4/6 Bleu, 5/6 Magenta, 1 Rojo 19 Matlab : I (h,s,v) con 0 < h < 1 en lugar de O° y 360° 0 Rojo,1/6 Amarillo, 2/6 Verde, 3/6 Cyan, 4/6 Bleu, 5/6 Magenta, 1 Rojo 20 10 Conversión del sistema RGB al sistema HSV: 3(G − B ) ( R − G ) + ( R − B) S = 1- min (R,B,B)/V ; V = (R+G+B)/3 H = tan Matlab W = rgb2hsv (I) ; %transforma la imagen RGB en la imagen HSV, W( :, :,1) capa %« Hue », W( :, :,2) capa saturación, W( :, :,3) capa valor. Existen otras transformaciones más complicadas Otros espacios de colores: Cielab (bien adaptado a la correspondencia con el sistema visual), CMYK (cian, magenta, yellow, black) utilizado para las impresoras, YCbCr adaptado al vídeo digital etc.21 Capa H >> d=rgb2hsv(I);d1=(:,:,1);figure;imshow(d1); 22 11 Capa S >> d=rgb2hsv(I);d2=(:,:,2);figure;imshow(d2); 23 Capa V >> d=rgb2hsv(I);d3=(:,:,3);figure;imshow(d3); 24 12 Re-elevación de imagen: Esta operación está destinada a mejorar la calidad visual de la imagen sin afectar la información contenida. Herramientas básicas: Histograma: Vector h (i) de dimensión 256, h (i) representa el número de píxeles de nivel de gris i Mathlab hist (J(:),[0:255]) 25 >> J=imread('pulmon_1.jpg'); 26 13 RGB >> J1=J(:,:,1); imhist(J1); figure; imshow(J1); %anotar los valores %elevados des histogramma %por no hacer le conversion %to unint8 de la imagen 27 RGB >> J2=J(:,:,2); imhist(J2); figure; imshow(J2); 28 14 29 Aumento de la dinámica: Sea min (i) el mínimo nivel de gris y max (i) el máximo, la nueva imagen I’ (x, y) = 255 * (I (x, y) – min (i)) / (max (i)-min (i)) Un píxel con un nivel de gris min pasará a 0 y un pixel con un nivel de gris max pasará también a 255 Corrección de exposición : Esto permite ajustar el aspecto visual basándose en la curva de percepción de los contrastes Ecualización del histograma: El objetivo es de tener un histograma el mas plano posible, para que cada nivel de gris sea representado del mismo modo. 30 15 31 Otras funciones de Matlab disponibles para ajuster el histogramma 32 16 Convolución : Objeto o dimensión (M,N) * núcleo h dimensión (J,K) J K I (m, n) = ∑∑ h( j, k ).o(m + ( J − 1) − j, n + ( K − 1) − k ) j =1 k =1 Dimensión valida de la imagen de salida : [M-(J-2),N-(K-2)] o= Píxel (2,4) de la imagen 33 Correlación : Objeto o dimensión (M,N) © núcleo h dimensión (J,K) Sea I(m,n) un píxel de la imagen (línea m, columna n) resultando de la correlación J K I (m, n) = ∑∑ h( j, k ).o(m − ( J − 1) + j, n − ( K − 1) + k ) j =1 k =1 Dimensión valida de la imagen de salida : [M-(J-2),N-(K-2)] o= 34 17 Filtrado con un núcleo Matlab : función imfilter: I = imfilter (o, h, opciones) Matlab hace por defecto un producto de correlación, excepto si se escribe ‘conv’ en las opciones, las opciones precisan la forma de tratar los bordes de la imagen 35 Suavizado por promedio núcleo Es importante normalizar el núcleo, si no la imagen quedará blanca 36 18 Suavizado Gaussiano Núcleo para σ =1 Idealmente el tamaño de la matriz debe ser 6 veces el valor de σ37 Mejora del contraste Núcleos Núcleo « sharpen » de ImageJ 38 19 Detector de bordes / contornos de Robert Cross Imagen inicial : I(x,y) Núcleos : Gx, Gy Imagen de bordes : O(x,y) = |I(x,y)*Gx| +| I(x,y)*Gy| 39 Detector de contornos de Sobel Imagen inicial : I(x,y) Núcleos : Gx, Gy Imagen de bordes : O(x,y) = |I(x,y)*Gx| +| I(x,y)*Gy| 40 20 Laplaciano Para reducir la sensibilidad al ruido colocamos un filtro suavizador antes de aplicar el Laplaciano Núcleo para sigma = 1,4 41 Transformada de Fourier discreta Transformada de Fourier inversa 42 21 Ejemplos de filtraje con FFT (Image J) TF TF-1 TF La zona negra corta las frecuencias, la zona blanca deja pasar las frecuencias TF-1 43 22 PARTE 2 Filtrado no lineal Los filtros lineales de detección de bordes alargan las transiciones y son un compromiso entre filtraje / degradación de la imagen. El filtrado no lineal permite manejar ciertos problemas: El ruido impulsivo: los filtros lineales eliminan mal los valores altos / aberrantes. La integridad de las fronteras: se desea eliminar el ruido sin hacer tenues las fronteras de los objetos. Filtro mediana: sea una vecindad de n x n puntos alrededor de un pixel El filtro mediana da al pixel un valor de nivel de gris tal que separa a la población en dos partes iguales. Así, se evita los niveles de gris suplementarios (efecto pimienta-sal), introducidos por un filtro media o promedio aritmético. Valor mediana : 10 1 Filtro de Nagao Ventana de 5x5 centrada sobre un pixel dividida en 9 zonas, se calcula para cada zona la media y la variancia, se asigna al pixel central el valor de la media de la zona que tiene la variancia mas baja. Observac: Utilizar max (gris) - min (gris) en lugar de variancia para reducir los cálculos 2 Efecto de los diferentes filtrajes: Nagao conserva mejor los detalles y las transiciones eliminando el ruido impulsivo. El filtro de Nagao suprime el ruido sin alterar las transiciones. Se presta bien para la detección de bordes: filtraje de Nagao más derivada simple: 3 Técnicas de binarización de imagen • Elección del nivel de binarización sobre el histograma global: 1. Tomar un valle del histograma como la frontera 2. Considerar una joroba entre dos valles para los puntos 1 (por ejemplo) • Umbrales locales: definir una vecindad para cada pixel, sobre esta vecindad: 1. Determinar la media del nivel de gris (por ejemplo) y servirse de esto como umbral 2. Tomar el valor mediana como umbral 3. Tomar (Imax +Imin)/2 como umbral, etc. 4 Algoritmo basico de binarizacion imagen de gris A=imread (‘xxxxxxx.jpg’) [Y,X]=size(A); B=zeros(Y,X); for m=1:1:Y for n=1:1:X if (A(m,n)>=47) % 47 es el umbral B(m,n)=0; else B(m,n)=255; end; end; end; Imfill, imclose, imdilate, imerode, imopen, strel. 5 Binarización por criterio estructural: umbral sobre cada nivel de gris y retenemos al que da la figura más compacta. La compacidad está dada por C=4 π superficie / (perímetro 2), es independiente de la rotación, del traslado y del cambio de escala. C=1 para el disco, 0,78 para el cuadrado. Forma compacta Pixeles aislados Falsas alarmas Huecos Círculo de N pixeles N pixeles aislados Círculo de radio R y N falsas alarmas Circulo de radio R y N huecos V. 6 Imágenes binarias Noción de elemento estructurante ( no confundir con una matriz o un núcleo de convolución o correlación ) * Representa 0 ó 1 (es decir indiferente) Origen del elemento estructurante El origen del elemento estructurante es transladado sobre cada punto de la imagen binaria. Cada punto del elemento estructurante es comparado con el de la imagen inicial de fondo. Los detalles de la comparación y el resultado sobre la imagen final dependen de la operación morfológica efectuada. 7 Caso de erosión de pixeles blancos elemento estructurante >> Erosión: Se coloca el origen del elemento que estructura sobre los pixeles a 1 de la imagen. Si todos los pixeles de la imagen inicial bajo el elemento estructurante pertenecen a 1, entonces se deja el pixel de la imagen situado bajo el origen a 1. Si al menos uno de los pixeles bajo el elemento estructurante pertenece a 0, entonces el pixel bajo el origen es puesto a 0. origen 8 Detección de esquinas: las casillas en blanco significan "indiferente" (0 ó 1) Operador 0° Operador 90° Operador 180° Operador 370° Se aplica el operador 0° sobre cada pixel a 1, si la coincidencia es perfecta con la imagen inicial el pixel es guardado como 1, si nó es puesto a 0. También se aplica a la imagen inicial con el operador 90°, luego el 180°, luego el 370° y hacemos uno « o » entre las 4 imágenes. 9 Propuesta de una máscara de erosión de rasgos horizontales Contorno de una imagen binaria: imagen menos imagen erosionada (no es el mejor método) Erosión en nivel de gris: Se realiza con el filtro mínimo que reemplaza un pixel por el pixel mínimo de la vecindad. Dilatación también se puede hacer con el filtro máximo Dilatación: el mismo elemento estructurante se aplica sobre los pixeles negros, si por lo menos un pixel del elemento encuentra un pixel blanco de la imagen entonces el pixel origen es puesto a 1. 10 Erosión + dilatación: redondea la imagen y quita los pixeles aislados (abertura). Operación idempotente: si se la repite el resultado es el mismo (abertura para el blanco significa cierre para el negro) Dilatación + erosión: redondea la imagen y rellena los pixeles aislados (cierre) 11 Otros ejemplos de transformaciones: Para eliminar los huecos se pone a 1 el pixel central en las configuraciones siguientes: las tres últimas máscaras se reducen al primero por rotaciones de 90 ° El alisado de los puntos salientes se hace poniendo a 0 el punto central en las configuraciones siguientes: 12 >> help imclose IMCLOSE Close image. IM2 = IMCLOSE(IM,SE) performs morphological closing on the grayscale or binary image IM with the structuring element SE. SE must be a single structuring element object, as opposed to an array of objects. IMCLOSE(IM,NHOOD) performs closing with the structuring element STREL(NHOOD), where NHOOD is an array of 0s and 1s that specifies the structuring element neighborhood. >> help imopen; IMOPEN Open image. IM2 = IMOPEN(IM,SE) performs morphological opening on the grayscale or binary image IM with the structuring element SE. SE must be a single structuring element object, as opposed to an array of objects. IM2 = IMOPEN(IM,NHOOD) performs opening with the structuring element STREL(NHOOD), where NHOOD is an array of 0s and 1s that specifies the 13 structuring element neighborhood. >> help bwareaopen; BWAREAOPEN Binary area open; remove small objects. BW2 = BWAREAOPEN(BW,P) removes from a binary image all connected components (objects) that have fewer than P pixels, producing another binary image BW2. The default connectivity is 8 for two dimensions IM2 = IMDILATE(IM,SE) dilates the grayscale, binary, or packed binary image IM, returning the dilated image, IM2. SE is a structuring element object, or array of structuring element objects, returned by the STREL function. If IM is logical (binary), then the structuring element must be flat and IMDILATE performs binary dilation. BW2 = IMFILL(BW1,'holes') fills holes in the input image. A hole is a set of background pixels that cannot be reached by filling in the 14 background from the edge of the image. Esqueletización por adelgazamientos sucesivos Operador 1, 0° Operador 2, 0° Aplicamos el operador 1,0° a la imagen, luego a la imagen transformada el operador 2,0°, luego 1,90°, luego 2,90°, luego los a 180°, luego los a 270° y empezamos de nuevo con los 1,0° etc. hasta la convergencia del proceso. 15 Segmentación Segmentar = dividir la imagen en zonas homogéneas según un criterio determinado: color, textura, nivel de gris, … 1) Segmentación basada en los pixeles: aproximación global (a partir de un histograma) Ejemplo: Aislar las naranjas, las uvas, las grosellas por histograma (Utilizar Image J ó Matlab) 16 Tinte de imagen (hue) 17 Posibilidad de umbrales a dos o tres dimensiones en el espacio RGB o HSV Caso evidente Método muy rápido, poco sensible al ruido funciona sólo en los casos evidentes No funciona para objetos de tintes parecidos Ignora las informaciones de proximidad 18 Imagenes en niveles de gris: ¿qué criterios? Métodos locales de segmentación: - usando regiones, extendemos una región de vecino en vecino mediante ciertas propiedades - usando los bordes, ponemos en evidencia los contrastes para obtener los contornos de objetos. 19 20 Problemas de la técnica de crecimiento de región (region growing) Nos vamos de un punto semilla (seed) y lo extendemos añadiendo los puntos vecinos que satisfacen el criterio de homogeneidad El punto semilla (de partida) puede ser escogido manualmente, ó de manera automática evitando las zonas de contraste fuerte (gradiente es importante) Las regiones obtenidas dependerán fuertemente de los pixeles de partida y del orden en el cual los pixeles de la frontera son examinados. Casi siempre habrá un camino que relaciona un punto con otro de la 21 imagen bajo criterios de continuidad, sin una visión global. Si la diferencia de los niveles de gris es inferior o igual a dos se extiende la región, se reunen los pixeles y se hace la media, luego se explora el pixel siguiente. A la derecha se explora en la dirección bca, a la izquierda en la dirección bac. Se ve que el orden influye en el resultado final: dos regiones a la derecha, una a la izquierda. 22 Implantación del algoritmo Se empieza atribuyendo el índice 1 al punto semilla. Si un punto vecino explorado tiene las mismas propiedades (con el factor de tolerancia) tendrá el mismo índice, si no se le atribuye un índice diferente. Problema: Si después de haber cambiado de índice se vuelve a las mismas propiedades, se podrá tener 2 índices diferentes para las mismas propiedades. Si las zonas nunca tienen intersección no habrá ningun problema. Si en el curso del trayecto se cae sobre un punto que tiene dos vecindades de diferentes índices correspondientes a las mismas propiedades, se establece que los índices son equivalentes, lo que permitirá juntar las zonas adyacentes teniendo las mismas propiedades 23 División y fusión: split and merge homogeneidad = criterio sobre variancia 24 Conecta las regiones adyacentes para = medidas de diferencia de homogeneidad Ventajas: Método a la vez global y local. Permite evitar relacionar fuertemente las zonas que entre ellas haya un camino con gradiente débil pero con propiedades marcadamente diferentes. 25 Inconvenientes: complejidad y la división da un aspecto cuadriculado