Documentos de Académico
Documentos de Profesional
Documentos de Cultura
de Imágenes (con Matlab)
Mónica Rojas Martínez
Programa
• Introducción
– Lectura de archivos de formato imagen
– Representación
– Conversión entre clases
• Medidas Estadísticas
• Filtros y transformaciones morfológicas
• Segmentación
Introducción
100
200
300
y-axis
400
f(x,y)=[198 239 207]RGB
500
600
700
100 200 300 400 500 600 700 800 900 1000
x-axis
𝑝í𝑥𝑒𝑙 𝑓 𝑥, 𝑦 𝑖𝑛𝑡𝑒𝑛𝑠𝑖𝑑𝑎𝑑 𝑑𝑒 𝑙𝑎 𝑖𝑚𝑎𝑔𝑒𝑛 𝑒𝑛 𝑢𝑛 𝑝𝑢𝑛𝑡𝑜 𝑒𝑛 𝑒𝑙 𝑒𝑠𝑝𝑎𝑐𝑖𝑜
Imagen digital: Muestreo en las dimensiones espaciales
Cuantización de los niveles de intensidad (en bits)
Tipos de imágenes
• Binarias 0 1 1 1 0 0 0 0 0 0
1
2
1 1 1 1 1 0 0 0 0 0 3
1 1 1 1 1 0 0 0 0 0 4
1 1 1 1 1 0 0 0 0 0
5
0 1 1 1 0 0 0 1 0 0
0 0 0 0 0 0 1 1 1 0 6
0 0 0 0 0 0 0 1 0 0 7
0 0 0 0 0 0 0 0 0 0 8
1 1 1 1 1 0 0 0 0 0
9
1 1 1 1 1 0 0 0 0 0
10
• Escala de grises
2 4 6 8 10
y-axis
3 X=3, Y=3
f(X,Y)=0.55
• Color (RGB o indexadas) 1 2 3
x-axis
4 5
X=3, Y=3
y-axis
1 2 3 4 5
x-axis
Imágenes médicas comunes
ELA
• Radiología:
Rayos X, MRI, PET, etc
Cáncer
• Microscopia Malaria
• Mapas de señales multicanal: MEG, ECG, HD‐EMG
Distribución de UM
Formatos comunes de imágenes digitales
Nombre del Descripción Extensión
Fomato
BMP† Windows Bitmap .bmp
CUR Windows Cursor Resources .cur
FITS† Flexible Image Transport .fts, .fits
System
GIF Graphics Interchange Format .gif
HDF Hierarchical Data Format .hdf
ICO† Windows Icon Resources .ico
JPEG Joint Photographic Experts .jpg, .jpeg
Group
JPEG 2000† Joint Photographic Experts .jp2, .jpf, .jpx, j2c, j2k
Group
PBM Portable Bitmap .pbm
PGM Portable Graymap .pgm
PNG Portable Network Graphics .png
PNM Portable Any Map .pnm
RAS Sun Raster .ras
TIFF Tagged Image File Format .tif, .tiff
XWD X Window Dump .xwd
• Para Formato DICOM
im=dicomread('E:\CursoMatlab\imagen.dcm');
ó utilizando el comando
im=dicomread(info,'frame',1);
Donde info es una estructura leída como:
info=dicominfo('E:\CursoMatlab\imagen.dcm');
info es una estructura con múltiple información concerniente
al formato dicom
Conversión
• RGB o indexadas a escala de grises procesado común
• Imágenes almacenadas en formatos comunes
profundidad de 8 o 16 bits.
• Algunas funciones de Matlab soportan las clases uint8
o uint16 pero la mayoría están definidas para variables
de tipo double
Nombre Convierte la entrada a: Clases de Imagen de entrada válidas
• imagesc(im) (opcional) 250
100
200
200
300
150
400
100
500
600
50
700
100 200 300 400 500 600 700 800 900 1000
Medidas Estadísticas
Operación Comando
Valor Medio mean2 (im)
Mediana median (im (:) )
Desviación estándar std2 (im)
Varianza power(std2(im), 2)
Mínimo min (im(:)))
Máximo max (im(:))
A excepción de las funciones mean2 y std2, todas las demás operan a lo largo de las
dimensiones de la matriz. Por ejemplo
>> max(A)
ans =
4 6 8
A =[ 1 0 7 >> min(A,[],2)
4 6 3 ans =
‐1 2 8]; 0
3
‐1
>> max(A(:))
ans =
8
Operaciones Matemáticas
• Sobre imágenes de clase uint8, uint16
im_d = imabssdiff(im1, im2); % Resta im1 de im2 y devuelve la
% diferencia absoluta
im_comp = imcomplement (im1); % Complemento de la imagen im1
im_s = imadd(im1, im2); % Suma de im1 y im2
im_r = imsubstract(im1, im2); % Resta im1 de im2
im_div= imdivide (im1, im2); % Divide la imagen im1 por im2
im_m = immultiply (im1, im2); % Multiplica im1 y im2
• Para realizar cualquier otro tipo de operación,
se debe convertir la imagen a tipo ‘double’.
Ejemplo 1
El histograma permite
imcomplement tener una “distribución”
de la intensidad de la
imagen
im1 x 1.4
>> figure, imhist(im);
umbralizada >>[pix, bin]=imhist(im);
5 niveles
Transformada de Fourier en 2D
imagen im1 FFT2(im1)
2 15
4 10
5
6
0
8 100
100
50 50
5 10 15 Frec. Vertical 0 0 Frecuencia horizontal
2 30
4 20
10
6
0
8 100
100
50 50
5 10 15 Frec. Vertical 0 0 Frecuencia horizontal
Filtrado de Imágenes
Origen x hf=
a b c r s t
d
g
e
h
f
i
* u
x
v
y
w
z
Píxeles de la Kernel o filtro
Vecindario de
e Imagen
3x3 Filtro 3x3 original
efiltrado= v*e +
r*a + s*b + t*c +
u*d + w*f +
y Imagen im (x, y) x*g + y*h + z*i
• Filtro pasa‐bajas ,
• Filtro pasa‐altas ,
Tipos de filtro
• Suavizado (pasa‐bajas)
– Promedio, h = fspecial('average', sz);
– Disco, h = fspecial('disk', sz);
– Gausiano, h = fspecial('gaussian', sz, std);
• Realce de bordes (pasa‐ altas)
– Laplaciano, h = fspecial(‘laplacian', alfa);
– Laplaciano del gausiano,h = fspecial('log', sz, std);
– Contraste (realce de bordes)
*Unsharp, h = fspecial('unsharp', sz);(realza los bordes
a partir de una versión suavizada de la imagen)
J= I- Iunsharp
Ojo! Tener cuidado en presencia de ruido
• Detección de bordes (horizontales)
h = fspecial(op); op='sobel' ó 'prewitt'
Filtar: imfilter(im,h)
Ejemplo 2
• Contrastar la imagen de rayos x
Ejercicio 1
• Detectar los bordes de la imagen ‘blood.jpg
– Convertir la imagen a escala de grises
– Realzar las discontinuidaes con un filtro unsharp
– Realizar el filtrado con un filtro sobel
– Obtener los bordes a partir de una imagen binaria
Transformaciones Morfológicas
• Es una técnica de procesado no lineal, basada
en la geometría de los objetos que componen
la imagen
• Se definen mediante operaciones con un
elemento estructurante que es una especie de
“objetivo”, es decir, dichas transformaciones
preservan elementos de la imagen similares al
elemento estructurante
• Definidas para imágenes binarias
Operaciones Morfológicas
Sobre una imagen binaria
1
2 4 6 8 10 12 14 16 18
Elemento estructurante
1 1
2 2
3 3
1 2 3 4 1 2 3
im2=imerode(im,se1);
1
3
1
4
2
5
3
1
6
1 2 3 4
se1
2
7
3
8
4
9
5
2 4 6 8 10 12 14 16 18
6
7
1
8
2
9
3
2 4 6 8 10 12 14 16 18
1
4
2
5
3
6
1 2 3
se2 7
2 4 6 8 10 12 14 16 18
im2=imerode(im,se2);
Operaciones Morfológicas Básicas
• Dilatación
im2=imdilate(im,se1);
1
3
1
4
2
5
3
1 6
1 2 3 4
se1
2 7
3 8
4 9
5 2 4 6 8 10 12 14 16 18
1
8
2
9
2 4 6 8 10 12 14 16 18
1 3
2 4
3 5
1 2 3 6
se2 7
2 4 6 8 10 12 14 16 18
im2=imdilate(im,se2);
Operaciones Morfológicas
• Apertura ‐> Aplicar una erosión seguida de
una diltación
• Cierre ‐> Aplicar una diltación seguida de una
erosión im2=imopen(im,se2);
1
3
1
4
2
5
3
6
1 1 2 3
7
se2
2
8
3
9
4
2 4 6 8 10 12 14 16 18
6
1
7
2
8
3
9
2 4 6 8 10 12 14 16 18
1 4
2 5
6
3
7
1 2 3
se2 8
2 4 6 8 10 12 14 16 18
im2=imclose(im,se2);
Operaciones Morfológicas en escala de
grises
• Erosión
, ∈
• Dilatación
, ∈
Los elementos estructurantes s pueden ser no planos, i.e.,
cada pixel puede tener un valor entre 0 y 1
Operaciones Morfológicas en escala de
grises
• Dilatación y Apertura
tienden a “aumentar” los límites de las
regiones “brillantes”
• Erosión y Cierre
tienden a “aumentar” los límites de las
regiones “oscuras”
• Estas operaciones son muy útiles para filtrar
regiones no deseadas en la imagen
Ejemplo 3
• Realizar un filtrado mediante operaciones
morfológicas para eliminar ruido en las
imágenes ‘lenna.jpg’ y ‘cell2.jpg’ en el
directorio de trabajo
Ejercicio 3.4
Suavizar los bordes dentro de los granos de café en
la imagen 'cafe.jpg' mediante el uso de filtros. Qué
filtro es mas conveniente? Podrían los operadores
morfológicos eliminar las discontinuidades?
Segmentación de imágenes
• Identificar y aislar objetos en la imagen
• Métodos
– Por píxeles
– Por regiones
• Segmentación morfológica
• Watershed
Segmentación por píxeles
• Binarización: Establecer un umbral sobre la imagen
para dividirla en regiones oscuras y regiones claras.
Pasos:
– Realizar un filtrado para disminuir ruido en la
segmentación
– Crear el histograma de la imagen
– Establecer uno o varios umbrales
– Extraer los objetos a partir de la imagen binarizada
imagen original Histograma de la imagen de la figura 4.3(izquierda)
4
x 10
2
# de pixeles
1.5
0.5
0
Intensidad
0 0.2 0.4 0.6 0.8 1
Ejercicio 3
• Segmentar la imagen para obtener las manos
y los huesos a partir de diferentes umbrales
Segmentación por regiones‐
Operadores Morfológicos
• Identificación de objetos en la imagen
mediante el uso de un elemento estructurante
con forma similar. Pasos
• Filtrar ruido en la señal
– Binarizar la imagen
– Aplicar sucesivas erosiones, dilataciones y cierres
Operaciones Morfológicas
• Buscar un elementos estructurante similar a la
forma que queremos extraer
1
3
1
4
2
5
3
6
1 1 2 3
7
se2
2
8
3
9
4
2 4 6 8 10 12 14 16 18
6
1
7
2
8
3
9
2 4 6 8 10 12 14 16 18
1 4
2 5
6
3
7
1 2 3
se2 8
2 4 6 8 10 12 14 16 18
Concepto de Conectividad
• Cual es la relación de un pixel x con los elementos que
lo rodean? Quienes son sus vecinos?
0 0 1 1
0 1 1 0
0 1 1 1
– 4‐connectivity: los píxeles con quienes comparte un borde
– 8‐connectivity: los píxeles con quienes comparte un borde
o un vértice
Comandos auxiliares en Matlab para la
segmentación
imagen original imerode(im,strel(disk',10))
• Conviene deshacerse de los huecos:
imfill(im, conn, ‘holes’). Imholes usa apertura y
cierres. imfill(im,8,'holes')
Comandos auxiliares en Matlab para la
segmentación
• Cómo le digo al software que hay diferentes
zonas en la imagen? ‐> debo poner etiquetas a
los elementos
bwlabel(imagen_binaria)
Ejemplo 3
• Detectar automáticamente los botones de la
imagen “botones_aguja1.jpg” del directorio de
trabajo, mediante operaciones morfológicas y
aislarla de la imagen. Posteriormente, detectar
la aguja. Finalmente reproducir una imagen
donde solo aparezcan la zona de los botones y
la aguja.
Ejercicio 4
a. Segmentar los botones de la imagen
‘botones_aguja2.jpg’ almacenada en el directorio de
trabajo basándose en el ejemplo anterior y ajustando
los elementos estructurantes como corresponda. De
ser necesario, utilizar imfill para rellenar huecos en la
imagen binaria
b. Segmentar los botones grandes de la imagen
'botones2.png', cuyo diámetro sea mayor a d= 45
píxeles. Posteriormente segmentar y conservar solo
los objetos pequeños cuyo díametro sea menor a
d=20 píxeles. Cual sería un paso intermedio para
conservar los objetos pequeños? Recordar que las
imágenes se pueden restar.
Ejercicio 4c
• Ubicar automáticamente las lesiones
principales sobre la imagen
'Esclerosis_Multiple.jpg' mediante
transformaciones morfológicas. Añadir los
marcadores sobre la imagen original
Ayuda: puede utilizar varias técnicas para pre‐
procesar la imagen de manera que sea mas fácil
realizar la segmentación
Ejemplo 4
• Contar automáticamente el número de células
de la imagen ‘blood2.jpg’ almacenada en el
directorio de trabajo
Ejercicio 5
• Realizar una segmentación para obtener el número
exacto de células en la imagen ‘blood4.png’ en el
directorio de trabajo. Qué atributos de la imagen
son los mas adecuados para realizar un conteo
exacto?. Adicionalmente, estimar el tamaño de las
células y eliminar de la segmentación aquellas que
no son glóbulos rojos.
Watershed
• El principio básico es considerar la imagen como
un mapa topográfico con diferentes elevaciones y
valles. Es un algoritmo basado en el gradiente
Original Map Topographical View
1
1
5
6
0
7 8
8 6
4 15
5 10 15 10
2 5
columns rows columns
H-dome Segmentation Watershed Segmentation
1 1
2 2
3 3
4 4
rows
rows
5 5
6 6
7 7
8 8
5 10 15 5 10 15
columns columns
L = watershed(im, connectivity)
Comparado con segmentación
morfológica
• Ventaja: segmentar objetos que se encuentran
superpuestos.
• Desventaja: cualquier discontinuidad sobre la
imagen puede causar una segmentación
exagerada.
imagen binarizada imagen segmentada
Transformación de distancia
• Consiste en calcular la distancia de cada píxel
en la imagen al píxel mas cercano con
intensidad ‘0’ (i.e. el fondo). El valor de la
distancia, es asignado al píxel evaluado.
En Matlab:
im_dist = bwdist(imagen_bin, ‘medida’)
Medidas de distancia
Distancia Descripción
‘chess‐board’ si (x1, y1) y (x2, y2) son dos puntos en la imagen,
bajo esta medida la distancia se obtiene como D=
max(|x1‐x2|,|y1‐y2|)
‘cityblock’ D=|x1‐x2|+|y1‐y2|
‘euclidean’ La distacia euclidea
‘quasi‐euclidean’ D=|x1‐x2|+( 2 1)|y1‐y2|, si |x1‐x2|>|y1‐y2|
2 1)|x1‐x2|+|y1‐y2|, si lo contrario
Depende de la forma que tienen los objetos en la
imagen. Por ejemplo
círculos euclidea
objetos ovalados ‘quasi‐euclidea’ o ‘chess‐board’
Recordar que watershed es una transformación
basada en el gradiente
Preprocesado
• Filtrar ruido de alta intensidad y
posteriormente realzar bordes
• Hacer una primera segmentación por
umbrales
• Aplicar operadores morfológicos para
“ensanchar” los objetos en la imagen
• Aplicar transformaciones de distancia
Ejemplo 5
• Obtener el número exacto de glóbulos rojos
utilizando el algoritmo watershed. Realizar un
procesado previo para lograr este objetivo.