Está en la página 1de 46

Introducción al procesado digital 

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

3 f(X,Y)=[1 0.25 0.1]

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

Imágenes médicas  formato “dicom”, etxtensión “.dcm”


Lectura de imágenes en Matlab
• Para imágenes con cualquiera de los formatos comunes
im=imread('E:\CursoMatlab\imagen.xxx');

• 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

im2uint8 uint8 logical, uint8, uint16, int16, single,  double


im2uint16 uint16 logical, uint8, uint16, int16, single,  double
im2double double logical, uint8, uint16, int16, single,  double
im2single single logical, uint8, uint16, int16, single,  double
mat2gray double en el rango [0,  logical, uint8, int8, uint16, int16, uint32, 
1] int32, single,  double
im2bw logical uint8, uint16, int16, single,  double
rgb2gray Escala de grises uint8, uint16, int16,  double
Representación de imágenes
• imshow(im, [lm1 lm2]);

imshow(im) imshow(im,[90 200])

• 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

imagen im2 FFT2(im2)

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

El filtrado es una operación en la vecindad de un 


pixel utilizando un “kernel”
im_f = conv2(im, h, shape) ó im_f=imfilter(im, h)
Filtrado de imágenes
• Se hace con una máscara (kernel) de longitud 
impar (ej 3x3) para que halla un pixel central

• 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

se=strel('rectangngle',[1 2]); se=strel('disk',1);


Operaciones Morfológicas Básicas
• Erosión

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

Normalized RMS (a.u.)


2
3
4 0.5
rows

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.

También podría gustarte