Sei sulla pagina 1di 286

See discussions, stats, and author profiles for this publication at: https://www.researchgate.

net/publication/229828279

Procesamiento Digital de Imágenes. Fundamentos y Practicas con Matlab


(Digital image processing. Fundamentals and practices with Matlab)

Book · January 2003

CITATION READS

1 2,081

4 authors, including:

Enrique Alegre Lidia Sánchez


Universidad de León Universidad de León
151 PUBLICATIONS   529 CITATIONS    61 PUBLICATIONS   156 CITATIONS   

SEE PROFILE SEE PROFILE

Ramón Ángel Fernandez-Diaz


Universidad de León
33 PUBLICATIONS   38 CITATIONS   

SEE PROFILE

Some of the authors of this publication are also working on these related projects:

Automatic Classification of Histological Images and Histological Knowledge Modelling of the Human Cardiovascular System View
project

ACTRES View project

All content following this page was uploaded by Enrique Alegre on 28 May 2014.

The user has requested enhancement of the downloaded file.


PROCESAMIENTO DIGITAL
DE IMAGEN:
FUNDAMENTOS Y PRÁ CTICAS
CON MATLAB
PROCESAMIENTO DIGITAL
DE IMAGEN:
FUNDAMENTOS Y PRÁ CTICAS
CON MATLAB
Enrique Alegre Gutiérrez
Lidia Sánchez González
Ramón Á ngel Fernández Díaz
Juan Carlos Mostaza Antolín

UNIVERSIDAD DE LEÓN
Secretariado de Publicaciones
y Medios Audiovisuales
2003
PROCESAMIENTO digital de imagen: fundamentos y prácticas con
MATLAB / Enrique Alegre Gutiérrez... [et al.]. – León: Universidad,
Secretariado de Publicaciones y Medios Audiovisuales, 2003
285 p. : il. ; 24 cm.
Bibliogr.
ISBN 84-9773-052-6
1. Imágenes, Tratamiento de las–Programas y sistemas de
programación. 2. MATLAB (Programa de ordenador). I. Alegre Gutiérrez,
Enrique. II. Universidad de León. Secretariado de Publicaciones y Medios
Audiovisuales
681.31.01:681.31.066MATLAB

Queda prohibida cualquier forma de reproducción y transformación de


esta obra sin la autorización de los titulares de la propiedad intelectual,
lo cual puede ser constitutivo de delito (art. 270 y ss. del Código Penal).

© UNIVERSIDAD DE LEÓN
Secretariado de Publicaciones y Medios Audiovisuales
Los Autores

ISBN: 84-9773-052-6

Impresión: Servicio de Imprenta. Universidad de León


Campus de Vegazana.
24071 LEÓN
Í NDICE
I. CONCEPTOS ............................................................................................................................................................ 13
Tema 1. Introducción ............................................................................................................................................. 15
1. Necesidad del procesamiento de imágenes ......................................................................................... 15
2. Evolución ...................................................................................................................................................................... 15
2.1. Etapas .......................................................................................................................................................... 15
2.2. Dificultades............................................................................................................................................. 15
2.3. Aplicaciones........................................................................................................................................... 16
3. La luz ................................................................................................................................................................................ 16
3.1. Naturaleza ................................................................................................................................................ 16
3.2. Espectro ..................................................................................................................................................... 16
3.3. Ondas armónicas ................................................................................................................................ 17
4. El ojo ................................................................................................................................................................................. 17
4.1. Sensores..................................................................................................................................................... 17
4.2. Tipos de imágenes ............................................................................................................................. 17
5. Respuesta del sistema visual .......................................................................................................................... 18
5.1. Gráfica ........................................................................................................................................................ 18
5.2. Contraste ................................................................................................................................................... 18
5.3. Ilusiones .................................................................................................................................................... 18
Tema 2. Color ................................................................................................................................................................... 21
1. Modelo sencillo de imágenes......................................................................................................................... 21
1.1. Imágenes ópticas ................................................................................................................................ 21
1.2. Imágenes digitales ............................................................................................................................. 21
1.3. Nivel de gris ........................................................................................................................................... 21
2. Causas del empleo del color ........................................................................................................................... 22
3. Fundamentos del color ........................................................................................................................................ 22
3.1. Identificación y caracterización de la luz ........................................................................ 22
3.2. Generación .............................................................................................................................................. 22
3.3. Caracterización .................................................................................................................................... 23
4. Colorimetría ................................................................................................................................................................ 24
5. Modelos de color ..................................................................................................................................................... 24
5.1. Generalidades........................................................................................................................................ 24
5.2. Modelos ..................................................................................................................................................... 24
6. Gamas............................................................................................................................................................................... 27
7. Modos............................................................................................................................................................................... 27
8 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

8. Formatos gráficos ................................................................................................................................................... 29


9. Imágenes con más de 8 bits por canal..................................................................................................... 30
9.1. CINEON ................................................................................................................................................... 31
9.2. RLA / RPF............................................................................................................................................... 31
Tema 3. Histograma e Interpolación ................................................................................................. 33
1. Histograma ................................................................................................................................................................... 33
1.1. Definición ................................................................................................................................................ 33
1.2. Utilidad ...................................................................................................................................................... 33
1.3. Por tipo de imagen ............................................................................................................................ 34
2. Ajustes a partir del histograma ..................................................................................................................... 34
2.1. Básicos ....................................................................................................................................................... 34
2.2. Curvas de control ............................................................................................................................... 35
2.3. Tablas LUT ............................................................................................................................................. 35
3. Interpolación ............................................................................................................................................................... 36
3.1. Definición ................................................................................................................................................ 36
3.2. Tipos ............................................................................................................................................................ 36
Tema 4. Resolución ................................................................................................................................................... 39
1. Elementos de un sistema de procesamiento digital de imágenes....................................... 39
1.1. Captura analógica .............................................................................................................................. 39
1.2. Captura digital ...................................................................................................................................... 40
1.3. CCD .............................................................................................................................................................. 40
1.4. Restauración y mejora.................................................................................................................... 41
2. Digitalización ............................................................................................................................................................. 41
2.1. Definición ................................................................................................................................................ 41
2.2. Objetivo ..................................................................................................................................................... 41
2.3. Tipos de resoluciones de un sensor...................................................................................... 41
2.4. Dimensiones........................................................................................................................................... 43
3. Imágenes versus Gráficos ................................................................................................................................. 43
3.1. Características de las imágenes............................................................................................... 43
3.2. Características de los gráficos.................................................................................................. 43
4. Gráficos........................................................................................................................................................................... 44
4.1. Primitivas ................................................................................................................................................. 44
5. Resolución de imagen.......................................................................................................................................... 47
5.1. Definición ................................................................................................................................................ 47
5.2. Observaciones ...................................................................................................................................... 47
5.3. Canal alfa ................................................................................................................................................. 47
6. Resolución del monitor ...................................................................................................................................... 48
6.1. Definición ................................................................................................................................................ 48
6.2. Traslación de imagen a monitor ............................................................................................. 48
6.3. Tamaño de punto ................................................................................................................................ 48
6.4. Ejemplos ................................................................................................................................................... 49
7. Cuantificación del color ..................................................................................................................................... 49
7.1. Aplicación................................................................................................................................................ 49
7.2. Decisiones................................................................................................................................................ 49
7.3. Técnicas..................................................................................................................................................... 49
8. Dithering ........................................................................................................................................................................ 49
8.1. Definiciones ........................................................................................................................................... 49
8.2. Aplicaciones........................................................................................................................................... 49
9. Resolución de impresora ................................................................................................................................... 50
9.1. Definiciones ........................................................................................................................................... 50
Í NDICE 9

9.2. Resoluciones .......................................................................................................................................... 50


9.3. Calidad de impresión ...................................................................................................................... 50
10.Resolución de cámaras digitales ................................................................................................................ 51
10.1. Fundamento ............................................................................................................................................ 51
10.2. Tipos de sensores de imagen .................................................................................................... 51
10.3. Resolución del sensor de imagen .......................................................................................... 51
Tema 5. Dominio de la Frecuencia ....................................................................................................... 53
1. Ondas periódicas...................................................................................................................................................... 53
1.1. Función periódica .............................................................................................................................. 53
1.2. Forma de onda ...................................................................................................................................... 53
1.3. Características ...................................................................................................................................... 54
1.4. Frecuencias ............................................................................................................................................. 54
2. Ondas armónicas...................................................................................................................................................... 54
2.1. Descomposición de una onda periódica ........................................................................... 54
2.2. Diente de sierra .................................................................................................................................... 54
2.3. Relación armónica............................................................................................................................. 54
2.4. Onda cuadrada...................................................................................................................................... 55
3. Espectro de una señal ........................................................................................................................................... 55
3.1. Definición en el dominio de la frecuencia...................................................................... 55
3.2. Análisis de una señal ....................................................................................................................... 55
3.3. Componentes espectrales: Espectro de una onda...................................................... 56
4. Series y transformada de Fourier ................................................................................................................ 56
4.1. Dominio de la frecuencia ............................................................................................................. 56
4.2. Series ........................................................................................................................................................... 56
4.3. Transformada de Fourier.............................................................................................................. 56
4.4. Transformada de Fourier bidimensional .......................................................................... 57
Tema 6. Imágenes HDRI.................................................................................................................................... 59
1. Introducción ................................................................................................................................................................ 59
2. Radiosidad .................................................................................................................................................................... 59
3. HDRI................................................................................................................................................................................. 60
4. Iluminación con HDRI en 3D ....................................................................................................................... 61
5. Creación de imágenes HDRI.......................................................................................................................... 62
Tema 7. Relaciones Básicas entre Píxeles .................................................................................... 63
1. Notación ......................................................................................................................................................................... 63
2. Vecindad ........................................................................................................................................................................ 63
3. Contorno ........................................................................................................................................................................ 64
4. Medidas de distancia ............................................................................................................................................ 64
5. Conectividad ............................................................................................................................................................... 64
5.1. Utilidad ...................................................................................................................................................... 64
5.2. Criterios generales............................................................................................................................. 65
5.3. Definiciones ........................................................................................................................................... 65
6. Adyacencia ................................................................................................................................................................... 65
6.1. Píxeles adyacentes............................................................................................................................. 65
6.2. Tipos de adyacencias ...................................................................................................................... 65
6.3. Subconjuntos adyacentes ............................................................................................................. 65
6.4. Caminos de p(x, y) a q(s, t) ........................................................................................................ 65
6.5. Píxeles conectados ............................................................................................................................ 65
6.6. Componente conexa......................................................................................................................... 65
10 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

II. PREPROCESAMIENTO ........................................................................................................................ 67


Tema 8. Etapas Fundamentales del Procesamiento Automático de
Imágenes .................................................................................................................................................................................. 69
1. Objetivo .......................................................................................................................................................................... 69
2. Adquisición .................................................................................................................................................................. 69
3. Preprocesamiento .................................................................................................................................................... 69
4. Segmentación ............................................................................................................................................................. 70
5. Representación .......................................................................................................................................................... 70
6. Descripción .................................................................................................................................................................. 70
7. Reconocimiento ........................................................................................................................................................ 70
8. Interpretación ............................................................................................................................................................. 71
9. Base de conocimiento .......................................................................................................................................... 71
10. Ejemplo para OCR (Reconocimiento Óptico de Caracteres) ............................................ 71
Tema 9. Operaciones de Punto .................................................................................................................. 73
1. Conceptos ...................................................................................................................................................................... 73
2. Complementación (negativo)......................................................................................................................... 73
3. Ampliación del contraste .................................................................................................................................. 74
4. Binarización ................................................................................................................................................................ 74
5. Clipping (Recorte) .................................................................................................................................................. 75
6. Umbralización (Thresholding)...................................................................................................................... 75
7. Slice ................................................................................................................................................................................... 75
8. Logaritmo ...................................................................................................................................................................... 75
9. Modificación del histograma ......................................................................................................................... 76
9.1. Ampliación del Contraste –Normalización ................................................................... 76
9.2. Ecualización del Histograma .................................................................................................... 76
10. Máscaras y mattes................................................................................................................................................ 77
10.1. Matte ............................................................................................................................................................ 77
10.2. Mask............................................................................................................................................................. 78
10.3. Diferencia entre creación y obtención ............................................................................... 78
10.4. Keying basado en la Luminancia .......................................................................................... 79
10.5. Keying basado en la Crominancia ........................................................................................ 79
10.6. Keying de Diferencia ...................................................................................................................... 79
10.7. El Método de Diferenciación de Color de Pietro Vlahos ................................... 79
Tema 10. Operaciones Aritméticas ...................................................................................................... 81
1. Suma.................................................................................................................................................................................. 81
2. Resta .................................................................................................................................................................................. 81
3. Producto.......................................................................................................................................................................... 82
4. División........................................................................................................................................................................... 83
5. Blending ......................................................................................................................................................................... 83
6. Over ................................................................................................................................................................................... 83
7. In/Out................................................................................................................................................................................ 84
8. Atop ................................................................................................................................................................................... 84
Tema 11. Operaciones Lógicas .................................................................................................................. 85
1. And/Nand ...................................................................................................................................................................... 85
2. Or/Nor .............................................................................................................................................................................. 86
3. Xor/Xnor ........................................................................................................................................................................ 86
Tema 12. Operaciones Morfológicas .................................................................................................. 89
1. Dilatación ...................................................................................................................................................................... 89
Í NDICE 11

2. Erosión............................................................................................................................................................................. 90
3. Apertura .......................................................................................................................................................................... 90
4. Cerramiento ................................................................................................................................................................. 91
5. Skeletonización/Transformación de ejes medios ........................................................................... 92
6. Operaciones morfológicas en cine ............................................................................................................. 93
6.1. Edge-Matte.............................................................................................................................................. 93
6.2. Agujeros .................................................................................................................................................... 93
6.3. Ajustando el matte ............................................................................................................................ 94
Tema 13. Filtrado ........................................................................................................................................................ 95
1. Objetivos y dominios del filtrado ............................................................................................................... 95
2. Filtrado en el dominio de la frecuencia ................................................................................................. 95
2.1. Generalidades........................................................................................................................................ 95
2.2. Tipos ............................................................................................................................................................ 96
3. Filtrado en el dominio del espacio ............................................................................................................. 97
3.1. Generalidades........................................................................................................................................ 97
3.2. Tipos ............................................................................................................................................................ 98

III. PROCESAMIENTO................................................................................................................................. 105


Tema 14. Segmentación .................................................................................................................................... 107
1. Generalidades .......................................................................................................................................................... 107
1.1. Definición ............................................................................................................................................. 107
1.2. Objetivos................................................................................................................................................ 107
1.3. Métodos .................................................................................................................................................. 107
2. Métodos ....................................................................................................................................................................... 108
2.1. Detección de discontinuidades ............................................................................................. 108
2.2. Similaridad ........................................................................................................................................... 111
Tema 15. Representación ............................................................................................................................... 119
1. Generalidades .......................................................................................................................................................... 119
2. Códigos de cadena............................................................................................................................................... 119
2.1. Objetivos................................................................................................................................................ 119
2.2. Métodos .................................................................................................................................................. 120
3. Aproximaciones lineales ................................................................................................................................ 122
3.1. Generalidades..................................................................................................................................... 122
3.2. Polígono de perímetro mínimo............................................................................................. 122
3.3. Técnicas de división ..................................................................................................................... 122
4. Firmas............................................................................................................................................................................ 123
4.1. Objetivo .................................................................................................................................................. 123
4.2. Métodos .................................................................................................................................................. 123
4.3. Normalización ................................................................................................................................... 124
5. Lados del contorno.............................................................................................................................................. 124
5.1. Cerco convexo................................................................................................................................... 125
6. Esqueleto de una región .................................................................................................................................. 125
6.1. Transformación del eje medio .............................................................................................. 125
Tema 16. Descripción .......................................................................................................................................... 127
1. Descriptores de contorno................................................................................................................................ 127
1.1. Descriptores sencillos .................................................................................................................. 127
1.2. Números de forma .......................................................................................................................... 128
1.3. Descriptores de Fourier .............................................................................................................. 131
1.4. Momentos ............................................................................................................................................. 132
12 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2. Descriptores de regiones ................................................................................................................................ 134


2.1. Números de Euler ........................................................................................................................... 134
2.2. Métricas .................................................................................................................................................. 135
Tema 17. Reconocimiento.............................................................................................................................. 137
1. Clasificación ............................................................................................................................................................ 137
2. Características......................................................................................................................................................... 137
3. Métodos geométricos ........................................................................................................................................ 138
3.1. Patrones .................................................................................................................................................. 138
3.2. Aprendizaje supervisado ........................................................................................................... 140
3.3. Aprendizaje no supervisado.................................................................................................... 148
4. Métodos estructurales ....................................................................................................................................... 150
4.1. Patrones estructurales .................................................................................................................. 150
4.2. Técnicas.................................................................................................................................................. 151
Tema 18. Interpretación .................................................................................................................................. 155
1. Fundamentos ............................................................................................................................................................ 155
2. Sistemas lógicos (Cálculo de predicados) ........................................................................................ 156
3. Redes semánticas ................................................................................................................................................. 157
4. Sistemas expertos de producción ............................................................................................................. 158
Tema 19. Compresión ......................................................................................................................................... 161
1. Generalidades .......................................................................................................................................................... 161
1.1. Objetivo .................................................................................................................................................. 161
1.2. Métodos de Compresión............................................................................................................ 161
2. Transformación ...................................................................................................................................................... 161
2.1. Objetivo .................................................................................................................................................. 161
2.2. Búsqueda de patrones en una dimensión ...................................................................... 162
2.3. Búsqueda de patrones en dos dimensiones ................................................................. 163
3. Reducir la precisión............................................................................................................................................ 164
4. Minimizar el número de bits ....................................................................................................................... 165

EJERCICIOS ................................................................................................................................................................ 167

PRÁCTICAS .................................................................................................................................................................. 203

BIBLIOGRAFÍA....................................................................................................................................................... 279
I. CONCEPTOS
TEMA 1. INTRODUCCIÓN
1. NECESIDAD DEL PROCESAMIENTO DE IMÁGENES.
Los principales motivos de su estudio son los siguientes:
a) Percepción humana: el ser humano utiliza imágenes digitales, bien para
guardarlas o para modificarlas, como teledetección, imágenes médicas o
fotográficas, etc.
b) Sistema de percepción automática: que consiste en adquirir imágenes y realizar
procesos a partir de ellas. Un ejemplo es el movimiento de robots guiados por
sistemas de visión o los procesos de inspección en la industria.

2. EVOLUCIÓN.
2.1. Etapas.
1920- Bartlane: en un principio, una imagen tardaba en ser transmitida de Londres a
Nueva York una semana. Mediante un cable submarino, este tiempo se logró
reducir a tres horas. La imagen se codificaba mediante 5 tipos – niveles – (+, -,
*, •). En la actualidad se dispone de 256 niveles.
1921- Se mejora el proceso utilizando técnicas de reproducción fotográfica mediante
cintas perforadas.
1929- Se amplía a 15 tonos o niveles, multiplicándose los 5 niveles iniciales por tres.
1963- Sutherland, sketchpad: tesis que presentaba un modo de generar gráficos por
computador, líneas en una pantalla de ordenador.
1964- Programas espaciales: Ranger 7, Surveyor, Apolo, Mariner, etc. El Ranger 7
consistía en misiones no pilotadas a la Luna, en las que las imágenes que
enviaban las cámaras presentaban una distorsión geométrica. Utilizando técnicas
de restauración, se obtenía la imagen real.

2.2. Dificultades.
El procesamiento digital de imágenes no era una disciplina, carecía de reglas o métodos.
Las razones que limitaban su desarrollo eran las siguientes:
• Novedad del procesamiento digital de imágenes.
• No existía un software apropiado.
16 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

• El hardware era costoso y su velocidad lenta. El primer ordenador electrónico de


propósito general del mundo fue el ENIAC, en 1945, formado por 18.000 tubos de
vacío. De unas 30 toneladas de peso, ocupaba unos 16.000 m2, consumía 100.000
w y constaba de unos 30 registros de 10 bits cada uno.

2.3. Aplicaciones.
El procesamiento digital de imágenes y los gráficos por computador se diferencian por
cómo han sido creados; los segundos han sido generados y compuestos por el ser
humano utilizando aplicaciones informáticas. Así, se tienen:
Infografía, arte, multimedia
Gráficos: CAD (diseño asistido por ordenador): 3D, animación,
realidad virtual, juegos, etc.

Teledetección
Medicina
Imágenes: Bases de datos
Visión
Sistemas de seguridad

3. LA LUZ.
3.1. Naturaleza.
El primer concepto relacionado con la luz fue introducido por Newton, y siguiendo su
teoría, hasta mediados del siglo XVIII, se creía que la luz tenía naturaleza corpuscular.
En 1801, Thomas Young introdujo el concepto de luz como onda, demostrándolo
mediante las propiedades de reflexión y refracción. Este concepto se complementó en
1837 con el concepto de onda electromagnética considerado tanto por Maxwell como
por Hertz, pero había propiedades de las ondas electromagnéticas que la luz no cumplía.
Finalmente, en 1905 Einstein propone una naturaleza dual:
• corpúsculo: fotoeléctrico.
• ondulatorio: la luz se comporta como onda en aspectos de reflexiones y
refracciones gráficas.

3.2. Espectro.
INTRODUCCIÓN 17

Al atravesar un haz de luz blanca un prisma óptico, se obtiene el espectro de colores que
aparece en la parte superior. El espectro visible comprende únicamente un subconjunto
de longitudes de onda, una sección del espectro electromagnético.

3.3. Ondas armónicas.

A λ

t (sg)

λ: longitud de onda: distancia entre dos puntos que se comportan de manera idéntica.
T: periodo: tiempo que tarda una onda en recorrer una longitud de onda.
f: frecuencia: número de longitudes de onda que hay en un segundo (λ‘s por segundo)
f=1/T
Relación entre f y λ:
la velocidad viene dada por: v=s/t
en el caso de las ondas: v=λ/T
como se mueven según la velocidad de la luz: c=λ/T
despejando λ:
λ=c*T=c*1/f=c/f
de donde se puede deducir que a mayor λ, menor será la frecuencia.
La velocidad de la luz es c = 300.000 km/s.

4. EL OJO.
4.1. Sensores.
El ojo está formado por unos 7 millones de conos, sensibles al color, y bastones, en
mayor cantidad que los anteriores, sensibles a la intensidad.
Cuando la intensidad de luz es pequeña sólo se perciben formas, no colores.

4.2. Tipos de imágenes.


La imagen percibida por el ojo no es la misma que en la realidad.
• imagen física objetiva: su realidad es independiente del observador, depende
de la luz y del entorno. Es la que se forma al incidir la luz sobre el objeto.
• imagen óptica procesada: al procesar la imagen objetivala óptica del ojo es
muy peculiar, cualquier modificación en el ojo influye en la imagen
percibida, como la miopía.
• imagen mental interpretada: a partir de la imagen óptica procesada, el
cerebro interpreta esa imagen. Debido a la formación sociocultural, es un
proceso personal y subjetivo, depende de los conceptos predeterminados
que se tengan.
18 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

5. RESPUESTA DEL SISTEMA VISUAL.


5.1. Gráfica.
El ojo es muy sensible a los cambios de intensidad. No es capaz de pasar
instantáneamente de una escena iluminada con una intensidad muy pequeña a una con
una intensidad muy grande. Se puede representar la reacción del ojo ante los distintos
niveles de intensidad por medio de una gráfica, en escala logarítmica.
La respuesta del ojo será una curva que parte de poca luz hasta altos niveles de
intensidad, así se puede decir que pasa por varios niveles:
• La visión escotópica corresponde a niveles de iluminación muy bajos, es la
adaptación a la oscuridad.
• La respuesta del ojo al aumento progresivo de la intensidad de luz es la visión
fotópica; en un momento de deslumbramiento los ojos tienden a cerrarse y
pasan a un nivel de adaptación hasta que de nuevo alcanzan la visión fotópica.
Límite de brillo

RESPUESTA
Brillo subjetivo DEL OJO

Nivel escotópico

Longitud de la
-6 -4 -2 0 2 4 intensidad (mL)

5.2. Contraste.
Es la diferencia de intensidad luminosa entre dos zonas u objetos distintos. Es subjetivo,
depende de varios factores: intensidad luminosa, intensidad del fondo, sobrevaloración
de los bordes (cuando hay dos regiones con distinta iluminación –aparece un borde-, el
ojo tiende a sobrevalorar la información que hay en el borde), nivel de adaptación, etc.

5.3. Ilusiones.
Contraste simultáneo (Cornsweet): si hay dos regiones próximas con diferente nivel
de intensidad, la iluminación percibida por el ojo de una región depende de la otra
región. Por ejemplo, si se presentan cuatro cuadrados de diferentes intensidades de
gris y dentro de cada uno hay otro cuadrado, los cuatro cuadrados interiores son del
mismo gris, sin embargo el contorno exterior provoca que los percibamos de distintas
intensidades.
INTRODUCCIÓN 19

Anillo de Benussi: si se tienen dos anillos cuadrados ambos en dos intensidades de gris,
uno con la diferencia de intensidades marcada por una línea, y en el interior de cada
uno hay un rectángulo igualmente coloreado, la línea marcada en uno de los anillos
provoca que se perciba el anillo interior blanco como si fuera de dos tonalidades de
blanco distintas.

Bandas de Mach (Cornsweet): son bandas de color negro descendente. El efecto visual
que provocan es que la zona de cada banda al lado de la parte clara da sensación de
más oscura; de igual modo la parte de la banda que está al lado de la zona oscura da
sensación de más clara.

Ilusiones ópticas:

Para distinguir cuál de los círculos centrales


es mayor, se percibe que el círculo mayor es
el que está rodeado por círculos más
pequeños, cuando en realidad, los dos
círculos interiores son iguales.

Las rectas parecen que se curvan, por el efecto Hay tres soldados del
de los círculos y los rombos, respectivamente. mismo tamaño en posición
dimensional, pero el último
de ellos parece más alto.
Copa de Rubin: se trata de la
fotografía de un jarrón, donde se
puede percibir dicho jarrón o dos
caras contrapuestas formadas por
el fondo.
20 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Ilusión de Ouchi: es una imagen formada por rectángulos


blanco, negro, blanco, etc., colocados en horizontal, en
cuyo centro formando un círculo también se encuentran
rectángulos similares pero en vertical, el efecto óptico
producido es el “movimiento” de los interiores.

Otro efecto óptico se consigue en


las figuras siguientes, mediante la
ilusión de que existe un cubo
blanco en la de la izquierda y que
hay puntos grises entre los
cuadrados en la de laderecha.

Otro tipo de ilusiones ópticas es la


ambigüedad de la profundidad o las
escaleras que ni suben ni bajan.
TEMA 2. COLOR
1. MODELO SENCILLO DE IMÁGENES.
1.1. Imágenes ópticas.
Una imagen es una función bidimensional de la luz y la intensidad. Se representa como
f(x,y), y para cada punto de la imagen (x,y), la función devuelve el valor de la
intensidad de la imagen en dicho punto.
Una imagen es una forma de energía y, por tanto, ha de ser finita y estrictamente
mayor que cero, tomando valores reales enteros que verifican 0 < f(x,y) < ∞.
La imagen consta de dos componentes o formas de energía:
• i(x,y) es la iluminación, la luz que incide sobre un objeto. 0 < i(x,y) < ∞
• r(x,y) es la reflectividad, la cantidad de luz que refleja.
Un objeto puede absorber toda la luz (1) o nada (0). 0 < r(x,y) < 1
Una imagen viene definida por:
f(x,y) = i(x,y) * r(x,y)

1.2. Imágenes digitales.


Proceden del muestreo espacial y en intensidad de la imagen óptica. Están formadas por
una matriz de elementos (píxeles). El píxel, picture element, es el valor de color o
intensidad asociado a cada elemento de la matriz; tiene coordenadas espaciales. Puede
tomar valores dentro del rango [0, 255].

1.3. Nivel de gris.


En las imágenes monocromáticas cada uno de los valores que puede tomar un píxel
coinciden, al ser una imagen de un solo color. El valor de luminancia l estará
comprendido entre unos valores mínimo y máximo.
Lmin ≤ l ≤ Lmax donde l es el nivel de gris.
Escala de grises es un conjunto de los niveles de gris que puede tomar cada píxel
(L: Level):
[Lmin, Lmax] son 256 valores: [0, 255]
22 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2. CAUSAS DEL EMPLEO DEL COLOR.


El color se emplea por dos razones:
a) Seres humanos: diferencian entre miles de matices de color. En cambio,
distinguen pocos niveles de gris (en imágenes monocromáticas, unos 24 niveles
diferentes).
b) Sistema automático de procesamiento de imágenes: el color se utiliza como
descriptor ya que permite diferenciar unos objetos de otros (extracción de
características). Para que sea útil, además del color se necesita conocer su
coordenada espacial.

3. FUNDAMENTOS DEL COLOR.


3.1. Identificación y caracterización de la luz.
No se conoce cómo el cerebro percibe los colores, pero se puede describir la naturaleza
física del color –de la luz-, mediante su longitud de onda (λ). Un color se diferencia de
otro según como sea la longitud de onda predominante:
- longitud de onda equilibrada → blanco. Refleja todas las λ.
- longitud de onda no equilibrada → coloreada. Refleja el color de una λ
determinada.
Una fuente de luz se caracteriza mediante tres parámetros:
- radiancia: cantidad de energía (luz) que emite una fuente de luz (radiante). Se
mide en watios (w).
- luminancia: cantidad de luz que percibe el observador. Se mide en lúmenes
(lm).
- brillo: es un descriptor subjetivo de la intensidad de luz.

3.2. Generación.
a) Colores primarios de luz: debido a la estructura del ojo humano, cualquier color
puede especificarse en función de tres colores: rojo (red), verde (green) y azul
(blue): f(R, G, B)
En 1931 la CIE (Comisión Internacional de la Iluminación) determinó que los
valores fijos para las longitudes de onda, λ, eran:
R = 700 nm
G = 546,1 nm
B = 435,8 nm.
Se les denomina colores primarios de luz y son de naturaleza aditiva, los colores
se obtienen al combinarlos. La presencia de los tres colores primarios origina el
blanco, de valor en escala de grises 255. Por el contrario, la ausencia de los tres
colores provoca la oscuridad, negro = 0.
Los colores secundarios de luz se obtienen al combinar dos a dos los colores
primarios de luz. Son el cian, el magenta y el amarillo.
primario + primario = secundario
COLOR 23

b) Colores primarios de pigmentos: son aquellos que absorben o sustraen


completamente un color primario de luz y transmiten o reflejan los otros dos. Son
de naturaleza sustractiva, es decir, un color se obtiene substrayendo los primarios
de luz.
Los colores primarios de pigmentos son los secundarios de luz.
Al unir los tres colores primarios de pigmentos se obtiene el negro. La ausencia de
estos tres produce el blanco.

c) Aplicaciones: los colores primarios de luz son utilizados en un monitor de


televisión. Los primarios de pigmentos, secundarios de luz, son los de la
impresora o los utilizados en la paleta de un pintor.

3.3. Caracterización.
a) Características: para describir un color se utilizan los siguientes parámetros:
- Tono (Hue): es el matiz, la tonalidad del color. Viene determinado por la
longitud de onda, λ del color que se ve.
- Saturación (Saturation): indica la pureza relativa del color. En qué grado,
medido en tanto por ciento, es puro un color. Si es 100% saturado, sólo
existe ese color. Para otro valor, disminuye la cantidad de color puro.
- Brillo (Luminance): da una noción de la intensidad del color.
b) Especificaciones:
b.1) Para especificar el color, si va dirigido a un ser humano, se utiliza la
cromaticidad (engloba el tono y la saturación, es decir, las componentes
cromáticas de color) y el brillo.
24 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

b.2) Si la especificación va dirigida a un componente (un ordenador, etc.), se


utilizan los coeficientes tricromáticos, que son valores triestímulo que
indican la cantidad de rojo, verde y azul que tiene un color. Estos valores
se obtienen de tablas o curvas que especifican qué cantidad de rojo, verde
y azul tiene cada color y se normalizan entre 0 y 1:
x = x / (x + y + z) y = y / (x + y + z) z = z / (x + y + z)

4. COLORIMETRÍA.
Es la ciencia que se ocupa de la medida cuantitativa del color. Pretende medir de forma
tangible los distintos colores o especificar algún procedimiento para que los dispositivos
que utilicen colores se entiendan entre sí. Para ello, utiliza los modelos de color y los
modos de color.

5. MODELOS DE COLOR.
5.1. Generalidades.
a) Objetivos: Obtener y disponer de un método de representación del color
normalizado.
b) Definición: Un modelo de color consiste en la especificación de un sistema de
coordenadas tridimensionales y de un subespacio dentro de ese sistema, donde
cada color está representado por un único punto.

5.2. Modelos.
RGB
Se representa mediante un sistema cartesiano cuyo subespacio es el cubo unidad
(lado = 1). Cada color es un punto determinado por un vector que tiene como origen el
de coordenadas y acaba en dicho punto. El origen de coordenadas representa el negro.
Cada eje está asociado a un color (rojo, verde y azul). En cuestión de luminosidad,
cuanto más cercano al origen, más oscuro será el color.
El sistema depende de la fuente de luz para crear el color.
El espectro visible se representa combinando los tres componentes básicos de luz
coloreada en proporciones e intensidades diferentes (colores primarios): Rojo, Verde y
Azul.
Al superponerse crean los colores secundarios: Cian, Magenta y Amarillo
bo
Azul
(0, 1, 0) Cian

Magenta BLANCO
NEGRO Verde
go
(0, 0, 1)

Rojo
(1, 0, 0) Amarillo
ro
El sistema RGB será útil siempre que se quieran visualizar imágenes mediante adicción
de colores, como es el caso de los monitores y sistemas de televisión o las imágenes
multiespectrales.
COLOR 25

En la televisión, cada punto que se visualiza, llamado píxel, está formado por una
triada de elementos que tienen tres componentes: R, G, B.
Otra utilidad es la visualización de imágenes en falso color, como las imágenes
procedentes de un satélite. Por ejemplo, la imagen enviada por el satélite Landsat (7
bandas): R + G + 2 infrarrojos, los infrarrojos sustituyen al B, son no visibles, por lo
que se dice que es una imagen en falso color.

CMYK
El subespacio también es el cubo unidad sobre un sistema de coordenadas cartesianas.
Se basa en las propiedades de absorción de luz de la tinta impresa en papel.
Cuando la luz blanca incide en tintas translúcidas, se absorbe una parte del espectro.
El color que no es absorbido se refleja de vuelta al ojo.

yo

Amarillo (0, 1, 0) Rojo

NEGRO
Verde
BLANCO (0, 0, 1) m
o
Magenta

Cian
Azul
co (1, 0, 0)

Las impresoras utilizan cartuchos de los colores Cian, Magenta y Amarillo, para obtener
cualquier otro combinándolos. Debido a las impurezas de las tintas, al combinar los tres,
no da negro, sino marrón sucio y por eso se utiliza un cartucho exclusivo para negro.
Los colores aditivos y los substractivos son complementarios:

C 1 R
M = 1 - G
Y 1 B

HSL
Significa tono, saturación y brillo o luminancia. El sistema sobre el que se representa es
un doble tetraedro, llamado sólido de color. Separa por un lado la luminancia (de 0
–negro- a 1 –blanco) de la cromaticidad (saturación y tono), la cual se mide por los
planos horizontales que cortan al sólido.
Para medir el tono y la saturación se utiliza un triángulo equilátero, denominado
triángulo de color. La distancia del centro del triangulo, vértice que no representa los
colores primarios de luz ni de pigmento, al color es importante. Se toma un vector que
une dicho vértice con el color, el ángulo de éste es el tono (hue) y la longitud o módulo
del vector, la saturación. La saturación máxima es el 100%; cuanto más alejado del
centro esté el color, más puro será.
26 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Blanco L = 100%
Blue
Blue Magenta Cian
Red Green Luminance

Red Green
Yellow
0
Negro

Hue (Tono):
- Es la longitud de onda de la luz reflejada o transmitida.
- Se mide como una posición en la rueda de colores estándar, y se expresa en
grados entre 0º y 360º (va del rojo al verde y luego al azul para volver al rojo).
- Describe la sombra o el tinte del color
Saturation (Saturación):
- También llamada cromatismo, es la fuerza o pureza del color.
- Representa la cantidad de gris que existe en proporción al tono, y se mide como
un porcentaje comprendido entre el 0% (gris) y el 100% (saturación completa).
- En la rueda de colores estándar, aumenta al acercarse al borde y decrece al
aproximarse al centro.
Luminance (Luminancia):
- O brillo, es la luminosidad u oscuridad relativa del color.
- Normalmente se mide como un porcentaje comprendido entre el 0% (negro) y el
100% (blanco)
La utilidad de este modelo está basada en que desacopla la componente cromática de la
componente de luminancia, que es la forma que tiene el ser humano de percibir bien los
colores.

L*a*b
Se basa en el modelo original de color propuesto por la
Commission Internationale d’Eclairage (CIE) en 1931
como estándar de medida para el color.
Su utilidad es que es independiente del dispositivo
(son colores coherentes). Soluciona la variabilidad de la
reproducción del color cuando se usan monitores e
impresoras diferentes.
Sus componentes son:
- Luminiscencia (componente de la luminosidad)
- Dos componentes cromáticos:
a, que oscila entre verde y rojo.
b, que oscila entre azul y amarillo.
Se utiliza para:
- Modificar los valores de luminosidad y color por separado.
- Trasladar imágenes de un sistema a otro.
- En impresoras PostScript de Nivel 2: utilizan este modelo para representar los
colores, aunque a la hora de imprimir, usan el CMYK.
COLOR 27

YUV
Modelo de color que se presentó inicialmente para vídeo analógico PAL.
Tiene una componente Y que es la luminancia y otras dos para la crominancia: Cb y
Cr, donde Cb = B - Y y Cr = R - Y.
La matriz que relaciona este modelo con el RGB es:

U = 0.492 (B - Y)
V = 0.877 (R - Y)

6. GAMAS.
Son la variedad de colores que pueden mostrarse o imprimirse en un sistema de color.
Los colores fuera de gama son aquellos que pueden visualizarse en un monitor pero
no imprimirse.

A: L*a*b: es la gama más amplia (incluye a RGB


y CMYK).
B: RGB: se usan en televisiones y monitores. No
tiene el cian o amarillo puros.
C: CMYK: es la gama menor (son las tintas de
impresión).

7. MODOS.
a) Explicación: dada una imagen digital, indican qué cantidad de colores puede
presentar como máximo una imagen, la riqueza de color que tiene. Para cada
píxel tiene un número de colores, así se puede tener una imagen en:
Mapa de bits: es la menor gama; sólo hay dos colores para representar un
píxel, blanco o negro. La profundidad de color será de 1 bit.
Escala de grises: en este caso se tienen 256 niveles (matices) de gris, con una
profundidad de color de 8 bit.
Color indexado o paleta de color: menor tamaño y calidad, el mínimo valor
será 0 y el máximo 256. Tiene la misma profundidad de color que el anterior.
Color real: es multicanal; son tres imágenes superpuestas (R, G, B) cada una
de 8 bits. Así se tienen dos posibilidades: 16 bit que determinan 64000 colores
o 24 bits que determinan 16 millones de colores.
Nota: la profundidad de color es el número de bits necesarios para representar el
color.
b) Representación en Matlab: MATLAB almacena la mayoría de las imágenes
como arrays bidimensionales (matrices), donde cada elemento de la matriz
corresponde a un píxel de la imagen. Una imagen compuesta de 200 por 300
28 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

píxeles podría almacenarse en MATLAB como una matriz de 200 por 300
elementos.
Trabajar en MATLAB con imágenes es similar a trabajar con cualquier otro tipo
de matriz de datos. Puede seleccionarse un píxel determinado en una imagen
mediante la notación matricial:
I (4, 10). Devuelve el píxel que se encuentra en la fila 4, columna 10 de la
imagen I.

Tipos de datos.
Por defecto, MATLAB almacena la mayoría de los datos en arrays de clase double
(números en coma flotante con doble precisión -64 bits-). Todas las funciones de
MATLAB pueden trabajar con estos vectores.
Para el procesamiento de imágenes, esta representación no es siempre adecuada, ya
que el número de píxeles en una imagen puede ser muy grande y este tipo de datos
supone ocupar gran cantidad de memoria. Para reducir los tamaños de almacenamiento,
MATLAB soporta almacenar las imágenes en matrices de datos de clase uint8 (enteros
sin signo de 8 bits).
Esta diferencia en los tipos de datos hace que:
- Los valores no enteros se puedan almacenar únicamente en matrices de tipo
double.
- No todas las funciones pueden operar con vectores de tipos uint8.
b1) Imágenes indexadas (Paleta de color).
Está formada por dos matrices, una matriz de imagen y un mapa de color.
- El mapa de color es un conjunto ordenado de valores que representa los colores
que hay en la imagen.
- La matriz de la imagen contiene, para cada píxel, un valor que es un índice en el
mapa de color.
El mapa de color.
Es una matriz de m-por-3 elementos de clase double.
Cada fila de la matriz del mapa de color especifica los valores rojo, verde y
azul, (RGB) para un color simple.
Los valores R, G y B son escalares reales que pueden tomar valores desde el 0
(negro) al 1.0 (blanco correspondiente a la intensidad total).
Relación entre la matriz de imagen y el mapa de color.
Según sean los valores de la matriz de imagen, double o uint8, pasará lo
siguiente:
- Matriz de imagen double. El valor 1 apunta a la primera fila en el mapa
de color, el valor 2 a la segunda y así sucesivamente.
- Matriz de imagen uint8. Hay un offset, apuntando el valor 0 a la primera
fila del mapa de color, el valor 1 a la segunda, y así sucesivamente.
b2) Imágenes en escala de grises (Intensity images).
Matlab almacena una imagen en escala de grises en una única matriz, correspondiendo
cada elemento de ella a un píxel de la imagen.
La matriz puede ser de clase:
- double. En este caso contendrá valores dentro del rango [0, 1]
COLOR 29

- uint8. Pudiendo tomar los datos valores dentro del rango [0, 255]
Los elementos de la matriz representan diferentes niveles de grises, correspondiendo el
valor 0 con el negro, y el valor 1, o el 255 con el blanco.
b3) Imágenes binarias.
En las imágenes binarias cada píxel puede tomar únicamente dos valores discretos, on y
off.
Se almacena como una matriz bidimensional de 0’s (off ) y 1’s (on).
Pueden almacenarse en matrices de clase uint8 o double. Es preferible almacenarla
en matrices de clase uint8 porque ocupan menos memoria.
En la versión 3.1. de la Toolbox de Procesamiento de Imágenes, cualquier función
que devuelve una imagen binaria lo hace como un vector lógico de clase uint8.
b4) Imágenes RGB.
Al igual que en una imagen indexada, en una imagen RGB el color de cada píxel se
representa por un conjunto de tres valores, que corresponden con el rojo, el verde y el
azul.
A diferencia de una imagen indexada, estos valores de intensidad se almacenan
directamente en la matriz de la imagen, y no, de forma indirecta, en un mapa de
color.
Los tres componentes del color se almacenan en una matriz de tres dimensiones,
m x n x 3, siendo m y n el número de filas y columnas de los píxeles de la imagen,
consistiendo la tercera dimensión en tres planos que contienen los valores del rojo,
verde y azul. Para cada píxel de la imagen, es necesario combinar los valores del rojo,
verde y azul para obtener el color del píxel.
Ejemplo.
Para determinar el color del píxel (112, 86), se busca en los tres valores asociados a esta
posición (112, 86, 1:3). Si se supone que:
(112, 86, 1) contiene el valor 0.1238
(112, 86, 2) contiene el valor 0.9874
(112, 86, 3) contiene el valor 0.2543
El color para este píxel vendría dado por sus componentes RGB:
0.1238, 0.9874, 0.2543
Una matriz RGB puede ser de clase:
double: contiene valores en el rango [0, 1].
uint8: contiene valores en el rango [0, 255].

8. FORMATOS GRÁFICOS.
Al almacenar una imagen, su información: número de colores, compresión de la
imagen, etc., se realiza con un tipo de formato.
Los tipos que hay son:
BMP: BitMaP format, imagen en mapa de bits. Es el más sencillo de todos.
Ocupa mucho espacio. *.BMP
CCITT FAX: International Telegraph and Telephone Consultative Committee
Facsimile transmission data formats.
30 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

GIF: Graphics Interchange Format. Es el mejor criterio para transmitir datos a


través de la línea telefónica.
GRASP: Graphical System for Presentation. Se utiliza para pseudolenguajes de
programación que pueden ser usados para crear y animar demostraciones
graficas.
JPEG: Join Photographic Experts Group. Creado como formato estándar
internacional para imágenes, con ilimitadas aplicaciones.
MACPAINT: Macinthosh Paint format. Para aplicaciones de Macinthosh.
RLE: Run Length Encoded. Es un formato de mapa de bits comprimido
estándar. La compresión es especialmente efectiva en aquellos mapas de bits que
contienen regiones grandes de colores sólidos.
SunRaster: Sun Raster Data Format. Es un formato simple, principalmente
para aplicaciones en Sun Workstations. Los cuatro primeros bytes van en
hexadecimal. *.rast, *.ras, *.im, *.im1, *.im8, *.im24, *.im32.
TGA: para aplicaciones con productos Truevision’s y para datos gráficos.
*.TGA, TPIC
TIFF: Tag image File Format. Utilizado para aplicaciones de vídeo, imágenes
medicas, de satélites, etc. *.TIFF
TIGER/LINE Census Files: Topologically Integrated Geographic Encoding
and Referencing/Line Census Files.
WMF: Window MetaFIle. Utilizado en programas que funcionen bajo el entorno
de Windows 3.0 o superior.
X Bitmap: X Windows System Bitmap. Formato para mapa bits (1 bit por píxel)
que puede ser utilizado en C, incluso compilado con alguna modificación.

9. IMÁGENES CON MÁS DE 8 BITS POR CANAL


Normalmente las imágenes con 8 bits por canal son con las que se trabaja. Pero estas
imágenes de 24 bits (32 si incluyen canal alfa) no son suficientes para ciertas tareas. Por
ejemplo, para manipulación de imágenes y adición de efectos especiales en cine son
necesarias imágenes de más de 8 bits por canal, como el formato CINEON de 10 bits
por canal en escala logarítmica.
La razón de todo esto es que, en el ejemplo anterior, las imágenes van a ser
proyectadas en una superficie muy amplia (una pantalla de cine), de forma que si hay
degradados y se tienen pocos colores, estos pueden producir un efecto conocido como
banding (degradados no suaves). Por eso hay que proporcionar muchos más colores
intermedios de los 16 millones que normalmente se utilizan.
Otra situación es aquella en la que se realizan cromas o trucajes, lo que puede que
suprima algunos colores de la imagen. Si se tienen pocos colores quedan aún menos,
por eso es aconsejable tener una paleta más amplia.
Pero la razón que normalmente se expone es que el negativo de 35mm,
habitualmente utilizado en cine, posee una gama cromática superior a los 8 bits por
canal.
A continuación se mostrará una descripción de dos formatos de imágenes de más de
8 bits por canal: el formato CINEON, que es el estándar en cine y el formato RLA que
aporta muchas ventajas dentro del mundo 3D y la Composición Digital.
COLOR 31

9.1. CINEON.
Este formato es el estándar utilizado en cine. Fue desarrollado por Kodak para dar
cabida a las necesidades de calidad demandadas.
Se digitaliza el negativo de una película en vez de una impresión porque éste tiene
más calidad. Se dice que una imagen CINEON es un negativo digital, aunque no se
visualiza como un negativo ya una de las cosas que se realizan al almacenar en
CINEON es una inversión digital (los negros pasan a blancos y viceversa).
Utiliza un espacio de color logarítmico, de forma que se almacena mucha
información de las zonas brillantes que son las que más discrimina el ojo y así se evita
el clipping en dichas intensidades.
Los programas de composición que admiten dicho formato tienen que realizar una
linealización debido a que no se puede trabajar en dicha escala logarítmica. Por eso se
linealizan los valores a 16 bits por canal o a 8 bits por canal (con la correspondiente
pérdida de información). Es necesario el uso de tablas LUT para que una imagen
CINEON pueda ser mostrada en un dispositivo como un monitor.
Otra característica de este formato es su predicibilidad en cuanto a tamaño de
almacenamiento, ya que sólo depende de la resolución de la imagen. La fórmula
siguiente da el tamaño en megabytes de una imagen CINEON:
Tamaño (Mb) = ( (Resolución X) x (Resolución Y) ) / 250.000
Por ejemplo, una imagen de 1828 x 1556 ocupará unos 11 Mb.

9.2. RLA / RPF.


Este popular formato en 3D y Composición Digital fue desarrollado por SGI para el
render de los productos Alias Wavefront. Su principal característica y ventaja es que
permite la adicción de canales arbitrarios. Permite 8 ó 16 bits por canal.
Además de los canales RGB y el canal alfa, RLA puede almacenar:
• Profundidad Z: Información del búfer Z en degradados repetitivos de blanco
a negro. Los degradados indican la profundidad relativa del objeto en la
escena.
• Efectos de material: Muestra el canal de efectos que utilizan los materiales
asignados a objetos de la escena. Esto permite a los programas de
composición cambiar las texturas de una imagen ya renderizada.
• Objeto: Muestra el ID de canal de objeto de búfer G.
• Coordenadas UV: Muestra el rango de coordenadas de mapeado UV como
un degradado de color.
• Normal: Muestra la orientación de los vectores normales como un
degradado de escala de grises. Las superficies de color gris claro tienen
normales que apuntan a la vista y las de color gris oscuro tienen normales
que apuntan en sentido contrario.
• Color no bloqueado: Muestra las áreas de la imagen en las que los colores
sobrepasaban el rango de colores válido y fueron corregidos. Las áreas
aparecen como colores saturados luminosos, normalmente alrededor de
resaltes especulares.
• Fondo: Guarda el color del objeto que hay tras el objeto frontal. Este canal
sólo es válido si la cobertura del objeto delantero no es total, o si este objeto
es al menos parcialmente transparente. Sin embargo, si un píxel del objeto
32 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

delantero cubre totalmente otro del posterior y es opaco, no se genera el


canal de color de fondo de ese píxel, sino que se usa el color del fondo.
RPF (Rich Píxel Format) es una versión mejorada de RLA en la que se pueden
almacenar más canales de información de una escena 3D. Algunos de estos nuevos
canales son:
• Transparencia: Guarda la transparencia que devuelve el sombreador de
materiales para el fragmento. Todo fragmento con un grado cualquiera de
transparencia se renderiza como un objeto gris sólido.
• Velocidad: Guarda el vector de velocidad del fragmento en relación con la
pantalla en coordenadas de pantalla.
• Peso de subpíxel: Guarda el peso de subpíxel de un fragmento. El canal
contiene las fracciones del color de píxel total aportadas por el fragmento.
La suma de todos los fragmentos da el color de píxel final. El peso de un
fragmento determinado tiene en cuenta la cobertura del fragmento y la
transparencia de los fragmentos que se encuentran delante.
• Máscara de subpíxel: Guarda la máscara alpha de subpíxel. Este canal
proporciona una máscara de 16 bits (4x4) por píxel, utilizada en
composición Alpha alisada. Dicha máscara es especialmente útil con
software de composición.
Ambos formatos permiten almacenar información acerca del autor y una descripción de
la imagen.
Otros formatos de imágenes de más de 8 bits por canal son:
SGI: Creado por Silicon Graphics Inc como estándar dentro de su sistema
operativo IRIX. Puede contener 8 ó 16 bits por canal. Puede incluir un
canal extra para el matte, pero no da soporte para Z-depth.
IFF: Es un formato de carácter general y cada casa como Amiga o Alias han
adaptado dicho formato para sus intereses. Puede contener más de 32 bits
por canal. Admite un número indefinido de canales. Este formato también
tiene su variante AIFF para audio.
DPX: Es una variante de Cineon. No utiliza ningún tipo de compresión y puede
contener algo de información adicional en la cabecera.
TEMA 3. HISTOGRAMA E INTERPOLACIÓN
1. HISTOGRAMA.
1.1. Definición.
De forma cuantitativa, el histograma de una imagen consiste en el número de píxeles
que tiene la imagen para cada uno de los niveles de gris. Se representa mediante un eje
de coordenadas cartesianas. En las abscisas se representan los niveles de gris (de 0 a
255) y en ordenadas, el número de píxeles.

Número de
píxeles

Niveles de gris

1.2. Utilidad.
1.2.1. Cualitativo.
De forma cualitativa, el histograma
da una idea de la distribución de la 4
intensidad en la imagen. Sirve para 3
mejorar el brillo (aclarando u 2
oscureciendo), el contraste, etc, así 1
como para la segmentación, ya que
puede ser útil para indicar
agrupamientos de píxeles. 2 4 6 8
1.2.2. Cuantitativo. 1
3 2 7
Cuantitativamente, sirve como descriptor de la imagen, pero presenta
un inconveniente, cuando dos imágenes distintas tengan el mismo 1 4 2 3
histograma. 1 4 2 3
6 7 2 3
34 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

1.3. Por tipo de imagen.


a) Niveles de gris: pueden tomar valores desde 0 a 255.
b) Blanco y negro (B/N): los píxeles
toman el valor 0 ó 1.
c) Imágenes en color: hay tres
histogramas, uno para cada plano,
correspondiendo cada uno con los
colores básicos: rojo, verde y azul,
que pueden tomar valores desde 0 a
255 y que se representan de forma
superpuesta.

1.3.1. Canales
Además de considerar el blanco y el negro como los valores máximo y mínimo, se
pueden utilizar otros, ya que el histograma permite trabajar con canales.
Trabajando con canales RGB, si se usa el histograma para manipular el canal R
(rojo), por ejemplo, el valor mínimo será el negro, pero el valor máximo será el rojo
puro en vez del blanco. Los valores intermedios son una gradación de color del negro al
rojo.
Se seguirá trabajando con 256 valores, ya que, en realidad cuando se trabaja con un
canal es como trabajar con una imagen en blanco y negro, donde el blanco es el valor
máximo de dicho canal (rojo en el R, verde en el G, y azul en el B) y el negro sigue
siendo el negro.
Todo lo anterior se ha referido a imágenes de 8 bits por canal, pero pueden ser de
más. En el caso particular de imágenes en formato CINEON (10 bits en escala
logarítmica), primero hay que realizar una linealización de la imagen antes de poder
aplicarle un histograma.

2. AJUSTES A PARTIR DEL HISTOGRAMA.


2.1. Básicos.
2.1.1. Niveles de entrada.
Sirven para modificar el contraste de una imagen oscureciendo más las zonas oscuras o
aclarando más las zonas más claras. Con estos controles se puede “redefinir” dónde está
el negro y dónde el blanco de la imagen.
Dada una imagen en blanco y negro, donde hay valores de blanco absoluto (255), si
se utilizan los controles de niveles de entrada para decir que el blanco absoluto será a
partir de ahora un valor gris (200, por ejemplo), todos los píxeles con valores de 200 a
255 pasarán a valer 255 (blanco absoluto).

Nivel de entrada Nivel de entrada


mínimo máximo

Nivel de salida Nivel de salida


mínimo máximo
HISTOGRAMA E INTERPOLACIÓN 35

2.1.2. Niveles de salida.


Se utilizan para manipular el brillo, y de esta forma hacer más claros los oscuros y más
oscuras las zonas claras.
Estos valores se ajustan teniendo en cuenta los valores de entrada, de tal forma que
se tomará como negro absoluto al valor máximo de negro indicado en los valores de
entrada. Se actúa de la misma forma con el color blanco.

2.1.3. Gamma.
Suele venir indicado por un triángulo gris situado en medio de la escala horizontal.
Indica el valor de gris medio.
Utilizando dicho control se puede variar el contraste de los semitonos. Lo que quiere
decir que se varían los valores medios de gris, sin afectar demasiado a las luces y
sombras.
En la figura anterior, el valor de gris medio es 1.0, lo que indica un gamma normal.

2.2. Curvas de Control.


2.2.1. Definición.
Las curvas de control son representaciones gráficas de cómo el color de una imagen es
mapeado. Cambiando la forma de la gráfica (curva) se remapea el color de la imagen.
Es una de las opciones de corrección más potentes que se conocen hoy en día.
Normalmente se usa el histograma para realizar correcciones, y las curvas quedan
relegadas para cuando se quieren hacer ajustes más exactos.
Su principal diferencia a la par que ventaja con respecto del histograma es que
permite hacer cambios no lineales.

2.2.2. Valores de entrada y salida.


En la horizontal se marcan los valores de entrada y en la vertical los de salida. A cada
valor de entrada le corresponde uno de salida según la gráfica. En la imagen siguiente se
puede observar la función lineal por defecto, con lo que a cada valor de entrada le
corresponde exactamente uno de salida.

Función lineal por


Valores de salida defecto

Valores de entrada

2.3. Tablas LUT.


Las tablas LUT (look-up tables) sirven para realizar mapeos input-output entre valores
de píxeles. Son tablas que asignan a un valor de un píxel otro valor de salida.
Con estas tablas se pueden relacionar muchos tipos de canales, por ejemplo, si en
dicha tabla (que no deja de ser una gráfica) se tiene en el eje X (in) el canal de
36 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

saturación y en el eje Y (out) el canal de brillo, se puede modificar el brillo en función


de la saturación.
Por supuesto, también se pueden realizar modificaciones en canales haciendo que
ciertos niveles del canal verde afecten al canal rojo, etc.

Uno de los usos de las tablas LUT es el remapeo cuando se realizan conversiones en
profundidades de color. Por ejemplo, si se pasa de una profundidad de color de 10 bits a
otra de 8 bits se pueden utilizar tablas LUT para indicar al software como serán
remapeados los píxeles, ya que habrá colores en la imagen de 10 bits por canal que no
podrán representarse en la de 8 bits. También se puede hacer la operación inversa.
Otro uso análogo es cuando se manipulan imágenes de muchos bits por canal y se están
viendo en dispositivos (como un monitor) que son incapaces de representar todos los colores
que dichas imágenes poseen. En este caso se pueden remapear los valores para asignar a los
valores de la imagen otros en el dispositivo.

3. INTERPOLACIÓN.
3.1. Definición.
La interpolación es una operación necesaria para realizar operaciones geométricas,
como son el cambio de escala, las rotaciones, etc. Se tiene una información de los
píxeles de la imagen y al aumentarla, se añaden píxeles, debiendo determinarse el color
de los mismos.
La interpolación consiste en la asignación de un nivel de tonalidad a un píxel en
función de los píxeles próximos.

3.2. Tipos.
3.2.1. Orden cero.
Asigna al píxel de la nueva imagen el píxel más próximo de la antigua.
3.2.2. Bilineal.
Asigna al píxel de la nueva imagen un valor ponderado de los píxeles próximos (2 en
una dimensión, 4 en dos dimensiones). La ponderación es función de las distancias de
cada píxel.

Imagen antigua

Proyección de la
imagen nueva sobre
la antigua
ORDEN CERO Imagen nueva
BILINEAL
HISTOGRAMA E INTERPOLACIÓN 37

3.2.3. Otros.
Existen otros tipos de interpolación que ofrecen mejores resultados, pero que requieren
mayor complejidad de cálculo.
Nota: La interpolación en ampliación/reducción por múltiplos de 2 y en los giros
múltiplos de 90º es mucho más sencilla.
TEMA 4. RESOLUCIÓN
1. ELEMENTOS DE UN SISTEMA DE PROCESAMIENTO DIGITAL DE
IMÁGENES.
Las imágenes se pueden capturar por un dispositivo analógico o digital. En ambos
casos, se siguen una serie de etapas:

1.1. Captura analógica.


a) Dispositivo de captura: obtiene la imagen analógica mediante cámaras:
- Cámara de fotos: se forma la imagen sobre una película de plástico con sales de
plata fotosensible. Por el diafragma u obturador se regula la cantidad de luz y
el tiempo que incide en la película. A partir del negativo que crea se pasa a
positivo mediante técnicas de revelado, consiguiendo la imagen en soporte de
papel o en diapositivas. Es una imagen analógica.
- Cámara de vídeo: graba en una cinta magnética la impresión de lo que captura
la cámara. Es una imagen analógica.
b) Digitalización: se necesita un convertidor analógico-digital (DAC) ya que las
imágenes sobre las que se trabaja son digitales, aunque el modo de obtenerlas y
transmitirlas sea analógico. Como dispositivos digitalizadores se puede utilizar:
- Escáner: convierte la imagen analógica, que está en papel, en digital, con el
formato que se le indique. Funciona iluminando el documento o la ilustración
y, la luz reflejada a través de una serie de espejos y lentes, la dirige hacia un
elemento fotosensible, normalmente un circuito electrónico (CCD) compuesto
de fotositos sensibles a la luz; éstos traducen los niveles de brillo a señales
electrónicas procesadas posteriormente para formar la imagen digital. Hay
otros sistemas usados por algunos escáneres, como pueden ser CIS (Sensor de
Imagen de Contacto) que permite dispositivos más manejables a costa del
sacrificio de la calidad, y PMT (Tubo FotoMultiplicador) que lee imágenes a
muy alta calidad.
- Tarjeta digitalizadora (Frame Grabber): a partir de la imagen analógica que le
llega por la entrada de vídeo, realiza un muestreo (25 fotogramas por segundo,
por ejemplo) y la convierte a digital.
40 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Entrada vídeo imagen digital


(analógica) tarjeta digital

c) Tratamiento: mediante el software del ordenador.


d) Visualización: utilizando dispositivos como el monitor, LCDs o impresoras. El
monitor es lo más habitual y consiste en un tubo de rayos catódicos que emite un
haz de electrones sobre una pantalla de fósforo y que tiene una serie de pantallas
reflectantes por las que pasa una tensión que va dirigiendo el haz de electrones; es
una tecnología analógica. En cuanto a los LCDs (dispositivos de crital líquido),
consiguen una alta resolución. El cristal líquido es una estructura cristalina que
tiene unas moléculas que cambian su orientación según se las someta a distintos
campos magnéticos. Tiene una fuente de luz y dos mallas que contienen el
líquido.
e) Almacenamiento: se pueden utilizar dispositivos magnéticos (disco duro,
disquetes, etc.), ópticos (cd, dvd, etc.), etc.

1.2. Captura digital.


Análogamente al caso anterior, se puede tener en cuenta la siguiente serie de pasos:
a) Dispositivos de captura:
- Cámara de fotos digital.
- Escáner 3D: tiene un palpador y realiza una lectura de un objeto en tres
dimensiones. Se utiliza en la fabricación de automóviles y en problemas de
modelado.
b) Digitalización: este paso no existe, ya que el dispositivo de captura obtiene una
imagen digital.
c) Tratamiento: mediante el software del ordenador.
d) Visualización: por pantalla, por LCD o por impresora, al igual que en el caso
analógico.
e) Almacenamiento: en dispositivos magnéticos como el disco duro, ópticos, etc.

1.3. CCD (Charge Coupled Devices).


Los CCD actúan como fotosensores dispuestos en forma de matriz, formando una
superficie de forma cuadrada o rectangular. La cantidad de carga acumulada en cada
fotosensor depende de la intensidad de la luz reflejada, la cual depende, en el caso del
escáner, por ejemplo, de la sombra de cada píxel del documento. La carga del sensor
genera un voltaje que recoge un conversor analógico-digital para convertirlo a un valor
digital.
Los CCD se utilizan por que:
- Son dispositivos extremadamente lineales y por lo tanto efectúan una
conversión directamente proporcional a la cantidad de carga acumulada.
- La relación señal/ruido es muy buena, por lo que la señal producida es limpia.
Una imagen en color está formada por la mezcla de los tres colores básicos: rojo, verde
y azul. Los CCD se construyen para dar respuesta a esta característica. En este caso, en
lugar de una fuente de luz hay tres fuentes de luz para determinar las intensidades de los
píxeles para el rojo, el verde y el azul.
RESOLUCIÓN 41

1.4. Restauración y Mejora.


El proceso de captura está determinado por una serie de factores como el ruido en los
sensores de captura, las imprecisiones en el enfoque de la cámara, perturbaciones
aleatorias, etc, que interesa que se corrijan antes de utilizar la imagen.
Las técnicas de restauración se utilizan cuando las imágenes están degradadas (con
ruido, pérdidas de definición y fidelidad en la imagen) y su objetivo es contrarrestar en
la medida de lo posible, las degradaciones a través del uso de filtros que busquen un
objetivo concreto. La efectividad del proceso depende del conocimiento disponible
acerca del mecanismo de degradación, lo que permite diseñar un modelo de sistema que
lo contrarreste. Para ello, se utilizan:
- Modelos de ruido: modifican localmente el valor de los píxeles que, por
observación, se infiera que han sido afectados por el ruido.
- Modelos de supermuestreo: muestrean por encima del régimen necesario.
Las técnicas de mejora, acentúan o realzan aquellas características que hacen a la
imagen más apropiada para su posterior presentación y análisis. No incrementan la
cantidad de información contenida en la imagen, sino que aumenta el rango dinámico de
las características buscadas en la misma (bordes, texturas, contrastes, brillos, etc.), de
forma que sean más fácilmente localizables y modificables.

2. DIGITALIZACIÓN.
2.1. Definición.
Es el proceso de muestreo mediante el cual, una imagen digital a[m,n] descrita en un
espacio discreto 2D se deriva a partir de una imagen analógica a(x,y) en un espacio
continuo 2D. La señal analógica puede tomar cualquier valor, ya que se trata de una
señal continua. Sin embargo una señal digital sólo puede tomar los valores 0 ó 1, ya que
es una señal discreta que solo toma un nivel. Para realizar esta conversión se necesita un
proceso de muestreo.
La imagen continua 2D a(x,y) se dividide en N filas y M columnas. A la intersección
de una fila y una columna se le llama píxel. El valor asignado a las coordenadas [m,n]
con {m=0,1,...,M-1} y {n=0,1,...,N-1} es a[m,n]. De hecho, en la mayoría de los casos
a(x,y) realmente es una función de muchas variables incluyendo profundidad (z), color
(λ) y tiempo (t).
Al transformar en digital la señal analógica, ésta puede aparecer acompañada de
ruido. Se llama así a las señales acopladas que no aportan información; es la típica señal
de niebla. En las señales digitales la relación de ésta con el ruido apenas las afecta.

2.2. Objetivo.
Transformación de una señal analógica (contínua) a una señal digital (discreta).

2.3. Tipos de resoluciones de un sensor.


Se podría definir la resolución de un sensor como su habilidad para registrar
información. A la hora de realizar un muestreo, se tienen que tener en cuenta los
siguientes aspectos:

2.3.1. Resolución espacial.


Es el objeto mas pequeño que puede ser distinguido sobre la imagen. Define el tamaño
del píxel, que es la distancia correspondiente al tamaño de la mínima unidad de
información en la imagen.
42 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2.3.2. Resolución de bit.


La profundidad del píxel o resolución de bits proporciona una medida del número de
bits de información que puede almacenar el píxel. Es decir, indica cuánta información
sobre el color puede proporcionar cada píxel de la imagen.
A mayor profundidad de píxel, habrá más colores y una representación más fiel de
los mismos y por tanto, de la imagen. Un píxel con profundidad 1 tiene dos valores
posibles: sí y no. Es lo que ocurre con las imágenes de mapa de bits o imágenes
bitonales donde cada píxel es negro o blanco. Tienen una profundidad de 1 bit pudiendo
representar, por lo tanto, dos tonos: 0 para el negro y 1 para el blanco. Un píxel con
profundidad 8 tiene 28=256 valores posibles, como ocurre con las imágenes en escala de
grises o color indexado (256 colores). Un píxel con profundidad 24 tiene
224=16 millones de valores posibles; son las imágenes en color real, representadas en
millones de colores.

2.3.3. Resolución temporal.


Es la periodicidad con que el sensor (cámara) adquiere imágenes, es decir, el número de
imágenes por segundo a la que se graba una secuencia de imágenes.
Si se graban muchas imágenes por segundo, como por ejemplo 4000 imágenes por
segundo, y los aparatos de reproducción son de 25 y 24 imágenes por segundo, en vídeo
y cine, respectivamente, se pueden hacer cámaras lentas sin pérdida de resolución. Esto
es así porque 4000/24 (en el caso del cine) da 166 segundos de reproducción de lo que
se grabó a 4000 imágenes por segundo. Si se hubiera grabado a la resolución normal, se
vería el mismo número de fotogramas en más tiempo lo que haría que se perdiera la
continuidad de las imágenes de la secuencia, notando la sucesión de fotogramas.
Si se graba con una cámara de vídeo y se hace un giro rápido, al reproducir se ve que
durante el giro la imagen está borrosa, por la velocidad del giro de la cámara. Esto se
debe a que las imágenes no tienen una resolución temporal adecuada. Es decir, si se
quiere que el movimiento sea fluido y a la vez que las imágenes que se obtienen al girar
la cámara o aquellas que están en movimiento estén totalmente nítidas, hay que
aumentar la resolución temporal (obtener más imágenes por segundo). Para que los
movimientos se vean nítidos hay que modificar la velocidad de obturación, lo que hace
que se pierda fluidez en el movimiento de grabación. Además, se necesita mucha luz.

2.3.4. Resolución espectral.


Es el número y el ancho de las bandas espectrales que puede discriminar el sensor. Los
satélites pueden clasificarse como monoespectrales para caso de los radares que
presentan solo una banda. Los multiespectrales, van de dos a varias bandas y los
hiperespectrales son capaces de obtener información simultánea de cientos de bandas.

2.3.5. Resolución óptica e interpolada.


La resolución óptica de una cámara o escáner es un número absoluto porque los píxeles
de un sensor de imagen o fotoelementos son dispositivos físicos que pueden contarse.
Para mejorar la resolución, se puede aumentar utilizando software. Este proceso,
llamado resolución interpolada , agrega píxeles a la imagen para aumentar el número
total de los mismos. Para hacer esto, el software evalúa aquellos píxeles que rodean
cada nuevo píxel para determinar de qué color debería ser el mismo. Por ejemplo, si
todos los píxeles recientemente insertados alrededor de un píxel son rojos, los nuevos
píxeles se harán rojos. Lo que es importante tener presente es que la resolución
interpolada no agrega nueva información a la imagen, sólo agrega píxeles y hace el
archivo más grande.
RESOLUCIÓN 43

2.4. Dimensiones.
En el caso de imágenes estáticas, la digitalización consta de tres dimensiones:
• Muestreo espacial: se realiza en ancho y alto y se decide cuántas muestras se
toman en una dimensión y en otra, sin tener por qué coincidir. A más cantidad
de píxeles, más calidad de imagen.
• Muestreo del color: se determina en cada píxel qué valor se le asigna. Además,
se cuantifica la intensidad, es decir, se decide cuántos colores se eligen para
representar cada píxel.

3. IMAGEN VERSUS GRÁFICOS.


Una imagen es una matriz de puntos bidimensional en la que cada punto (píxel de la
imagen) tiene asociada una profundidad de color (valor de gris) y una posición espacial.
Es decir, cada cuadrado que la forma tiene la información (posición, color).
Un gráfico consiste en una representación de un objeto utilizando un conjunto de
funciones que definen su forma y un conjunto de valores para sus elementos. Por
ejemplo, para dibujar un cuadrado, existiría una función que determine cómo es y
necesite unos parámetros, como el punto del vértice, el lado, etc.
Los metaformatos son una categoría híbrida que combina las ventajas de ambos.

3.1. Características de las imágenes.


Las imágenes en mapa bits o de trama se caracterizan por:
• Utilizan una cuadrícula o trama formada por pequeños cuadrados.
• Cada píxel de una bitmap tiene una posición determinada y un valor de color
asignado.
• Cuando se trabaja con bitmap para modificar un aspecto de la imagen hay
que modificar los valores que tienen los píxeles uno a uno o en grupos en
vez de los objetos o formas, esto es así porque el valor de cada píxel es
independiente del resto de píxeles que componen la imagen.
• Dependen de la resolución del dispositivo ya que representan un número fijo
de píxeles. Si se escalan en pantalla o se imprimen con una resolución mayor
que para la que se crearon, aparecerán bordes dentados y perderán detalle.
• Como puede representar graduaciones sutiles de sombras y colores,
constituyen el medio electrónico más común para las imágenes de tono
continuo, como fotografías e imágenes de programas de dibujo.
• Ejemplo: círculo.

3.2. Características de los gráficos.


• Están formados por objetos que el ordenador identifica mediante la
descripción matemática de primitivas, que son formas geométricas
fundamentales, como líneas y curvas. Entre estas primitivas hay otras más
complejas, y que son las que usan los programas de creación de gráficos 3D.
Éstas son las curvas Bezier, cuya curvatura es fácilmente manipulable por el
usuario.
• Se pueden realizar desplazamientos, redimensionamientos o cambios de
color sin pérdida de calidad.
• Las operaciones que se hacen sobre partes del gráfico, se realizan
seleccionando entidades del objeto y asignando nuevas propiedades.
44 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

• Son independientes de la resolución (no están definidos por un número fijo


de píxeles) escalándose automáticamente para aparecer precisos y nítidos en
cualquier dispositivo de salida y en cualquier resolución, ya que es el
algoritmo matemático el que redefine las nuevas coordenadas y el
computador vuelve a dibujarlo.
• Son la mejor opción para gráficos de texto (especialmente texto pequeño) y
en negrita, como logotipos, que requieren líneas nítidas y definidas que
puedan escalarse a varios tamaños. Además ocupan menos espacio.
• Su principal inconveniente es su falta de eficacia para representar imágenes
de tipo fotográfico.
• En el desarrollo de gráficos 3D, la creación, se basa en primitivas creadas
vectorialmente, aunque el resultado son imágenes bitmap.
• Ejemplo: círculo (basado en forma y tamaño).
• Programas: Autocad.

4. GRÁFICOS.
Los gráficos en 2D son aquellos que carecen de profundidad, o lo que es lo mismo, que
se representan en dos de los tres ejes espaciales.

4.1. Primitivas.
4.1.1. Puntos.
Los puntos son la primitiva 2D más básica de todas, ya que mediante la unión de estos
se forman todas las demás.
La pantalla es una matriz, compuesta por n*m celdas, y dibujar un punto es tan fácil
como asignar un valor a una de las celdas. Por ejemplo, si se tiene la pantalla en negro,
(por lo tanto todas las celdas contienen el valor 0 –negro-), dibujar un punto blanco es
modificar el valor de uno de esos puntos a blanco (255).
Este ejemplo, utilizando como dispositivo de salida la pantalla, es aplicable a
cualquier otro, ya que simplemente se trata de modificar un valor de intensidad en un
punto determinado.
Muchos lenguajes de programación, así como aplicaciones de diseño tienen una
instrucción que realiza este cambio de valor. Por ejemplo:
SetPixel (x, y, intensity)
Esta función (procedente de PASCAL) coge como parámetros las coordenadas del
punto que se va a modificar y el nuevo valor de intensidad que será introducido en
dichas coordenadas.
Estas funciones incluyen, en la actualidad, otros parámetros como color del punto,
grosor, etc. Para simular el grosor, lo que se hace es coger el punto dado por las
coordenadas, y rellenar, también, sus circundantes. Según sea la anchura introducida, así
será el número de puntos adyacentes a los que se cambiará el valor de intensidad.

4.1.2. Líneas.
Todos los algoritmos de creación de líneas necesitan el paso de, como mínimo, dos
parámetros: las coordenadas del punto de inicio y las coordenadas del punto final. El
trazado de líneas se efectúa mediante el cálculo de posiciones intermedias a lo largo de
una trayectoria de la línea entre dos posiciones extremas específicas.
Los dispositivos de salida van “dibujando” puntos intermedios para crear la línea. En
un monitor se rellenan los píxeles que corresponden a las posiciones intermedias entre
RESOLUCIÓN 45

el píxel de salida y el de llegada. Los algoritmos de trazado de líneas utilizan el


redondeo en casos como el siguiente:
Se quiere trazar una línea que va a ser representada en un monitor. Al aplicar el
algoritmo de trazado, salen coordenadas intermedias para cada píxel
intermedio, pero estas coordenadas podrían ser 28,5 y 45,4. Como la imagen en
el ordenador es como una matriz, y en cada celda (píxel) hay un valor
numérico, con los resultados anteriores no se puede operar, ya que no existe la
celda cuya fila sea 28,5 y columna 45,4. Entonces el algoritmo redondearía y
“pintaría“ la celda (29,45) aplicando el redondeo por exceso.
En los algoritmos más actuales se usa la interpolación.
Se han desarrollado múltiples algoritmos de trazado de líneas, unos más apropiados
para distintos dispositivos de salida que otros. Entre ellos, están los siguientes:
a) Algoritmo DDA: El analizador diferencial digital (DDA) es un algoritmo de línea
que se basa en el cálculo ya sea del incremento de χ ó del incremento de γ por
medio de las ecuaciones:
∆χ = ∆γ / m ó ∆γ = ∆χ . m
donde m es la pendiente de la recta.
b) Algoritmo de Bresenham: su principal atractivo es que puede ser implementado,
en su totalidad, por aritmética de enteros, la cual es mucho más rápida (en
términos de computación) que la que utiliza números en coma flotante. A esto se
le añade el hecho de que no hacen falta multiplicaciones ni divisiones y no se
necesita hacer operaciones de redondeo (se trabaja con enteros).
Los programas que trabajan con gráficos, de una manera u otra, utilizan algoritmos
similares para trazar líneas. Para ello, hay que pasarles como mínimo el punto de inicio
y el de fin. Si se trabaja en un entorno amigable como Windows, los programas
realizarán estas tareas internamente, interpretando las posiciones que se les de con el
ratón. En otros entornos, y en lenguajes de programación (gráfica o no), así como en
API´s (OpenGL), existen instrucciones a las que hay que pasar las coordenadas
anteriormente citadas. Por ejemplo:
DibujaLinea (Xinicial,Yinicial,Xfinal,Yfinal)
A lo largo del tiempo se le han añadido nuevos parámetros a estas funciones, como el
ancho de la línea, la transparencia, el color, etc.

4.1.3. Otras formas.


Para generar cualquier primitiva se usa una función, en la que está implementado uno de
los múltiples algoritmos que existen para la creación de primitivas 2D.
Se pueden crear otras muchas primitivas, como circunferencias -en cuyo caso habrá
que pasar a la función el radio de la misma-, elipses, curvas de diferentes tipos, etc.

4.1.4. Relleno de las primitivas.


Una vez que se tiene una primitiva cerrada, como puede ser una circunferencia, puede
que interese llenarla de color para conformar el círculo. Para ello hay varios métodos:
1.- El primer tipo de método es el que incluye el parámetro color dentro de la función
de generación. Dentro de este método se incluyen diversos algoritmos de rastreo,
entre los cuales está el siguiente para una circunferencia:
Se toma el centro de la circunferencia y se pinta del color elegido todos los
puntos que van desde el centro hasta una longitud igual a la del radio en todas
las direcciones del espacio 2D. El ejemplo visual de este sistema de rastreo
46 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

sería parecido al utilizado por un radar. La línea del radar va barriendo la


pantalla trazando un círculo, pues el algoritmo haría algo parecido, cuando
pasa la línea de rastreo deja tras de sí el color especificado.
2.- El segundo método es el empleado para cuando ya existe la figura, y lo que se
debe hacer el llenar de color su interior a posteriori.
Uno de los muchos planteamientos seguidos para conseguir esto es el de iniciar
desde una posición inicial determinada y pintar hacia fuera desde este punto hasta
encontrar las condiciones de frontera específicas.

4.1.5. Polígonos.
Los polígonos son uno de los elementos más importantes de la creación de gráficos por
ordenador, ya que son el puente de unión entre los gráficos 2D y los 3D. Un polígono es
una forma geométrica bidimensional cerrada que consta de lados (aristas) y vértices.
Un objeto gráfico tridimensional es un conjunto de polígonos de superficie que
encierran el interior del objeto. Muchos sistemas gráficos almacenan todas las
descripciones de objetos como conjuntos de polígonos de superficie. Esto facilita y
acelera la representación de superficie y el despliegue de objetos, ya que todas las
superficies se describen con ecuaciones lineales.
Una superficie de polígono se especifica con un conjunto de coordenadas de vértice y
parámetros de atributos asociados. Las tablas de datos de polígonos se pueden organizar
en dos grupos: tablas geométricas y tablas de atributo:
a) Tablas geométricas de datos: contienen las coordenadas de los vértices y los
parámetros para identificar la orientación espacial de las superficies del polígono.
b) Tablas de atributos: tablas similares a las anteriores pero que, en este caso,
almacenan los atributos del polígono tales como los que especifican el grado de
transparencia, características de reflectividad y textura.
Una organización conveniente para almacenar datos geométricos es crear tres listas: una
tabla de vértices, una tabla de aristas y una tabla de polígonos.
• En la tabla de vértices se almacenan las coordenadas de cada uno de los vértices
del objeto.
• La tabla de aristas contiene indicadores de la tabla de vértices para identificar los
vértices para cada arista del polígono.
• La tabla de polígonos contiene indicadores de la tabla de aristas para identificar
las aristas para cada polígono.
TABLA DE VÉRTICES
V1: x1, y1, z1
V2: x2, y2, z2
V3: x3, y3, z3
V4: x4, y4, z4
TABLA DE
V5: x5, y5, z5
SUPERFICIE DE
POLÍGONOS
TABLA DE ARISTAS S1: E1, E2, E3
E1: V1, V2 S2: E3, E4, E5, E6
E2: V2, V3
E3: V1, V3
E4: V3, V4
E5: V4, V5
E5: V1, V5
RESOLUCIÓN 47

Hay otras formas de organizar los datos, pero o son de acceso lento o bien ocupan
mucho más espacio en memoria. Por ejemplo, si se utiliza una sola tabla de polígonos,
se duplica la información sobre las coordenadas, ya que los valores explícitos de las
coordenadas se listan para cada vértice en cada polígono.

5. RESOLUCIÓN DE IMAGEN.
5.1. Definición.
Número de píxeles mostrados en la imagen por unidad de longitud (píxeles por pulgada
– ppi – o puntos por pulgada – dot per inch -).

5.2. Observaciones.
A igualdad de dimensiones, cuanto mayor sea la resolución, habrá más píxeles y más
pequeños. Según las características de una imagen y dónde se vaya a visualizar o
imprimir, se necesitará más resolución o menos.
Las dimensiones de píxel expresan las medidas (en píxeles) horizontales y verticales
de una imagen. Pueden obtenerse, si se conoce la resolución y el tamaño de la
ilustración, de una forma muy simple. Basta multiplicar el ancho o el alto por la
resolución para obtener la dimensión horizontal o vertical de una imagen. Cuanto mayor
sea la resolución, mayor espacio ocupará la imagen. Por ejemplo, para una imagen de
1x1 pulgadas, a 72 dpi tendrá 5184 píxeles, mientras que a 300 dpi, serán 90000 píxeles.
Las imágenes de alta resolución utilizan más píxeles para representar cada unidad de
área, normalmente reproducen más detalles y transiciones de color más sutiles que las
de baja resolución cuando se imprimen. Esto queda reflejado en la figura siguiente,
donde la imagen de la izquierda tiene una resolución de 72 ppi y la de la derecha, de
300 ppi.

Para mantener la calidad de reproducción, al cambiar el tamaño de una imagen, también


se tendrá que modificar su resolución, pero si una imagen se ha creado o capturado a
una resolución determinada, al incrementar la resolución no se suele mejorar la calidad
de la imagen al tener que extender la misma información de píxel a un número mayor de
píxeles.

5.3. Canal alfa.


El canal alfa es un valor independiente del color que se asigna a cada píxel de la imagen
cuando ésta se codifica en un formato de 32 bits. Se utiliza para definir el grado de
transparencia de cada punto de la imagen. Un valor 0 indica que el punto es totalmente
transparente. Si el valor es de 255, el punto será totalmente visible.
48 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

6. RESOLUCIÓN DEL MONITOR.


Si se quiere editar la imagen en un dispositivo de impresión, no importa la resolución
del monitor puesto que sólo afecta a la representación que ofrece de una imagen, pero
nunca a las propiedades que posee el archivo digital en el que se guarda la información
que la describe. Sin embargo, cuando el objeto de la edición digital es mostrarla a través
de un monitor, como ocurre con la edición web, sí es interesante conocer las
posibilidades representativas de este dispositivo.

6.1. Definición.
Es el número de puntos por pulgada (píxeles) que puede reproducir el monitor por
unidad de longitud. Un monitor estándar posee una resolución de 90 dpi. Esta
resolución determina el tamaño de la imagen en pantalla aunque no debe confundirse
nunca con la resolución propia de la imagen que refleja la cantidad de píxeles que
contiene.
Por ejemplo, una imagen que posea una resolución de 216 ppi se visualiza al triple de
su tamaño real en un monitor con una resolución de 72 dpi, debido a que sólo 72 de los
216 píxeles pueden mostrarse en cada pulgada del monitor

6.2. Traslación de imagen a monitor.


Muchos programas reproducen directamente los píxeles de la imagen a píxeles del
monitor, lo que significa que si la resolución de una imagen es mayor que la del
monitor, la imagen aparecerá más grande en pantalla.

Por ejemplo, una imagen de 640x480 píxeles, llenaría toda la pantalla de un monitor
que tuviera de dimensiones de la pantalla 640x480, independientemente del número de
pulgadas; éstas sólo influirían en el tamaño del píxel, que sería mayor cuantas más
pulgadas tenga el monitor. Sin embargo, si las dimensiones son mayores (832x624 ó
1024x768, por ejemplo), la imagen se limitaría a su tamaño 640x480, dejando espacio
libre en la pantalla.
Puede ocurrir que la tarjeta de vídeo permita, al igual que el monitor, una resolución,
pero que no tenga memoria suficiente y, en ese caso, representará menos colores.

6.3. Tamaño de punto.


Los tamaños típicos son de 96 dpi en PC y de 72 dpi en Macintosh.
Por ejemplo, si se tiene un monitor con tamaño de punto de 0,26 mm (1 pulgada =
25,4mm). Se calcula el número de puntos que hay en 1 pulgada:
1punto/0,26 mm x 25,4mm/1pulgada = 97,69 puntos (píxeles)/pulgada
Para visualizar imágenes en dicho monitor, si tienen más resolucion que 100 dpi, se
desperdiciará espacio, ya que en el monitor no se podrá ver.
RESOLUCIÓN 49

6.4. Ejemplos.
Dada una imagen de 1 x 1 pulgadas y 190 dpi que se visualiza en un monitor de 95 ppi,
en pantalla aparecerá un área de 2 x 2 pulgadas.

7. CUANTIFICACIÓN DEL COLOR.


7.1. Aplicación.
Se aplica cuando se reduce la información de color de una imagen. El caso más común
es cuando se transforma una imagen de 24 bits a una de 8 bits.

7.2. Decisiones.
Hay que tomar dos decisiones:
- Qué colores se conservan.
- Cómo se representan los colores eliminados con los que se mantienen.

7.3. Técnicas.
Si una determinada imagen utiliza un determinado número de colores, por ejemplo, 40.
Si se quiere reducir el tamaño de su archivo, se podrían definir los 40 colores utilizando
una paleta de color (conjunto de colores que se utilizan en una imagen) y guardando los
puntos de la imagen con una profundidad de 8 bits (28). Si el número de colores es
mayor que el del dispositivo, se utiliza el dithering o punteado para calcular la
proporción con que se deben mezclar los colores para obtener otros.

8. DITHERING.
8.1. Definiciones.
Es una técnica para visualizar imágenes, útil para solventar las limitaciones de los
dispositivos de visualización para representar los colores. El término dither hace
referencia a una perturbación de los valores de píxel aleatoria o semialeatoria.
Para obtener una determinada tonalidad de color se utilizan varios puntos que tienen
un color muy próximo al que se desea conseguir. Cuando se observa la imagen desde
una distancia, el color de los puntos adyacentes se mezcla, dando lugar a la ilusión de
nuevas tonalidades de color.

8.2. Aplicaciones.
Visualización de baja cuantificación (pocos niveles de iluminación): hay que
cuantificar imágenes con pocos bits (por ejemplo, 3), con lo que hay un número
limitado de niveles de gris para visualizar la imagen.
Una escena original suavemente sombreada (cambios suaves) implica una
visualización con cambios bruscos, ya que hay pocos colores y la imagen es muy
parecida.
Para eliminar el efecto, el dithering añade ruido aleatorio (con un pequeño rango de
valores) a la señal de entrada antes de la cuantificación en el rango de salida. La
visualización de salida cuantificada tiene un perfil en escalera (cambios discretos
más pequeños causan una apariencia menos brusca, ya que confunde al ojo humano).
Visualización de color limitada: cuando se pueden visualizar pocos colores (por
ejemplo, 256) de los que aparecen en la imagen original (por ejemplo, 24 bit = 16
millones), se usan tramas formadas por un grupo de píxeles para simular la
apariencia de los colores no disponibles. Esto ocurre, por ejemplo en las impresoras,
50 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

donde no se puede imprimir toda la resolución que se tiene. De esta forma se podrían
conseguir tonos grises a partir de puntos blancos y negros.
Se utilizan dos técnicas principalmente, que restringen el número de colores
visualizados a 256:
- asignar 3 bits al rojo, otros 3 al verde y 2 bits al azul, ya que la sensibilidad del
ojo es menor a este color. Se obtienen 8 sombras diferentes de rojo y verde y 4
de azul. Produce resultados pobres.
- usando una paleta o mapa de colores. Se puede asignar un color arbitrario a
cada uno de los 256 valorse, pudiendo definir por separado un mapa de color
para cada imagen. Es la más utilizada.

9. RESOLUCIÓN DE IMPRESORA.
9.1. Definiciones.
El número de puntos por pulgada (dpi) es normalmente proporcional, pero no la misma,
a la resolución de imagen (número de píxeles que componen la imagen).

9.2. Resoluciones.
La lineatura de trama o resolución de trama se refiere al número de celdas de semitono
por pulgada usadas para imprimir una imagen en escala de grises o separación de color.
Suele medirse en líneas por pulgada (lpi) y afecta fundamentalmente, junto con la
resolución, a la calidad de detalle en una imagen impresa. Es la medida real de la
resolución de la impresora. De esta forma consigue el resto de colores a partir del cian,
magenta, amarillo y negro.
Muchas impresoras comerciales y de escritorio utilizan tramas de semitonos que
están compuestas por puntos de impresora llamados celdas de semitonos, utilizados para
imprimir imágenes de escala de grises y separaciones de color. La relación entre
resolución de imagen y lineatura determina la calidad de detalle de la imagen impresa.
Una imagen de semitonos de buena calidad es aquella con resolución de imagen de 1,5 a
2 veces la lineatura.
Los puntos de la trama de semitonos (producen un aspecto de tono continuo):
• Se crean durante el proceso de impresión cuando se aplica una trama de
semitonos a la imagen.
• Controlan la cantidad de tinta que se deposita en sitios determinados.
• Variando su tamaño y densidad, se crea la ilusión óptica de variaciones de gris
o de color continuo en la imagen.
• Para las imágenes de semitono: CMAN (una para cada tinta)

9.3. Calidad de impresión.


Hay que tener en cuenta la calidad máxima de impresión, ya que es inútil trabajar con
mayor resolución de lo que permita la impresora que se va a utilizar. Las impresoras
utilizan diferentes resoluciones, generalmente entre 300ppp y 600ppp (impresoras
láser). En la filmación fotográfica, se suelen emplear imágenes de 800 a 1500 dpp y
mayores. Para trabajos profesionales de impresión se necesita conocer la lineatura de
impresión –en imprenta, la medida más usual es la de líneas por pulgada (lpp o lpi)-. La
resolución de una imagen se corresponde con la lineatura de impresión en una escala de
2:1; por tanto, para imprimir a 150 lpp, se debe trabajar con imágenes al doble, es decir,
a 300ppp.
RESOLUCIÓN 51

La mayoría de las impresoras tienen resoluciones de salida de 300 a 600 dpi. Las
máquinas de composición tipográfica de alta calidad pueden imprimir a 1200 dpi, 2400
dpi, o más.

10. RESOLUCIÓN DE CÁMARAS DIGITALES.


10.1. Fundamento.
Al hacer una foto, se abre el obturador y se expone el CCD a la luz, que se convierte en
una carga (voltaje) en el CCD. El obturador se cierra bloqueando la entrada de luz y la
carga se transfiere a la salida del CCD conviertiéndose en una señal. La señal se
digitaliza y se almacenada en memoria. La imagen capturada se procesa y se presenta en
la pantalla.

10.2. Tipos de sensores de imagen.


Hasta hace poco, los dispositivos de carga acoplada (CCDs) era los únicos sensores de
imagen utilizados en cámaras digitales. Éstos se han desarrollado bien a través de su uso
en telescopios astronómicos, escáneres, etc. Sin embargo, ha aparecido otro tipo de
sensor de imagen: CMOS (Semiconductor de Óxido de Metal Complementario), que
tiene un bajo costo y permite diseños de cámaras pequeños.

10.3. Resolución del sensor de imagen.


Como se ha visto, la resolución de la imagen es una manera de expresar lo definida o
detallada que es una imágenes. Las cámaras de menor tecnología tienen resoluciones
actualmente alrededor de 640 x 480 píxeles (a veces llamada resolución VGA), aunque
este número constantemente se está incrementando. Las cámaras con un millón o más
de píxeles se llaman cámaras megapíxel y aquéllas cámaras con más de dos millones se
llaman cámaras multi-megapíxel . Las cámaras digitales profesionales más caras son de
aproximadamente 6 millones de píxeles. Aunque estas resoluciones no igualan los
estimados 20 millones o más de píxeles en la cámara tradicional de película de 35 mm y
los 120 millones del ojo.
Las cámaras de fotografía tradicionales hacen negativos de los cuales después se
pueden hacer copias en cualquier tamaño. Las cámaras digitales, en cambio, ya hacen
las fotografías a un tamaño determinado. Tamaños habituales son: 640x480, 1024x768,
1600x1200, 2274x1704, etc. Una foto de tamaño 640x480, por ejemplo, es una foto de
640 píxels de ancho por 480 píxels de alto. Pero el tamaño "real" de la foto, es decir, la
medida en centímetros, depende de la resolución. Se calcula dividiendo el tamaño en
píxeles de la foto entre la resolución. Es decir, dada una fotografía de 640x480 píxeles,
si se hace con una resolución de 72ppp, al dividir queda:
640/72 = 8,888 pulgadas = 22,22 cm
480/72 = 6,666 pulgadas = 16,66 cm
Dicha resolución es apta para ver la foto en pantalla (72ppp), pero si se imprime no se
verá nítida porque el estándar para imprimir es una resolución de 300 ppp.
Siguiendo con el ejemplo, con 640x480 píxeles y 300 ppp, la imagen tiene un
tamaño de 5,33x4 centímetros. Si se quiere un tamaño de 13x10 a una resolución de
300ppp, se deberán hacer las fotos a 1600x1200 píxeles. De todo ello se deduce que
antes de hacer una fotografía digital, se ha de saber a qué tamaño se va a imprimir y
elegir, en la cámara, el tamaño en píxeles adecuado.
TEMA 5. DOMINIO DE LA FRECUENCIA
1. ONDAS PERIÓDICAS.
1.1. Función periódica.
Se dice que una función es periódica si está definida para todo x ∈ ℜ y si existe un
T > 0 tal que f (x + T) = f (x)

1.2. Formas de onda.


Aspecto que presenta la onda. Algunos ejemplos son:
a) Senoidal b) Triangular
v v

Vp Vp

t t

T T

v v

Vp Vp

t t

T T

c) Diente de sierra d) Media Onda


54 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

1.3. Características.
Los parámetros que definen a una onda son:
- Longitud de onda (λ): distancia entre dos puntos cualesquiera de la onda que
se comportan idénticamente.
- Periodo (T): tiempo que tarda una onda en recorrer una distancia de una
longitud de onda.
- Amplitud (Vp): valor máximo que alcanza.
- Velocidad de la onda: v = λ / T
- Frecuencia: número de longitudes de onda en cada segundo: f = 1 / T
- Velocidad angular: ω = 2π / T ω = 2πf

1.4. Frecuencias.
a) Frecuencia cotidiana: Tenemos tres camioneros que realizan el mismo viaje,
León-Madrid, de ida y vuelta con distinta frecuencia en una semana.
Si el primero de ellos realiza solo un viaje a la semana de ida y vuelta, el
segundo tres viajes de ida y vuelta, y el último 5 viajes de ida y vuelta, ¿cuál
de ellos viaja con mayor frecuencia?
b) Ondas: dependiendo del número de cambios en el tiempo tendrán mucha o
poca frecuencia.
c) Perfil de intensidad: indica cómo varía el nivel de gris de los píxeles a través
de la distancia. Si la frecuencia aumenta, el número de cambios por unidad
de longitud aumentan.

2. ONDAS ARMÓNICAS.
2.1. Descomposición de una onda periódica.
Cualquier onda periódica puede descomponerse en un número finito de ondas
senoidales de relación armónica.

2.2. Diente de sierra.


Por ejemplo, dada una onda periódica de tipo diente de sierra, se puede descomponer en
un conjunto de ondas con distintas frecuencias:

c.c.
ONDA PERIÓDICA
f1 = 500 Hz

f2 = 1000 Hz
2 ms
f3 = 1500 Hz

fn = n(500 Hz)

2.3. Relación armónica.


La relación armónica viene dada por el periodo. Cada una de las sucesivas ondas en las
que se descompone va doblando la frecuencia. Además de variar la frecuencia se
produce un desfase de manera que su superposición produce la señal original.
DOMINIO DE LA FRECUENCIA 55

Frecuencia de la onda fundamental = 1 / T


Frecuencia de la segunda onda armónica: f2= 2 f1
Frecuencia de la tercera onda armónica: f3= 3 f1, etc.

2.4. Onda cuadrada.


Dada una onda cuadrada, se descompone en un número finito de ondas senoidales de
relación armónica:
V(t) = V0 + V1 · sen(ωt + φ1) + V2 · sen(2ωt + φ2) + … + Vn · sen(nωt + φn)
siendo V0 la amplitud del primer armónico (valor de la componente contínua), Vi la
amplitud de la onda i-ésima y φi el desplazamiento de la onda i-ésima, ya que no tienen
por qué comenzar todas en el origen de coordenadas.
En teoría, n = ∞. En la práctica es suficiente con un valor para n de 5 ó 10 y distintos
desfases, ya que los primeros armónicos contienen la mayor parte de la información.

3. ESPECTRO DE UNA SEÑAL.


3.1. Definición en el Dominio de la frecuencia.
El dominio de la frecuencia es un espacio en el cual cada valor de la imagen para la
posición F, representa la variación (en cantidad) del valor de la intensidad en la imagen
I para una determinada distancia relacionada con F.
El espectro de una señal es la distribución ordenada producida por el análisis de las
características de un fenómeno complejo. En el dominio de la frecuencia, es la
distribución de los valores de pico (amplitud) de los armónicos en función de la
frecuencia a la que éstos se producen.

3.2. Análisis de una señal.


Se puede realizar de dos formas:
a) Directo: hay que determinar lo que hace la onda periódica en cada instante
(tiempo).
b) Indirecto: hay que descomponer una onda en sus componentes senoidales y
analizar dichas componentes –armónicos-.
56 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

3.3. Componentes espectrales: Espectro de una onda.


El espectro de una onda está formado por el conjunto de líneas verticales que
representan la amplitud de los armónicos.
Para una onda de tipo diente de sierra, el valor de pico del n-ésimo armónico viene
dado por: Vn = A / (n* π)
Por ejemplo, si la amplitud de una señal (A) es 100, las amplitudes de sus tres
primeros armónicos serían:
V1= 100/1·π = 31,8
V2= 100/2·π = 15,9
V3= 100/3·π = 10,6

4. SERIES Y TRANSFORMADA DE FOURIER.


4.1. Dominio de la frecuencia.
La imagen en el dominio del espacio se representa como f(x,y) y en el dominio de la
frecuencia F(u,v), es una nueva representación. Es el espacio en el cual cada valor de la
imagen para la posición F representa la variación (en cantidad) del valor de la
intensidad en la imagen f para una determinada distancia.
El valor de F(u,v) depende de cómo haya variado la intensidad en el dominio del
espacio.

4.2. Series.
El Teorema de Fourier permite descomponer las señales periódicas en series de senos y
cosenos.
Sea y(t) cualquier función periódica en el tiempo con periodo T tal que y(t) = y(t+T)
esta función puede escribirse de la siguiente manera
y(t) = ∑ (An * sen(2πfnt)+ Bn * cos(2πfnt))
n
donde la frecuencia más baja es f1 = 1/T, fN es la frecuencia fundamental, y AN y BN son
las amplitudes de las diferentes ondas (valores de pico).
Una señal periódica puede ser suma de varias señales en función del seno y el
coseno. Si es continua tiene función inversa.

4.3. Transformada de Fourier.


La transformada de Fourier permite realizar una descomposición de señales periódicas y
no periódicas en series de senos y cosenos. Se diferencia de las series de Fourier en que
éstas sirven sólo para transformar señales periódicas.
Dada una función f(x,y), su transformada de Fourier directa es:

F(ω) = F{f (x)} = ∫ f ( x) ∗ e− j 2πωx dx
−∞
donde
e− j 2πωx = cos(2πωx) – j·sen(2πωx) es el kernel de la transformada.
j = −1
Interpretando la integral de F(ω) como el límite de una suma de términos discretos,
resulta evidente que F(ω) se compone de una suma infinita de téminos en seno y coseno,
y que cada valor de ω determina la frecuencia de su correspondiente par seno-coseno.
DOMINIO DE LA FRECUENCIA 57


F-1{F(ω)} = f(x) = ∫ F (ω ) ∗ e j2πωx dω es la transformada inversa
−∞

Usando la identidad de Euler (ejx = cos(x) + j sen(x)), se puede descomponer la integral


vista en: F (ω) = R (ω) + j * I ( ω) siendo:

R (ω) = ∫ f ( x) * cos(2πωx)dx (parte real)
−∞

I (ω) = − ∫ f ( x) * sen(2πωx)dx (parte imaginaria)
−∞
Si es una función par sobre x entonces verificará que R(ω) ≠ 0 e I (ω) = 0
Al representar F(ω) como un número complejo, se podrá escribir en términos de
magnitud y fase o argumento:
|F(ω)|= R(ω )2 + I (ω )2 llamado espectro de Fourier
Φ(ω) = arctg (I(ω) / R(ω))
El módulo o espectro da los valores de las amplitudes de las señales y las fases
determinan cuán pronto o tarde (el desfase) empiezan esas ondas.

4.4. Transformada de Fourier bidimensional.


En el caso unidimensional, dada una señal en el dominio del tiempo, la frecuencia son
los ciclos por segundo.
En el caso bimensional, la frecuencia espacial se mide en número de ciclos en una
distancia (ciclos/mm) y se relaciona con el tamaño de los objetos y la correlación entre
píxeles. A menor frecuencia espacial, los objetos serán más grandes y la correlación
será mayor.
a) b)

La figura b) muestra el espectro como una función de la intensidad, donde el brillo es


proporcional a la amplitud de F(u,v).
58 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB
TEMA 6. IMÁGENES HDRI
1. INTRODUCCIÓN.
En una escena creada en un programa 3D están los objetos tridimensionales, las
cámaras, los sistemas de partículas, etc. Para que estos elementos se puedan ver es
necesaria la adición de fuentes de luz (omnidireccionales, focales, de área, etc).
Gracias a las imágenes HDRI (Imágenes de Alto Rango Dinámico) y a los algoritmos
de radiosidad, se puede iluminar una escena 3D de forma hiperrealista sin necesidad de
colocar las fuentes de luz, ya que es la propia imagen HDRI la que ilumina la escena.

2. RADIOSIDAD.
En un programa 3D se llaman algoritmos de radiosidad a aquellos que permiten simular
los rebotes de la luz en las superficies de los objetos contra los que inciden los rayos.
Dependiendo del material del objeto contra el que incide la luz, ciertos rayos son
absorbidos y otros son rebotados, pero con un cambio de color en algunos casos y en
ángulos distintos dependiendo del objeto. Estos cálculos son costosos y por eso existen
parámetros para indicar al algoritmo el número de rebotes y la calidad de la simulación.
La radiosidad se calcula normalmente almacenando la información del sombreado
para cada vértice de los objetos poligonales de la escena. En la imagen siguiente se
puede ver como se subdivide una escena para el cálculo de la radiosidad. Hay más
vértices en las zonas donde se necesita más detalle.
60 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Por supuesto que hay otras aproximaciones para el cálculo de la radiosidad como los
mapas de fotones, que es una solución más efectiva. En este mundo aún no se ha
encontrado el algoritmo definitivo.

3. HDRI.
El acrónimo HDRI significa imágenes de alto rango dinámico. Como ya se ha visto,
normalmente se trabaja con imágenes de 24 o 32 bits. Todas ellas se llaman imágenes
de bajo rango dinámico (LDRI) y cuentan con 8 bits por canal.
Las imágenes HDRI pueden contener más de 24 bits. No sólo pueden almacenar
valores en punto flotante (fracciones), sino que valores por canal como el 876,94 son
totalmente legales.
Estas imágenes contienen valores de brillo que el ojo no es capaz de distinguir. De la
misma forma, en las zonas oscuras puede haber mucha información de importancia que
los ojos no ven, pero que estas imágenes almacenan.
Una imagen HDRI en comparación con otra puede parecer igual, pero si se aumenta
el brillo a ambas, la HDRI mantiene la calidad y el detalle en muchas zonas, incluidas
las oscuras, donde se descubren detallen que antes no se veían. Mientras, por otro lado,
en la imagen normal aumentada de brillo se ve que en las zonas de gran luminosidad se
ha perdido detalle y las zonas oscuras se han aclarado, pero no se distingue ninguna
forma ni figura.
Aunque la diferencia es mucho más apreciable cuando se baja el brillo; en ese caso,
las imágenes LDRI son casi negras, mientras la HDRI tienen zonas oscuras casi negras,
pero hay otras (de las que suele provenir la luz, como ventanas, lámparas, etc.) que
brillan con mucha intensidad.
Si se aplica a la imagen un motion blur (borrosidad de movimiento), las imágenes
LDRI se verán como diluidas, mientras que en las HDRI se pueden apreciar zonas con
mucho brillo (de nuevo correspondientes a las fuentes de luz).
En las imágenes mostradas a continuación se pueden ver por orden los procesos antes
mencionados.
LDRI HDRI
IMÁGENES HDRI 61

4. ILUMINACIÓN CON HDRI EN 3D.


Ahora que se han explicado a groso modo los conceptos de radiosidad y HDRI, a
continuación se muestra cómo estas imágenes pueden iluminar una escena.
62 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

En un programa 3D se coloca como fondo la imagen HDRI o en una cúpula


rodeando a la escena y se eliminan las luces. Al activar la radiosidad, los rayos que
rebotan en la imagen son enviados hacia la escena, pero dichos rayos, al haber rebotado
en la HDRI ahora contienen la información sobre la cantidad y tipo de luz que debe
iluminar el objeto.
En la siguiente imagen se puede apreciar una escena 3D iluminada con radiosidad y
HDRI, sin utilizar ninguna fuente de luz.

5. CREACIÓN DE IMÁGENES HDRI.


Básicamente una imagen HDRI se obtiene al fotografiar una escena con diferentes
exposiciones de cámara (con 8 suelen ser suficientes). Dichas fotos se introducen en un
programa que, aplicando unos algoritmos especiales, devuelve la imagen HDRI.
Para conseguir imágenes HDRI preparadas para programas 3D, en los que es
necesario fotografiar el entorno completo, se utilizan bolas de metal reflectante. Dichas
bolas se colocan en medio del entorno y se fotografían, obteniendo así una foto esférica
del mundo que rodea a la bola. Hay que tener en cuenta que habrá que eliminar el
reflejo de la propia cámara de fotos si ésta aparece.
TEMA 7. RELACIONES BÁSICAS ENTRE PÍXELES
1. NOTACIÓN.
Se considera una imagen como una función f(x,y), que a cada punto de coordenadas
(x,y) le asocia un nivel de intensidad. El origen de coordenadas de una imagen se
establece en la esquina superior izquierda.
Cada parte de una imagen (subconjunto) se denota por S1, S2,..., Sn.
Los píxeles se representan con minúsculas: p( x, y); r (x, y).

2. VECINDAD.
Por definición, hay tres tipos de vecindad:
• Horizontal: un píxel de coordenadas x e y [p (x, y)] tiene dos componentes
horizontales que tendrán por coordenadas q (x-1, y) y r (x+1, y).

(x-1,y) (x,y) (x+1,y)

• Vertical: un píxel p (x, y) tiene dos vecinos verticales, que tendrán pos
coordenadas q (x, y-1) y r (x, y+1).

(x,y-1)

(x,y)

(x,y+1)

• Diagonal: un píxel p (x, y) tiene cuatro vecionos diagonales, que tendrán por
coordenadas p (x-1, y-1), q (x+1, y-1), r (x-1, y+1) y u(x+1, y-1).
64 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

(x-1,y-1) (x+1,y-1)

(x,y)

(x-1,y+1) (x+1,y+1)

3. CONTORNO.
Atendiendo a los criterios de vecindad, se definen tres tipos de contornos de un píxel:
• Contorno de orden 4 (N4(p)): estará formado por los vecinos horizontales y
verticales.

• Contorno de orden 4 diagonal (ND (p)): formado por los cuatro vecinos
diagonales.

• Contorno de orden 8: está formado por todos los píxeles que le rodean,
es decir:
N4 (p) + ND (p) = N8(p)

4. MEDIDAS DE DISTANCIA.
En función de la distancia entre dos píxles, se puede decidir si pertenecen al mismo
objeto. Cada píxel se representa mediante un vector de i elementos. La definición
genérica de las distancias lineales es la siguiente: dados dos vectores, D1 y D2, n-
dimensionales, se define la familia LP como:
LP (D1, D2) = [ ∑ | d1i – d2i |P ] 1/P
Para dos píxeles (q (x, y), r (s, t)) se tiene:
p=1 L1 (q, r) = | x – s | + | y – t | [ Cityblock o Manhattan]
p=2 Le (q, r) = ( x − s )2 + ( y − t )2 [ Distancia Euclides]
p=∞ L∞ (q, r) = max { | x – s|, | y – t | } [ Mayor distancia a una
dirección dada. Chessboard]

5. CONECTIVIDAD.
Consiste en determinar relaciones entre los píxeles de forma que se pueda establecer
límites a las regiones. Existen diferentes criterios que permiten aplicarse de manera
independiente o combinados.

5.1. Utilidad.
Se utiliza para determinar límites en una imagen y para encontrar los componentes de
las áreas.
COMPRESIÓN 65

5.2. Criterios generales.


Son o bien criterios de proximidad (distancia) o bien criterios de similitud en el nivel de
gris.

5.3. Definiciones.
Los valores de gris de los píxeles han de pertenecer a V.
a) Concepto V: es un conjunto formado por los niveles de gris de la imagen,
normalmente correlativos. En caso de las imágenes en blanco y negro se reduce a
V= {1} ó V = {0}. En niveles de gris, será un rango de valores, por ejemplo
V = {34, ..., 48}.
b) Tipos de conectividad:
4-conectividad: se dice que dos píxeles, p y q, con niveles de gris contenidos en
V (⊂ V) son 4-conexos si q ∈ N4 (p).
8-conectividad: se dice que dos píxeles, p y q, con niveles de gris contenidos en
V (⊂ V) son 8-conexos si q ∈ N8 (p).
m-conectividad o conectividad mixta: se dice que dos píxeles, p y q, con niveles
de gris contenidos en V (⊂ V) son m-conexos si:
i) o bien q ∈ N4 (p).
ii) o bien q ∈ ND (p) ∧ [ N4 (p) ∩ N4 (q) ] = ∅.

6. ADYACENCIA.
6.1. Píxeles adyacentes.
Dos píxeles p y q son adyacentes si presentan algún tipo de relación por conectividad.

6.2. Tipos de adyacencias.


Según el tipo de conectividad que exista entre los píxeles, habrá 4-adyacencia, 8-
adyacencia, m-adyacencia.

6.3. Subconjuntos adyacentes.


Se dice que dos subconjuntos de la imagen S1 y S2 son adyacentes si existe un píxel
p ∈ S1 tal que sea adyacente a otro píxel q ∈ S2.

6.4. Caminos de p(x, y) a q(s, t).


Una camino entre un píxel p de coordenadas (x,y) y un píxel q de coordenadas (s,t)
viene definido por una sucesión de píxeles (x0, y0), (x1, y1),... , (xn, yn) donde se cumple
que:
(x0, y0) ≡ (x, y) son las coordenadas del píxel p
(xn, yn) ≡ ( s, t) son las coordenadas del píxel q
(xi, yi) es adyacente a (x i-1, y i-1) donde 1≤ i ≤ n ; siendo n la longitud del camino.

6.5. Píxeles conectados.


Dos píxeles p y q ∈ S están conectados dentro de un subconjunto S si existe un camino
de p a q formado únicamente por píxeles que pertenecen a S.

6.6. Componente conexa.


Para todo píxel p de un subconjunto S, se denomina componente conexa de S al
conjunto de píxeles de S conectados a p.
66 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Como consecuencia de esto, todo par de píxeles que pertenecen a una componente
conexa están conectados. Además componentes conexa distintas son disjuntas.
II. PREPROCESAMIENTO
TEMA 8. ETAPAS FUNDAMENTALES DEL
PROCESAMIENTO AUTOMÁ TICO DE IMÁ GENES
Los pasos principales que tiene que seguir un sistema de captación de imágenes para
obtener la imagen y luego poder interpretarla, se resumen en el siguiente esquema:

Preprocesamiento Segmentación Representación y


descripción

Reconocimiento
Adquisición Base de conocimiento
e Interpretación

1. OBJETIVO.
El procesamiento automático de imágenes tiene como objetivo realizar tareas basadas
en la visión, autónomamente.

2. ADQUISICIÓN.
La adquisición se podrá realizar mediante un dispositivo analógico o digital, con una
cámara de video o fotográfica.
El video digital hace un mapa de la imagen que le llega en función de la intensidad.
Si el dispositivo es analógico se tendrá que digitalizar bien con un scanner o con una
tarjeta (frame grabber).

3. PREPROCESAMIENTO.
Son operaciones para preparar la imagen, para ello se utilizan técnicas: mejora,
restauración o descompresión (compresión).
70 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Técnicas de mejora: histograma, punto o filtros. Si una imagen se presentara con


ruido se le pasa un filtro de paso bajo.
Técnicas de restauración: a partir del conocimiento del proceso de formación de la
imagen se pretende obtener la imagen sin deformación alguna. Esto ocurre cuando
una cámara tiene mal la lente e introduce distorsiones.

4. SEGMENTACIÓN.
Antes de aplicar ninguna técnica se deben obtener las regiones que componen la
imagen, asignándole a cada una de ellas una etiqueta. Una región estará formada por
píxeles de la imagen con características similares (niveles de gris parecidos) y que estén
próximos.
Hay dos tipos de técnicas de segmentación:
- las que se basan en las diferencias entre niveles de grises: detectan la
discontinuidad en los niveles de gris utilizando métodos de detección de
puntos, líneas, bordes, etc., mediante filtros Sobel, Prewitt, Laplaciano, etc.
- las que se basan en las similitudes entre niveles de grises: cuando hay gran
similitud en el nivel de gris se utiliza la umbralización, la división y fusión
de regiones, el crecimiento de regiones por agregación de píxeles, etc.

5. REPRESENTACIÓN.
Una vez que la segmentación ha distribuído los píxeles de la imagen en regiones
etiquetadas, se obtiene una representación de dichas regiones, codificando esa
información para que ocupe menos espacio.
- Al contorno de la imagen se le aplican las siguientes técnicas:
o Códigos de cadena.
o Lados del contorno.
o Representaciones poligonales.
o Firmas.
o Esqueleto.
- A la región interna de la imagen:
o Topológicas.
o Ejes.
o Área.

6. DESCRIPCIÓN.
Se obtiene un “descriptor” del objeto. Algunas técnicas para estos descriptores son:
- Longitud del contorno: consiste en almacenar únicamente el punto
inicial_final.
- Número de forma.
- Descriptores de Fourier.

7. RECONOCIMIENTO.
El objetivo de esta etapa es identificar el patrón, es decir, identificar el objeto que
representa.
Las técnicas utilizadas son, entre otras:
- Distancias.
ETAPAS FUNDAMENTALES DEL PROCESAMIENTO AUTOMÁTICO DE IMÁGENES 71

- Correspondencias de cadena.
- Estadísticas.
- Redes neuronales.

8. INTERPRETACIÓN.
Se identifica la escena (en su conjunto, con todos los objetos individuales que la etapa
de reconocimiento ha identificado previamente) mediante técnicas como:
- I.A: Sistemas expertos.
- Sistema de producción.
- Redes semánticas.

9. BASE DE CONOCIMIENTO.
Todas las etapas pueden tener relación con la base del conocimiento (flecha doble);
cada etapa puede tener información en la base de conocimiento o también puede
almacenarla para posteriores etapas. Su misión es interrelacionarse con todas las etapas,
permitiendo ir de una etapa a la anterior o a la siguiente, y almacenar información.

10. EJEMPLO PARA OCR (RECONOCIMIENTO ÓPTICO DE CARACTERES).


Dados los caracteres: L, E, F. Se siguen las etapas del procesamiento de imágenes:
Adquisición: Escaneado.
Preprocesado: Binarización.
Eliminación de ruido.
Segmentación: Umbralización.
Representación: Trazos de la letra.
Descripción: Relación ancho-alto.
Longitud perímetro.
Número de huecos.
Existencia del trazo inferior, medio o superior.
Reconocimiento

Longitud perímetro Huecos Inferior Medio Superior

L 32 1 1 0 0
E 47 2 1 1 1
F 41 2 0 1 1
TEMA 9. OPERACIONES DE PUNTO
1. CONCEPTOS.
Las operaciones de punto son operaciones de memoria cero (ZMO), es decir, dada una
imagen almacenada en memoria, no necesitan de un espacio adicional para realizar la
transformación de la imagen.
Las operaciones de píxel tienen como requisito conocer en cada paso el valor de la
luminancia del píxel al que se le aplica la transformación. Una vez que se ha realizado
la transformación de un valor de luminancia, éste no vuelve a ser necesario en todo el
algoritmo, por eso a este tipo de operaciones se las conoce como operaciones de
memoria cero.
El mapa de transición de luminancias indica cómo se produce la transformación
entre el anterior nivel de luminancia y el siguiente. Si la función de transformación se
mantiene constante para toda la imagen (o la región de la misma a manipular) puede
hablarse de un mapa de transición de luminancias: a cada valor de la luminancia de
entrada le hace corresponder otro a la salida.

Luminancia
de salida
Umbralizaciones

Luminancia de entrada

2. COMPLEMENTACIÓN (NEGATIVO).
Consiste en sustituir el valor de la luminancia en cada punto por el de su
complementario, esto es, L - u(x,y). Se logra así un efecto de negativo digital de la
imagen, muy útil para la visualización.
74 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

3. AMPLIACIÓN DEL CONTRASTE.


Una imagen de bajo contraste se debe a iluminación pobre o no uniforme o a una
respuesta no lineal de los sensores de captura, lo que dificulta su comprensión o
tratamiento. Se dice que el rango dinámico (el número de niveles de gris utilizados) es
estrecho.
Para solucionar esto se amplía el contraste
mediante la ampliación de los intervalos de la VL
escala de grises en los que hay más píxeles γ
presentes, mejorando la visibilidad general de la
imagen y consiguiendo más contraste.
Se puede ampliar el contraste en una zona a β
costa de reducirlo en otras. Para ello, se hace
corresponder a un rango de niveles de gris del α
mapa de transición de luminancias, un rango
mayor en la luminancia de salida, como, por 0 a b L
ejemplo, el mapa de la derecha.

4. BINARIZACION.
Consiste en generar una imagen en dos tonos (generalmente blanco y negro) a partir de
otra con múltiples niveles de gris. Es un caso particular de la ampliación de contraste.
Entre sus aplicaciones están las siguientes:
• Resalte de las partes más brillantes de la imagen (suele corresponder a los
objetos, frente a un fondo oscuro).
• En imágenes térmicas, segmentación de los cuerpos calientes de los fríos.
• Compresión de la imagen cuando la información de textura no es necesaria.
• Preparación de la imagen para una
detección de bordes, formas, etc. VL
• Eliminación del ruido introducido por un
subsistema de captura cuando se digitaliza
una imagen binaria.
Como refleja el mapa de transición de luminancias,
el valor umbral m determina qué valor pasan a
tener los píxeles (blanco o negro).
Generalmente el fondo es negro y el objeto, en
primer plano, blanco. 0 m L
OPERACIONES DE PUNTO 75

5. CLIPPING (RECORTE).
Los mapas de transformación de contraste correspondientes al clipping se obtienen
generalizando ligeramente la binarización y salvando la restricción de que β = π / 2.
Se utiliza para ampliar drásticamente el contraste
correspondiente a un número reducido de niveles de gris VL
genéricamente asociados al contenido que se desea
resaltar, permitiendo diferenciar los niveles inferiores y
superiores al rango, asignándoles un único nivel
(generalmente O y Ln) a cada uno de los dos entornos. Es
decir, elimina información de una parte de la imagen 0 a b L
permitiendo que otras regiones amplíen su información.

6. UMBRALIZACION (THRESHOLDING).
Consiste en respetar el contenido de la imagen salvo una
porción, en la parte baja o alta de los niveles de intensidad, VL
que se elimina de la imagen, dejándola a cero. Dicha
región comienza o termina precisamente en el valor
conocido como umbral.
Este tipo de operación de punto es muy utilizada para
segmentar pero no como la binarizacion en blanco y negro 0 m L
sino en varios niveles de gris.

7. SLICE.
Para resaltar una franja de niveles de gris, se deja a su valor
primario o a un máximo, Ln, mientras que los restantes VL
valores de luminosidad se dejan a cero o a su valor previo
(respectivamente) según se pretenda o no conservar el
fondo.
En la mayoria de los casos se utiliza como ángulo en el
mapa de transición de luminancias 45º. Sólo queda la
informacion inicial entre a y b, el resto pasa a negro. 0 a b L

8. LOGARITMO.
Comprime el rango dinámico de una imagen reemplazando el valor de cada píxel por su
logaritmo. Se resalta el valor de los píxeles de baja intensidad, aclarándolos de forma no
lineal: a los píxeles claros se les da un valor más oscuro. Es útil cuando el rango
dinámico de una imagen es muy grande para ser visualizada sobre un dispositivo.
76 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

9. MODIFICACIÓN DEL HISTOGRAMA.


9.1. Ampliación del Contraste –Normalización.
Intenta mejorar el contraste de una imagen “estirando” el rango de los valores de
intensidad que contiene para que alcancen u ocupen otro rango.
Difiere de la ecualización del histograma en que sólo puede aplicarse una función de
escalado lineal a los valores de los píxeles de la imagen.

9.2. Ecualización del Histograma.


Es un método para modificar el rango dinámico y el contraste de una imagen,
alterándola de manera que su histograma presente la forma deseada.
Emplea un mapeo no lineal. Se reasignan los valores de la intensidad de los píxeles
de la imagen original, para que la imagen final contenga una distribución uniforme de
intensidades (por ejemplo, un histograma más ancho y plano, ampliando su rango
dinámico).
Se diferencia del estiramiento del histograma en que la ecualización puede emplear
funciones no lineales.
OPERACIONES DE PUNTO 77

Se emplea en procesos de comparación de imágenes y en la corrección de efectos no


lineales (ruidos de los dispositivos de captura).

Ecualización

Ampliación del
contraste

10. MÁSCARAS Y MATTES.


10.1. Matte.
El proceso de composición de dos o más secuencias de imágenes requiere de mucho
control sobre qué zonas de cada una de ellas serán usadas, así como tener en cuenta el
grado de transparencia. Se necesita un método sencillo, fácil de manipular y consistente;
para ello, se utiliza un matte.
Un matte es una imagen (o secuencia), que puede ser manipulada como si se tratara
de una imagen cualquiera; lo que la diferencia del resto es su propósito: se utilizan
durante la composición cuando sólo se quiere incluir una parte de la imagen en el
resultado.
78 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Hay imágenes que permiten almacenar un cuarto canal, además de los RGB. Es el
llamado canal Alpha, también conocido como canal Matte. Por lo tanto, se puede tener
el matte como una imagen independiente o como un canal (o varios canales –como por
ejemplo, el formato de photoshop-) dentro de ella.

10.2. Mask.
En muchas publicaciones se usa el término matte y máscara de forma indiferente. Pero
hay una diferencia entre ellos.
Una máscara es una imagen que se utiliza para limitar o controlar ciertos parámetros
de una operación, como puede ser una corrección de color.

10.3. Diferencia entre creación y obtención.


Un matte se puede crear con cualquier programa de retoque fotográfico o de pintura.
Básicamente se trata de crear una imagen de escala de grises, en la cual, las zonas
blancas indicarán al software de composición que esa porción de la imagen (o
secuencia) a la que afecte dicho matte, será visible. Del mismo modo, las zonas negras
serán transparentes, dejando ver las imágenes de las capas inferiores. Las distintas
tonalidades de gris, indicarán el grado de transparencia.
Cuando se habla de obtener el matte a partir de una imagen o secuencia, se refiere a
la utilización de herramientas determinadas, que aprovechan las características de la
imagen para extraer un matte (imagen en escala de grises). Dicha extracción es conocida
con el nombre de keying.
En esta sección se va a hablar de la obtención, pero la creación es muy útil para
obtener, por ejemplo, mattes y máscaras basura, muy útiles para delimitar rápidamente.
OPERACIONES DE PUNTO 79

10.4. Keying basado en la Luminancia.


Este método de encarga de extraer el matte de una imagen basándose en qué valores de
luminancia se incluyen o se excluyen en el matte.
Es útil cuando la característica de la imagen (o secuencia) que se quiere extraer es
significativamente más brillante u oscura que el fondo. En el siguiente ejemplo se tiene
el caso ideal, en el que el fondo es negro y los objetos a partir de los cuales se quiere
extraer el matte son mucho más brillantes.

10.5. Keying basado en la Crominancia.


Este método es más sofisticado que el anterior. Se basa en la selección de un
determinado rango de colores o tonos que pasarán a ser la parte negra del matte, y el
resto, la parte blanca.
Las herramientas de keying basado en crominancia suelen traer opciones para
manipular, además, la luminancia, y de esta forma pulir mucho más el resultado final.
Dentro de este método se incluye la conocida metodología de la utilización de
pantallas azules o verdes para poder realizar este keying basado en crominancia
(chroma keying).
Antiguamente, tanto el keying de luminancia como el de crominancia, se basaban en
un hardware (en tiempo real) especial que utilizaba las propiedades de la señal de vídeo,
la cual representa la información en términos de luminancia y crominancia.

10.6. Keying de Diferencia.


Este método se basa en que si se dispone de dos secuencias casi idénticas cuya única
diferencia es un elemento, dicho elemento puede ser extraído creando un matte de él.
En la práctica nunca existe esta situación idílica (a menos que las dos secuencias
sean generadas por ordenador), debido al grano de la imagen, pequeñas variaciones en
la atmósfera, luz, sombras, etc.
Por todo esto no se le considera una solución completa, pero sí un buen primer paso
para poder llegar a buenos resultados utilizando otros métodos a posteriori.

10.7. El Método de Diferenciación de Color de Pietro Vlahos.


Una vez que se han definido los principales métodos de extracción de mattes, se puede
realizar una aproximación a un sistema pionero en esta actividad.
En 1950 Petro Vlahos, creó un método para la extracción de mattes llamado “Método
de Diferenciación de Color”, que fue usado por primera vez para la producción de Ben
Hur. Por supuesto, su implementación fue analógica, pero tiene una fácil conversión a
digital y es una de las técnicas más populares y efectivas (muy mejorada gracias a la
tecnología digital). Muchos de los algoritmos del software de composición se basan en
este método.
80 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Este método implica extracción de matte, corrección de color y combinación de


imágenes. Básicamente, consiste en lo siguiente:
• Se parte de que la secuencia está filmada sobre un fondo de color azul. El
primer paso consiste en la creación de una nueva imagen que transforma
todo el azul en negro. Esto se realiza de la siguiente forma:
Para cada píxel se analiza el canal Azul y el Verde y
Si “Cantidad de Azul” > “Cantidad de Verde”
Entonces “Canal Azul” <- “Canal Verde”
Sino “Canal Azul” <- “Canal Azul”
Después de la aplicación de este algoritmo se procede a eliminar los reflejos
azules que inevitablemente el fondo crea sobre el objeto.
• En el segundo paso se realiza una corrección de color y la creación del
matte. Esto consiste en substraer la máxima cantidad de rojo o de verde de
la componente azul. Y esta diferencia entre el canal azul y los demás es lo
que da nombre al método.
Matte = Azul – Máximo (Verde, Rojo)
Esta operación produce un matte invertido (el fondo es blanco y el frente es
negro).
• El tercer paso consiste en multiplicar este matte invertido por el fondo, con
lo que queda la secuencia de fondo con un “agujero”, que es justo la forma
de la secuencia de frente (con la que se hizo el método).
• Finalmente se suma el frente (foreground) modificado en el paso 1 a este
fondo con agujero.
TEMA 10. OPERACIONES ARITMÉTICAS
Son operaciones que se realizan píxel a píxel, es decir, operaciones de punto.

1. SUMA.
Hay dos formas de realizar la suma:
- píxel + una constante: incrementando linealmente la luminancia de cada píxel:
v(x,y) = u(x,y) + k
- píxel a píxel dos imágenes: en las imágenes con varios canales, se suma cada
uno por separado (el rojo, el verde y el azul, en el caso RGB).
v(x,y) = u(x,y) + p(x,y)
Si la segunda imagen es más pequeña que la primera se puede redimensionar la segunda
para que tenga igual tamaño que la primera mediante una interpolación, o también se
puede rellenar con ceros para que tenga el mismo tamaño.
El desbordamiento se puede corregir de dos formas. Si el valor pasa de 255 se puede
saturar, es decir, se dejan los píxeles con valor 255, o bien se realiza un rebosamiento
por exceso: si la cantidad es superior a 255, la cantidad que excede (restando 255 al
valor) es el nuevo valor del píxel. Por ejemplo, si se obtiene un valor de 300, se le
restaría 255, y el valor que quedaría sería 45.
Las aplicaciones de esta operación son:
- Aclarar el color a una imagen: sumándole una constante.
- Reducir ruido: dadas varias imágenes de un mismo objeto, se realiza un
promedio de las mismas para suavizar el ruido.

2. RESTA.
Al igual que ocurre en la suma, se pueden restar:
- píxel – una constante: disiminuyendo linealmente la luminancia de cada píxel.
v(x,y) = u(x,y) – k
- píxel a píxel dos imágenes: en las imágenes con varios canales, se resta cada
uno por separado (el rojo, el verde y el azul, en el caso RGB).
82 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

v(x,y) = u(x,y) – p(x,y)


Si el valor es un número negativo, se puede saturar, es decir, se deja a cero, o bien se
realiza un rebosamiento: se le suma 255 al número negativo y el resultado es el nuevo
valor del píxel. Por ejemplo, si se tiene el número –45 se le sumaría 255 y daría 210.

- = + 100 =

Dado un patrón de luminancia variable, al restarle una imagen en blanco, queda más
uniforme. A continuación sólo se tendría que aclarar sumándole una constante a la
imagen. Además de la eliminación de campos de luz no uniformes, otras aplicaciones de
la resta son:
- eliminar información estática de una cámara de vigilancia.
- se utiliza en aplicaciones médicas (con elementos radiactivos): por ejemplo, para
seguir el camino que sigue un isótopo inyectado, se realizan restas de las
diferentes imágenes fisiológicas tomadas.
- obtener la derivada temporal de la intensidad de un píxel: flujo óptico.
- para oscurecer imágenes: al restarle una constante.

3. PRODUCTO.
Esta operación se puede realizar de dos modos:
- multiplicando los píxeles de una imagen por una constante: se realiza un
escalado en los niveles de gris.
v(x,y) = u(x,y) * k
- multiplicando los píxeles de una imagen por los de otra, píxel a píxel
v(x,y) = u(x,y) * p(x,y)
Si el valor resultante al realizar el producto pasa de 255, se lleva a cabo el rebosamiento
por exceso de igual forma que en la suma.
Las aplicaciones son:
- Para filtrar imágenes: se multiplica por el kernel del filtro.
- Para aclarar u oscurecer imágenes.
- Para enmascarar imágenes: veríamos lo que la máscara nos permite ver. La
máscara sólo nos permitiría ver lo que se encuentra en blanco. En el ejemplo de
la figura, al superponer la máscara se vería solamente la cabeza.
OPERACIONES ARITMÉTICAS 83

4. DIVISIÓN.
Análogamente a las operaciones anteriores, se puede:
- dividir los píxeles de una imagen por una constante:
v(x,y) = u(x,y)/ k
- dividir los píxeles de una imagen entre los de otra, píxel a píxel.
v(x,y) = u(x,y)/ p(x,y)
Se obtienen diferencias relativas, no absolutas. Cuando el valor no llega a cero se lleva a
cabo el rebosamiento por defecto, al igual que en la resta.
Sus aplicaciones son:
- Detección de cambios relativos entre dos imágenes de una secuencia.
- Oscurecer imágenes.

5. BLENDING.
Esta operación es una mezcla aditiva, es decir, sirve para realizar una suma, pero
seleccionando el porcentaje de lo que se suma. Se realiza típicamente entre dos
imágenes, pero también se puede realizar entre una imagen y una constante.
R (i,j) = x * I1 (i,j) + (1 – x) * I2 (i,j)
20% 80%
I1, I2 : imágenes;
R : resultado;
x:%
El valor máximo que se puede obtener es 255; nunca va a haber rebosamiento.
Se utiliza en transparencias y para las transiciones “dissolve” en dos secuencias, es
decir, para realizar fundidos.

6. OVER.
Posiblemente la herramienta más importante, ya que es gracias a la cual se componen
las imágenes.
Básicamente permite componer una imagen A (foreground) encima de otra B
(background) utilizando otra imagen intermedia M (el matte).
O = (A x M) + ((1 – M) x B)
siendo A y B las imágenes completas.
Esta operación es algo similar al algoritmo de diferenciación de color de Pietro
Vlahos, ya que si se siguen los pasos de esta operación:
1. Se multiplica la imagen A (foreground) por el matte, obteniendo una imagen
negra con una zona perteneciente a la imagen A.
2. Se multiplica la imagen B (background) por el inverso del matte, resultando
una imagen como la B, pero con un agujero negro que corresponde al dibujo
del matte. En dicho agujero encaja perfectamente la imagen obtenida en el paso
1.
3. Finalmente, se suman las imágenes de los pasos 1 y 2 y se obtiene la
composición.
Si las imágenes que se utilizan contienen un canal Alpha (imágenes de 32 bits
provenientes de un programa de 3D, por ejemplo), entonces la fórmula sería:
Orgba = Argba + ( (1 – Aa) x Brgba )
84 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

siendo Irgba todos los canales (RGB y Alpha) de la imagen I e Ia sólo el canal alpha de
dicha imagen.
En la fórmula general hay un paso (A x M) para conseguir una imagen
premultiplicada, la cual no sería necesario obtenerla si la imagen A proviene de un
programa de 3D y contiene el canal Alpha.

7. IN / OUT.
Esta operación sólo tiene en cuenta el canal Alpha de la imagen B.
O = A x Ba
El resultado de esta operación es el siguiente: Se dice que A in B es la imagen O, es
decir, la porción de la imagen A que cabe en B. Por ejemplo:

El operador Out realiza la operación contraria a In:


O = A x (1 – Ba )

8. ATOP.
Hay algunas operaciones que operan con las anteriores, pero que son tan utilizadas que
se las entiende como operaciones básicas. Una de ellas es ATOP. Su función es colocar
a la imagen A sobre (over) la B, pero sólo en el área donde la imagen B tenga el matte.
O = (A in B) over B
TEMA 11. OPERACIONES LÓGICAS
1. AND/ NAND.
Estas operaciones toman dos imágenes binarias o de niveles de grises como entrada, y
dan como salida una tercera imagen, cuyos valores de los píxeles son los de la primera
imagen a los que se les ha realizado la operación AND con los correspondientes de la
segunda. Son también operaciones de memoria cero (ZMO), no necesitan espacio
adicional.
AND es una operación de intersección o producto, siendo los objetos del primer
plano los píxeles de valor 1.
Se aplica la tabla de verdad siguiente:
A B Q A B Q
0 0 0 0 0 1
0 1 0 0 1 1
1 0 0 1 0 1
1 1 1 1 1 0
AND NAND
La imagen puede estar en:
- blanco y negro.
- escala de grises: los valores se convierten a binario, se construye la tabla de
verdad píxel a píxel y se realiza el AND. El valor resultante se convierte a
decimal.
En el ejemplo de la figura, si el fondo tiene valor 1, y los objetos 0, quedaría:

AND =
86 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2. OR / NOR.
Toman dos imágenes binarias o de niveles de grises como entrada, y dan como salida
una tercera imagen, cuyos valores de los píxeles son los de la primera imagen a los que
se les ha realizado la operación OR con los correspondientes de la segunda.
También puede realizarse entre una imagen y una constante
A B Q A B Q
0 0 0 0 0 1
0 1 1 0 1 0
1 0 1 1 0 0
1 1 1 1 1 0
OR NOR
La imagen puede estar en:
- blanco y negro.
- escala de grises: los valores se convierten a binario, se construye la tabla de
verdad píxel a píxel y se realiza el OR, al igual que ocurría antes. El valor
resultante se convierte a decimal.
Si en las imágenes siguientes el fondo tiene valor 1 y los objetos, valor 0, y previamente
hemos pasado la imagen en escala de grises a binario, el resultado sería:

OR =

3. XOR / XNOR.
Toman dos imágenes binarias o de niveles de grises como entrada, y dan como salida
una tercera imagen, cuyos valores de los píxeles son los de la primera imagen a los que
se les ha realizado la operación XOR con los correspondientes de la segunda.
También puede realizarse entre una imagen y una constante.
OPERACIONES LÓGICAS 87

A B Q A B Q
0 0 0 0 0 1
0 1 1 0 1 0
1 0 1 1 0 0
1 1 0 1 1 1
XOR XNOR
En el ejemplo siguiente, teniendo los píxeles del fondo valor 1 y los de los objetos,
valor 0, en la imagen resultante, los píxeles valdrán 1 cuando no estén en la intersección
(cuando no aparezca en las dos).

X
Umbralización O =
R
TEMA 12. OPERACIONES MORFOLÓGICAS
Estas operaciones realizan transformaciones en las formas de los objetos de la imagen.

1. DILATACIÓN.
La dilatación no es una operación de memoria cero. Es una de las dos operaciones
básicas (la otra es la erosión). Se necesita conocer información de la imagen original.
Se aplica típicamente a imágenes binarias aunque hay versiones que trabajan con
imágenes en escala de grises. El efecto básico es agrandar gradualmente los límites de
una región de píxeles de primer plano (agranda la imagen, haciendo más grandes sus
contornos).
Para ello, toma dos estructuras de datos como
entrada: la primera es la imagen que va a ser dilatada
(con fondo de valor 0 y objetos de valor 1) y la segunda
es un conjunto (generalmente pequeño) de coordenadas
de puntos que se conocen como kernel. Se va pasando
el kernel por todos los píxeles del fondo (de valor 0).
Cuando alguno de los píxeles del kernel –cuyo píxel
central está sobre el del fondo- coincida con un píxel de
frente, se pone este píxel a 1 (primer plano o frente).
El kernel de operación que suele utilizar es una máscara de 3x3, 5x5 o cualquier otro
número impar (7x7, etc):

Dada una máscara centrada en el píxel central (2,2). Para realizar la dilatación se pasa
por los píxeles del fondo. Al superponerla por todos los elementos del fondo (por todos
los 0), si está sobre algún píxel que valga 1, se pone el central también a 1.
Esta operación se utiliza para:
- detección de bordes, tomando la imagen dilatada y luego restándosela a la
imagen original. Así quedaría el contorno.
90 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

- ampliación de una región para disminuir el ruido.

2. EROSIÓN.
Es otra operación morfológica básicas, junto con la
dilatación. Se aplica típicamente a imágenes binarias
aunque hay versiones que trabajan con imágenes en
escala de grises. Realiza una erosión de los límites de
una región del frente.
El procedimiento es el siguiente: se superpone un
kernel por todos los elementos del primer plano (valor
1) y si alguno se superpone a uno que valía 0, el
elemento central pasará a valer 0.
Entre sus aplicaciones están:
- Separar objetos que se tocan en una imagen binaria de forma que puedan
contarse usando un algoritmo de etiquetado.
- Se puede usar también para detectar bordes tomando una imagen erosionada
y restándosela luego a la imagen original.
- Como base para otras operaciones morfológicas.

3. APERTURA.
De forma parecida a la erosión, pretende eliminar algunas zonas de los píxeles del
frente, siendo en general menos destructiva que la erosión. Se utiliza para eliminar ruido
de las imágenes. Es una combinación de las dos operaciones morfológicas básicas:
OPERACIONES MORFOLÓGICAS 91

APERTURA = EROSIÓN + DILATACIÓN


Se puede realizar una erosión y posteriormente una dilatación usando el mismo kernel
para ambas operaciones, pero otra forma de llevarla a cabo es utilizando un kernel con
una forma determinada (cuadrado, triángulo,
etc.). Se superpone el kernel por los píxeles del
primer plano de la imagen y se mantienen
aquellas regiones que tengan una forma similar a
este kernel, o que puedan contener
completamente al kernel, mientras se eliminan las
otras regiones de los píxeles del frente.
La apertura es el dual del cerramiento; abrir
los píxeles del frente con un determinado kernel
es lo mismo que cerrar los píxeles del fondo con
el mismo kernel.

4. CERRAMIENTO.
Es parecido a la dilatación ya que ambas tienden a
agrandar los bordes de regiones del frente, pero más
constructiva que esta operación. El cerramiento dilata
suavemente, cerrando un poco los huecos. Es también
una combinación de las operaciones morfológicas
básicas:
CERRAMIENTO = DILATACIÓN + EROSIÓN
92 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Se utiliza un kernel y se superpone por los píxeles del fondo (excepto en los bordes),
preservando el fondo de regiones que tienen una forma similar a él o que pueden
contener completamente al kernel, mientras que se eliminan todas las otras regiones de
píxeles del fondo donde no entre (poniendo su valor a 1).
Es una operación de apertura pero en inverso. Se realiza una dilatación seguida de
una erosión usando el mismo kernel. Es la operación dual de la apertura. Realizar el
cerramiento de los píxeles del frente con un kernel particular equivale a abrir el fondo
con el mismo kernel.

5. SKELETONIZACIÓN / TRANSFORMACIÓN DE EJES MEDIOS.


Es un proceso para sustituir las regiones del frente
en imágenes binarias por un esqueleto que conserva
la conectividad de la región original.
Sirve para obtener un esqueleto de la región:
sobre fondo negro (0) los píxeles que forman parte
del esqueleto valen 1 (es una imagen binaria).
La transformada de ejes medios es una imagen
en escala de grises donde cada punto del esqueleto
tiene una intensidad que representa su distancia a
un límite en el objeto original. Cuando la distancia entre dos bordes es la misma
entonces esos píxeles pertenecen al esqueleto. De las esquinas se van obteniendo las
diagonales. A menor distancia de los contornos, más negro será el píxel. A mayor
distancia, más blanco.
Este algoritmo es poco eficiente.

Imagen Skeletonización Transformación


de ejes medios

EJEMPLOS:

Dilatación

Erosión
OPERACIONES MORFOLÓGICAS 93

Cerramiento Apertura

6. OPERACIONES MORFOLÓGICAS EN CINE.


Operaciones como la erosión, la limitación de bordes, etc., son ampliamente utilizadas
en composición digital para conseguir mattes más perfectos.

6.1. Edge-Matte.
En la realización de un matte los bordes son las partes a las que más tiempo se dedica.
En estos casos es muy útil poder limitar algunas operaciones a los bordes o excluir éstos
de dichas operaciones. Para conseguirlo se utiliza un matte llamado edge matte (matte
de bordes).
Este matte se consigue utilizando algoritmos de detección de bordes. Si se tiene en
cuenta que muchas veces se posee un croma, dichos algoritmos lo tienen más fácil para
conseguir un resultado satisfactorio.
El edge matte es muy útil para, por ejemplo, poder controlar el grado de suavidad y
transparencia de los bordes en una composición.

6.2. Agujeros.
Es muy común encontrarse con “agujeros” en un matte, debidos a ruido, polvo u otro
tipo de artefacto en la pantalla azul o en la imagen. Estos agujeros se pueden tapar a
mano con lo que es conocido como matte basura aunque hay otros métodos para
automatizar en cierto modo este trabajo. Por ejemplo, se puede aplicar un filtro de
mediana, lo que eliminará los píxeles anómalos.
Otra técnica es la de aplicar un blur a la pantalla azul, para a continuación, extraer el
matte. Este matte no tendrá tantas imperfecciones como el extraído sin aplicar el blur,
94 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

pero algunas zonas de interés puede que se pierdan, por lo que se suelen combinar
ambos mattes (el extraído con blur y el normal).
Operaciones como la dilatación también pueden ser útiles aplicadas a ciertas zonas
en las que haya agujeros más grandes, pero para pequeñas imperfecciones producidas
por el grano, suelen ser más efectivas las técnicas anteriores.

6.3. Ajustando el matte.


Puede que se necesite incrementar o decrementar la cobertura del matte en ciertas zonas.
Para esto se utiliza la erosión y la dilatación.
TEMA 13. FILTRADO
1. OBJETIVOS Y DOMINIOS DEL FILTRADO.
El filtrado permite realzar o atenuar, suavizando los detalles, alguna característica de la
imagen, así como eliminar el ruido o las partes que no interesen.
Se trabajan en dos dominios:
- en la frecuencia: se utiliza la amplitud y la frecuencia;
- en el espacio: para cada píxel, identificado por sus coordenadas espaciales, se
tiene un valor distinto de intensidad.
La transformada de Fourier permite pasar una imagen del dominio del espacio al de la
frecuencia.

2. FILTRADO EN EL DOMINIO DE LA FRECUENCIA.


2.1. Generalidades.
a) Etapas.

F Filtro=H(x,y) F-1
f(x,y) F(x,y) G(u,v) f(x,y)
imagen original imagen original imagen filtrada imagen filtrada
espacio frecuencia frecuencia espacio

b) Las ventajas de realizar el filtrado en el dominio de la frecuencia son:


- resulta muy fácil asociar el concepto de frecuencia a determinadas
características de la imagen (bordes, ruido, zona sin cambios, etc), ya
que las zonas con cambios de tonalidad suaves corresponden a bajas
frecuencias, y las de cambios de tonalidad bruscos (muchos detalles),
a altas frecuencias.
- el filtrado es más rápido, gracias al Teorema de Convolución.
96 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

c) Teorema de Convolución.
ESPACIO: g (x,y) = f (x, y) + h (x,y)
imagen imagen filtro
final original
No depende de la posición de los píxeles.
FRECUENCIA: G (u,v) = F(u,v) * H (u,v)
Es mucho más rápido que el anterior, ya que es una simple
multiplicación, en vez de tener que aplicar un kernel para realizar la
convolución, como ocurre en el dominio del espacio. Como resultado
se obtiene la imagen final filtrada.

2.2. Tipos.
a) Filtro Paso Bajo: deja pasar las bajas frecuencias.
Se asocia a zonas uniformes con baja frecuencia. Elimina el ruido y
suaviza, relacionando un píxel con los de alrededor.
Un filtro de paso bajo ideal sería:
H (u,v)
1 D(u,v) ≤ D0
1 H (u,v)
0 D(u,v) > D0
0 D (u,v)
Do
donde D0 es la frecuencia de corte, que caracteriza al filtro y H(u,v) la
función de transferencia del filtro.
Un filtro de paso bajo real, sería, por ejemplo, el Butterworth:

0 D(u,v)
D0
1 Si D(u,v) → 0 ⇒ H(u,v) → 1
H(u, v) = 2n
 D(u,v) 
1+   Si D(u,v) → ∞ ⇒ H(u,v) → 0
 D0 

0.5
D (u,v) = (u2 + v2 ) ½
1/ √2 = 0.71

b) Filtro Paso Alto: pasan altas frecuencias. Se quiere conseguir lo


contrario que con el filtro de paso bajo.
Con este tipo de filtro, se realzan los bordes y se eliminan las bajas
frecuencias. La información de los bordes será mayor que la de las
zonas uniformes.
Un filtro de paso alto ideal sería:
FILTRADO 97

1
0 D (u,v) ≤ D0
H (u, v) =
1 D( u, v) > D0
0 D(u,v)
D0
Un filtro de paso bajo real, sería, por ejemplo, el Butterworth:

1
H (u, v) = 2n
 D0 
1+ 
 D(u, v) 
 

D0

Si D(u,v) → ∞ ⇒ H(u,v) = 0
Si D(u,v) → 0 ⇒ H(u,v) = 1

0.5
D (u, v) = ( u2 + v2 ) 1/2
1/2
c) Filtro Paso Banda: Deja pasar una banda de frecuencias.
Ideal: Real:

1
1

0
0
D1 D2 1 D1 D2
1

3. FILTRADO EN EL DOMINIO DEL ESPACIO.


3.1. Generalidades.
a) Fundamentos: es necesario aplicar convolución: Imagen * Filtro
g (x, y) = f (x, y) * h (x, y)
El operador de convolución para realizar el filtrado en el dominio del
espacio, es un kernel de convolución, el cual estará formado por una
matriz. Se aplica a todos los píxeles de la imagen. Se caracteriza porque
es invariante a la posición, es decir, el resultado de la operación no
depende de la posición en la que está un píxel, sino de los valores del
kernel y de la imagen.
b) Convolución: Se centra el kernel en el píxel a tratar y si se utiliza como
kernel una matriz 3x3, el resultado sería:
R = w1 z1 + w2 z2 + ... + w9 z9 = ∑ (wi zi ) 1/p i= 1...9 p = ∑ wi
Se divide por p para evitar que quede en blanco.
98 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

El resultado del nuevo valor se queda en el píxel en el que se centró el


kernel.

3.2. Tipos.
a) Filtro paso Bajo: Permite el paso de las bajas frecuencias de una imagen
mientras que atenúa o rechaza los componentes de alta frecuencia. La
frecuencia de corte viene determinada por el tamaño del kernel del filgro
y los coeficientes del kernel.
Las zonas con pocos cambios conservan un valor similar al antiguo. En
cambio, las zonas con muchos cambios pasan a tener un valor promedio
del valor anterior con los píxeles del entorno.
Estos filtros se utilizan para eliminar ruido en una imagen (las altas
frecuencias, al ser pocos píxeles, implica cambios bruscos). Restando de
una imagen esa misma tras aplicarle un filtro de paso bajo se obtiene un
realce de los bordes (filtro de paso alto).
Los kernels se caracterizan porque tienen todos los coeficientes positivos.
Ejemplos:
1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
1 1 1 1 2 1 1 4 1 1 12 1 2 4 2
1 1 1 1 1 1 1 1 1 1 1 1 1 2 1
9 10 12 20 16
Average LP1 LP2 LP3 “Gaussian”

b) Filtro paso Alto: Amplifica los detalles de alta frecuencia de una imagen
mientras mantiene la integridad de los detalles de baja frecuencia. Resalta
los bordes, las zonas de cambios.
El valor del centro de los kernels es grande, los coeficientes negativos
pequeños se utilizan para reducir bastante el efecto del gran factor de
ponderación central.
Se utilizan para acentuar o identificar mejor los objetos de una imagen.
Hay que destacar que aunque se realzan los bordes, también se aumenta
el ruido. Las partes con altas frecuencias se vuelven más brillantes y las
de bajas frecuencias se oscurecen.
Ejemplos:
-1 -1 -1 0 -1 0 1 -2 1 0 -1 0
-1 9 -1 -1 5 -1 -2 5 -2 -1 20 -1
-1 -1 -1 0 -1 0 1 -2 1 0 -1 0
1 1 1 16
Mean HP1 HP2 HP3
removal
FILTRADO 99

Imagen LP0 LP2 LP4


original

HP0 HP1 HP2 HP3

c) Realce de bordes por desplazamiento y diferencia: Sustrae de la


imagen original una copia desplazada de dicha imagen. Esta operación se
podría realizar mediante una traslación y una sustracción, pero es menos
elegante.
Al superponer el kernel queda la substracción del valor de ese píxel y el
superior. Hay tres tipos de kernels:
0 -1 0 0 0 0 1 0 0
0 1 0 -1 1 0 0 1 0
0 0 0 0 0 0 0 0 0
1 1 1
Horizontal Vertical Horz/Vert
100 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

d) Realce por Laplaciano: Se distingue de otros operadores y filtros por


ser omnidireccional (realza los bordes en todas las direcciones). Calcula
la derivada segunda de la función respecto a x e y. La primera derivada
indica cómo va modificándose la intensidad (la pendiente indica mayor o
menor velocidad de cambio). La segunda derivada muestra con qué
rapidez se producen esos cambios.
Produce una definición de la forma de los bordes mayor que otras
técnicas, teniendo el realce que produce tanto pendientes de intensidad
positivas como negativas. Tiene como inconveniente que aumenta el
ruido de la imagen.
-1 0 -1 -1 -1 -1 -1 -2 -1
0 4 0 -1 8 -1 -2 4 -2
-1 0 -1 -1 -1 -1 -1 -2 -1
1 1 1

LAPL1 LAPL2 LAPL3

Diagonal Horizontal Vertical


0 -1 0 0 -1 0 0 0 0
-1 4 -1 0 2 0 -1 2 -1
0 -1 0 0 -1 0 0 0 0
1 1 1

e) Resalte de bordes con gradiente direccional: Se usa para resaltar con


más precisión ciertos detalles de una imagen. Resalta una dirección
determinada.
Para ello, este filtro produce un nuevo píxel resaltado si existe una
pendiente positiva en la dirección del kernel de convolución. La
intensidad del nuevo píxel es directamente proporcional a la intensidad
de la pendiente píxel a píxel que el kernel experimente.
Los kernels que se utilizan son los siguientes:
FILTRADO 101
102 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

f) Detección de bordes y filtros de contorno: se utilizan filtros como el


Sobel, que utiliza la derivada primera para detectar los bordes. Es no
lineal (se producen grandes cambios ante pequeñas variaciones) dando
mejores resultados con menor computación.
Trabaja basándose en el gradiente, que representa la manera en la que la
intensidad cambia de píxel a píxel en una imagen. Es lo mismo que tomar
la derivada de la imagen. El gradiente resalta especialmente aquellos
lugares en los que en una imagen se producen los mayores cambios de
intensidad píxel píxel.
A estos filtros se les llama también filtros de contorno y se usan para
ayudar a clasificar formas de objetos dentro de una imagen (como
leucocitos en imágenes médicas) así como para desarrollar mapas de
contorno para estudios geográficos.
El filtro Prewitt es una aproximación de la primera derivada y el Sobel
además tiene un suavizado promediado. Ambos son direccionales.
Sobel Prewitt

Imagen Sobel Sobel vertical Prewitt Prewitt vertical


original horizontal horizontal

g) Media: es un filtro de paso bajo que reduce la cantidad de variación de


intensidad entre un píxel y el próximo.
Para ello, reemplaza cada valor del píxel de una imagen con el valor
medio de sus vecinos, él mismo incluido. Elimina así los valores de
píxeles no representativos.
El kernel que se utiliza es:
1 1 1
1 1 1
1 1 1
9
FILTRADO 103

h) Mediana: Reduce el ruido en una imagen de una forma parecida a como


lo hace el filtro de la media. Suele dar mejor resultado al preservar
algunos detalles útiles de la imagen.
El procedimiento es el siguiente: se toma el píxel y ocho vecinos -kernel-
y se reemplaza el valor del píxel por la mediana de los valores. Para
calcular la mediana se ordenan los píxeles en orden ascendente o
descendente tomándose el valor del medio (valor 5). Si el entorno que se
estudia contiene un número par de píxeles, se toma la mediana como la
media aritmética de los dos valores centrales.

123 125 126 130 140 Valores vecinos:


122 124 126 127 135 115, 119, 120, 123, 124,
118 120 150 125 134 125, 126, 127, 150
119 115 119 123 133 Mediana: 124
111 116 110 120 130
III. PROCESAMIENTO
TEMA 14. SEGMENTACIÓN
1. GENERALIDADES.
1.1. Definición.
Consiste en subdividir una imagen en sus partes u objetos constituyentes.

1.2. Objetivos.
• Nivel de Subdivisión: Depende del problema a resolver. Deberá detenerse
cuando los objetos de interés de una aplicación hayan sido aislados. Por
ejemplo, en las aplicaciones autónomas de adquisición de blancos aire-
tierra: para identificar vehículos de carretera, habrá que segmentar la
carretera, y luego segmentar del contenido de la carretera los objetos cuya
longitud o tamaño coincida con los de un vehículo.
• Segmentación autónoma: Es una de las tareas más difíciles del
procesamiento de imágenes. Determina el eventual éxito o fracaso del
análisis. En aplicaciones de inspección industrial, se suele tomar alguna
medida de control sobre el entorno (objetos de referencia, etc.).

1.3 Métodos.
Se utilizan algoritmos de segmentación, que se basan en:
a) Discontinuidades del nivel de gris: Consiste en dividir una imagen basándose en
los cambios bruscos de nivel de gris. Es aplicable tanto a imágenes estáticas como
dinámicas.
Las principales técnicas son:
-Detección de puntos aislados.
-Detección de líneas de una imagen.
-Detección de bordes de una imagen.
b) Similaridad del nivel de gris: Se obtiene la segmentación basándose en:
• las propiedades de distribución de los píxeles, como la intensidad o el color,
• o en encontrar directamente las regiones, utilizando para ello varios métodos.
Las principales técnicas son:
108 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

- Umbralización.
- Crecimiento de regiones.
- División y fusión de regiones.

2. MÉTODOS.
2.1. Detección de discontinuidades.
a) Detección de puntos aislados: Se realiza midiendo las diferencias ponderadas
entre el punto central y sus vecinos. Se parte de la idea de que el nivel de gris de
un punto aislado será bastante diferente del de sus vecinos.
Para la detección de los puntos se utiliza un filtro de paso alto, que incrementa las
diferencias, mediante el siguiente kernel:
-1 -1 -1
-1 8 -1
-1 -1 -1
Se sabe que se ha detectado un punto en la posición en la que está centrada la
máscara si |R|>T siendo T un umbral no negativo, y
9
R = w1 z1 + ... + w9 z9 = ∑ wi z i
i =1

Este kernel se utiliza también para el filtrado de alta frecuencia espacial.


Aquí sólo interesan las diferencias suficientemente grandes (>T) para que se
consideren puntos aislados (píxel único en un contorno uniforme).
Para determinar el valor umbral, si la imagen es conocida, ya está determinado.
En otro caso, se hace un análisis de la imagen para ver cuáles son los valores
típicos y cuáles se salen del rango.
b) Detección de líneas y de su orientación: Dados los siguientes cuatro kernels de
línea:
-1 -1 -1 -1 2 -1 -1 -1 2 2 -1 -1
2 2 2 -1 2 -1 -1 2 -1 -1 2 -1
-1 -1 -1 -1 2 -1 2 -1 -1 -1 -1 2
Horizontal Vertical +45º -45º
Y sean R1, R2, R3 y R4 las respuestas de dichos kernels al pasar sobre un punto
concreto de la misma imagen. Si para este punto |Ri| > |Rj|, para todo j ≠ i, este
punto tendrá la mayor probabilidad de estar asociado con una línea en la dirección
de la máscara i.
c) Detección de bordes: Es el método más común para detectar discontinuidades
significativas en el nivel de gris (los puntos aislados y las líneas delgadas no
aparecen frecuentemente).
Un borde es la frontera entre dos regiones con propiedades de nivel de gris
relativamente distintas. Se parte del supuesto de que las regiones de estudio son lo
suficientemente homogéneas para que la transición entre dos de ellas se pueda
determinar sobre la base de las discontinuidades de nivel de gris solamente. En
otro caso se utiliza umbralización o segmentación orientada a regiones.
SEGMENTACIÓN 109

Los operadores Gradiente detectan diferencias entre regiones adyacentes y


pendientes de las curvas (derivadas). El gradiente de una imagen f(x,y) en la
posición (x,y) es el vector:

∂f
Gx ∂z
∇f = =
∂f
Gy
∂y

donde la dirección (fase) es α(x,y)=tan-1(Gy/Gx)


El gradiente de un vector indica la dirección de la máxima variación de f en (x, y).
∇f = mag (∇f) = [Gx2 + Gy2]1/2
donde mag representa magnitud.
El módulo es igual a la máxima variación de f(x,y) por unidad de distancia en la
dirección del gradiente. Es común aproximar el gradiente por sus valores
absolutos,
∇f ≈ |Gx| + |Gy|
Una aproximación de esta ecuación para una región de 3x3, en el
punto z5, es Región 3x 3
z1 z2 z3
∇f ≈ |(z7 + z8 + z9) – (z1 + z2 + z3)| + |(z3 + z6 + z9) – (z1 + z4 + z7)| z4 z5 z6
que se implementa con el kernel conocido como operadores de z7 z8 z9
Prewitt.
Otra aproximación del módulo del gradiente la dan los operadores de Sobel.
∇f ≈ |(z7 + 2z8 + z9) – (z1 + 2z2 + z3)| + |(z3 + 2z6 + z9) – (z1 + 2z4 + z7)|
Los operadores de Sobel proporcionan tanto una diferenciación como un
suavizado (las derivadas realzan el ruido). Por ser una derivada, la suma de sus
coeficientes es cero. Por tanto, la respuesta es cero siempre que el punto en
cuestión y sus vecinos tengan el mismo valor.
También se utiliza el operador de Roberts de gradiente, que realiza la siguiente
aproximación:
∇f ≈ [(z5 - z9)2 + (z6 - z8)2]1/2 ≈ |(z5 - z9)| + |(z6 - z8)|

Roberts Roberts Roberts


z5 z6 1 0 0 1
z7 z8 0 -1 -1 0

Sobel x Sobel y Prewitt x Prewitt y


-1 -2 -1 -1 0 1 -1 -1 -1 -1 0 1
0 0 0 -2 0 2 0 0 0 -1 0 1
1 2 1 -1 0 1 1 1 1 -1 0 1

La suma de todos los coeficientes de una máscara es igual a cero, indicando una
respuesta de cero en las áreas constantes, como sería de esperar tratándose de un
operador diferencial.
110 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

f(x,y)

f’(x,y)

f’’(x,y)

El Laplaciano de una función bidimensional f(x, y) es una derivada de segundo


orden definida por:

∂2 f ∂2 f
∇2 f = +
∂x 2 ∂y 2
Puede implementarse digitalmente de varias maneras, siendo Laplaciano
la más frecuente (región 3 x 3): 0 -1 0
∇ f = 4 z5 − ( z2 + z4 + z6 + z8 )
2 -1 4 -4
0 -1 0

El requisito básico para la definición del laplaciano digital es que:


• el coeficiente asociado con el píxel central sea positivo
• y los coeficientes asociados con los píxeles exteriores sean negativos.
Aunque responde a las transiciones de intensidad, no se suele utilizar para la
detección de bordes porque
a) produce bordes dobles,
b) es muy sensible al ruido,
c) no detecta direcciones de bordes.
SEGMENTACIÓN 111

Se suele utilizar para encontrar la ubicación de bordes utilizando sus propiedades


de paso por cero (mediante la segunda derivada).

2.2. Similaridad.
2.2.1. Umbralización.
Hay dos posibles situaciones:
a) Umbral único: hay dos modos o agrupaciones
dominantes de niveles de gris en el histograma (objetos
luminosos y fondo oscuro). Para extraer los objetos del
fondo hay que elegir un umbral T. Cualquier punto (x, y) T
para el que f(x, y) > T será un punto del objeto.
b) Umbral multinivel: hay más de dos modos dominantes
(tres en el ejemplo: objetos luminosos, objetos menos
luminosos y fondo oscuro). Para separar los objetos entre
sí y del fondo hay que elegir los umbrales T1 y T2. Un
punto pertenece a una clase si T1 < f(x,y) ≤ T2, a la otra
T1 T2
clase si T2 < f(x, y) y al fondo si f(x, y) ≤ T1.
Los umbrales multinivel son más difíciles de obtener que el único por la dificultad de
establecer umbrales múltiples que aislen efectivamente las regiones de interés.
La umbralización es una operación que implica realizar comprobaciones frente a una
función T de la forma:
T = T [x, y, p(x, y), f(x, y)]
donde f(x,y) es el nivel de gris del punto (x,y), y p(x,y) representa alguna propiedad
local de ese punto (por ejemplo, la media del nivel de gris de una vecindad centrada en
(x,y)).
Hay varios tipos de umbrales:
• Cuando T depende solamente del nivel de gris (f(x,y)), el umbral se denomina
global (por ejemplo, una figura de umbral único).
• Si T depende a la vez de f(x,y) y de una propiedad p(x, y), el umbral se
denomina local. Depende del nivel de iluminación y de que, por ejemplo, en
ese punto la media de los valores sea una determinada, evitando así tomar
puntos aislados (ruido) como objetos o fondo.
• Si, además, T depende de las coordenadas espaciales x e y, el umbral se
denomina dinámico. Es decir, el umbral cambia según sea la posición del píxel
en la imagen. Por ejemplo, si una región de la imagen es más oscura que otra,
puede interesar tomar otro valor umbral.
Los métodos que se utilizan son:

1) Umbralización global simple.


Es la técnica más sencilla: se parte el histograma de una imagen utilizando un umbral
único. La segmentación se realiza recorriendo la imagen píxel a píxel y si el nivel de
gris es mayor que un umbral T, se etiqueta como píxel del objeto.
Este método tiene éxito en los entornos bien controlados, como aplicaciones de
inspección industrial (donde hay un control de la iluminación).
112 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2) Selección del umbral por las características del límite.


Se busca un valor umbral en función de las características del límite entre los objetos y
el fondo. Cuando no está muy controlado qué es objeto y qué es fondo, aparecen
problemas. Lo mejor es coger sólo los bordes del objeto.
a) Selección de un umbral.
Hay dificultad para identificar con seguridad los picos del modo de un histograma dado.
Esta etapa es crítica en la selección automática de umbrales con las características de
una imagen variando dentro de un amplio rango de distribuciones de intensidad.
Las posibilidades de seleccionar un “buen umbral” aumentan si los picos del
histograma son altos, estrechos, simétricos y separados por valles profundos. Para ello,
se mejora el histograma.
b) Mejorar la forma del histograma.
Se consideran solamente los píxeles que están situados en el límite entre los objetos y el
fondo o cerca de ese límite. Los picos han de ser de aproximadamente la misma altura
porque aproximadamente habrá el mismo número de píxeles de fondo y de objeto.
Se mejora la simetría del histograma, es decir, la probabilidad de que un píxel
pertenezca al fondo o al objeto.
c) Conocer el límite entre los objetos y el fondo.
Se indica si un píxel está en un borde calculando su gradiente (el módulo indica la
variación máxima del nivel de gris por unidad de distancia. Si no hay variación, el
gradiente vale cero)
Original

1 2 3 4 5 6 7 8 9 10 11 12 13

1 0 0 0 0 0 0 0 0 0 0 0 0 0
2 0 0 0 0 0 0 0 0 0 0 0 0 0
3 0 0 0 0 0 0 0 0 0 0 0 0 0
4 0 0 10 10 10 10 10 10 10 10 10 0 0
5 0 0 10 10 10 10 10 10 10 10 10 0 0
6 0 0 0 10 10 10 10 10 10 10 0 0 0
7 0 0 0 10 10 10 10 10 10 10 0 0 0
8 0 0 0 10 10 10 10 10 10 10 0 0 0
9 0 0 0 10 10 0 0 0 10 10 0 0 0
10 0 0 0 0 0 0 0 0 0 0 0 0 0
11 0 0 0 0 0 0 0 0 0 0 0 0 0

Filtro (0,-1,0;-1,4,-1;0,-1,0)/1

1 2 3 4 5 6 7 8 9 10 11 12 13

0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 -10 -10 -10 -10 -10 -10 -10 -10 -10 0 0
0 -10 20 10 10 10 10 10 10 10 20 -10 0
0 -10 20 0 0 0 0 0 0 0 20 -10 0
0 0 -20 10 0 0 0 0 0 10 -20 0 0
0 0 -10 10 0 0 0 0 0 10 -10 0 0
0 0 -10 10 0 10 10 10 0 10 -10 0 0
0 0 -10 20 20 -20 -10 -20 20 20 -10 0 0
0 0 0 -10 -10 0 0 0 -10 -10 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0
SEGMENTACIÓN 113

Además, el laplaciano da información sobre si un píxel está en la parte oscura


(fondo) o clara (objeto) de un borde.
d) Determinación de una imagen con tres niveles de gris.
Utilizando las ecuaciones del gradiente y el laplaciano para un punto dado, se puede
formar una imagen de tres niveles de la siguiente forma:
0 si ∇f < T

s ( x, y ) = + si ∇f ≥ T y ∇ 2 f ≥ 0
− si ∇f ≥ T y ∇ 2 f < 0

Donde los símbolos 0, + y - representan tres niveles de gris cualesquiera distintos, T es
un umbral, y el gradiente y el laplaciano se calculan para todos los puntos (x, y).
Para un objeto oscuro sobre fondo claro, esta ecuación produce una imagen s(x, y),
con las siguientes características:
• Todos los píxeles que no estén en un borde, como los determinados por ∇f < T
están marcados con un 0.
• Todos los píxeles del lado oscuro de un borde están marcados con +.
• Todos los píxeles del lado claro de un borde están marcados con -.
Los símbolos + y - se invierten en el caso de un objeto claro sobre fondo oscuro.
e) Generación de una imagen binaria segmentada.
A partir de la información del procedimiento anterior, los 1 corresponden a los objetos
de interés y los 0 al fondo:
• Transición desde un fondo claro a un objeto oscuro (a lo largo de una línea de
exploración horizontal o vertical): vendrá dado por la aparición de un - seguido
de un +.
• Interior del objeto: compuesto de píxeles marcados bien como 0 o como +
• Transición desde el objeto oscuro hacia el fondo claro: estará determinado por
la aparición de un signo + seguido de un signo -.
La estructura de una línea de exploración (horizontal o vertical), contiene la sección de
un objeto, de la forma:
(...)(-, +)(0 ó +)(+, -)(...)
donde (...) representa cualquier combinación de +, - y 0.
Los paréntesis más internos contienen puntos objeto y están marcados con 1. Todos
los otros píxeles están etiquetados con 0, con la excepción de cualquier otra sucesión de
(0 ó +) encerrada entre (-, +) y (+, -).

3) Método P-Tile.
El método p-tile se basa en disponer de un conocimiento a priori de cómo ha de ser el
resultado de la segmentación, en cuyo caso la tarea de escoger un umbral se simplifica.
Así, una hoja de texto impreso puede ser un ejemplo en el que se pueda conocer que los
caracteres ocupan una superficie igual a 1/p de la superficie total de la imagen.
Utilizando esta información acerca de la relación entre el área ocupada por los
caracteres y el área de la página completa, resulta sencillo seleccionar un umbral, T,
basándose en el histograma. Si se supone que los caracteres son oscuros sobre fondo
claro y que el histograma tiene una superficie total S, el umbral adecuado es aquel valor
114 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

que divide al histograma en dos partes tales que la que queda a la izquierda de T
(píxeles oscuros) tiene una superficie igual a 1/p·S.
Desgraciadamente, no es normal conocer a priori la relación entre el área de los
objetos que se quieren segmentar y la superficie total de la imagen, por lo que no
siempre puede aplicarse este método.

4) Algoritmo Isodata.
Se trata de una técnica iterativa que se basa en calcular sucesivos valores de umbrales
que dividan al histograma en dos partes. En el primer paso, se elige un valor de umbral
inicial, T0, igual a la mitad del extremo superior del rango dinámico.
A continuación, se calcula la media muestral de los valores asociados a cada una de
las dos partes en que ha quedado dividido el histograma: m0,1 y m0,2. Utilizando estos
valores iniciales, se continúa aplicando el algoritmo siguiente:
m i,1 + m i, 2
Ti = ; i = 1,2,... ;
2
El proceso finaliza para el valor i=k, tal que se verifique que Tk=Tk-1, es decir, cuando el
valor T calculado no varía entre una iteración y la siguiente.

5) Algoritmo del triángulo.


Este método se basa en el análisis del histograma para encontrar el valor correcto de
umbral. Así, en primer lugar se traza una recta entre el valor máximo del histograma
(bmax) y el valor mínimo (bmin=(p=0)). Entonces, para todos los valores b tales que bmin≤
b≤ bmax se calcula la distancia entre la recta trazada y el histograma h(b). El valor
umbral elegido es el valor de luminosidad b0, para el que se maximiza la distancia entre
h(b0) y la línea.
Esta técnica es muy efectiva cuando los píxeles de los objetos producen un pico
suave en el histograma.

Umbral

Brillo

Selección del valor umbral mediante el


algoritmo del triángulo

6) Selección del umbral usando la media y la desviación estándar.


Se trata de una técnica automática de umbralización. El umbral derivado aquí fue
propuesto por Hamadani y se calcula como una combinación lineal de la media y la
desviación estándar de la imagen original.
Para una imagen dada, a ∈ R X , donde X es una matriz de dimensiones [m x n], la
media y la desviación estándar de la imagen vienen definidas, respectivamente, por:
SEGMENTACIÓN 115

m n m n
1 1
µ=
m⋅n ∑∑
i =1 j=1
a (i, j); σ=
m⋅n ∑∑ (a(i, j) − µ)
i =1 j=1
2
;

Entonces, el valor, T, del umbral se calcula como:


T = k1 ⋅ µ + k 2 ⋅ σ

Donde las constantes k1 y k2 son dependientes del tipo de imagen. Cuando se trata de
imágenes de baja resolución, habitualmente se obtienen buenos resultados utilizando
ambas constantes con valor unidad ( k1 = k 2 = 1 ). Para resoluciones mayores, se pueden
conseguir resultados mejores con los valores k1 = 1 ó k 1 = 1.5 y k 2 = 2 .

7) Umbrales basados en varias variables.


Hasta ahora se ha visto la umbralización de una sola variable de intensidad. En algunos
casos, cada píxel está caracterizado por más de una variable (por la información
aportada por un sensor). Por ejemplo, las imágenes en color (RGB), las imágenes de
satélite, etc.
La umbralización consiste en encontrar grupos de puntos en un espacio
n-dimensional. Para ello, se construye un histograma n-dimensional y se buscan grupos
de puntos en ese espacio n-dimensional. La segmentación se realiza asignando una
intensidad a los píxeles cuyos componentes están próximos a una agrupación y otra
intensidad al resto de píxeles de la imagen.
Por ejemplo, dada una imagen en color con sus componentes R, G y B su
histograma será tridimensional (cada píxel está caracterizado por tres valores).
Si dicha imagen RGB tiene sólo 16 valores en cada plano, se forma un cubo de 16 x
16 x 16 celdas. Se obtiene el número de píxeles que hay para cada combinación RGB
(con {1,4,9} 6 píxeles) y se pone, en la celda correspondiente, el número de píxeles (si
se quiere que el histograma esté normalizado, se divide este número por el total de
píxeles).
A continuación, se buscan los grupos de puntos similares en el espacio
tridimensional (próximos y de valor parecido) y se estudian las agrupaciones. Se
segmenta asignando a los píxeles de una agrupación o próximos una intensidad y otra al
resto de los píxeles de la imagen.

2.2.2. Regiones.
1) Formulación básica.
Sea R la representación de la región completa de una imagen. Se puede contemplar la
segmentación como un proceso que divide a R en n subregiones, R1, R2,..., Rn de tal
forma que cumplen:
n
a) U R i = R
i =1
b) Ri es una región conexa, para i = 1, 2, ..., n.
c) Las regiones conexas próximas son disjuntas, es decir: Ri ∩ Rj = ∅ ∀i, j; i ≠j
d) P(Ri) = VERDADERO para i =1,2, ..., n.
e) Dos regiones contiguas no cumplen la propiedad, ya que si la cumplieran se
unirían en una. Esto es: P(Ri ∪ Rj) = FALSO para i ≠j.
Donde:
• P(Ri) es un predicado lógico sobre los puntos del conjunto.
116 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

• ∅ es el conjunto vacío.
La explicación a cada propiedad es la siguiente:
a) La segmentación debe ser completa; cada píxel debe estar en una región.
b) Los puntos de una región deben ser conexos.
c) Las regiones deben ser disjuntas, es decir, ningún píxel pertenece a dos
regiones.
d) Indica las propiedades que deben satisfacer los píxeles de una región
segmentada -por ejemplo P(Ri) = VERDADERO si todos los píxeles de Ri
tienen la misma intensidad-.
e) Indica que las regiones Ri y Rj son diferentes en el sentido del predicado P.

2) Crecimiento de regiones por agregación de píxeles.


Este procedimiento agrupa los píxeles o subregiones dentro de regiones más grandes.
Para ello, se empieza con un conjunto de puntos “generadores” a partir de los que van
creciendo las regiones al agregar a cada uno de estos puntos los píxeles próximos que
tienen propiedades similares.
Una propiedad P que se puede utilizar para incluir un píxel en una de las regiones
sería que la diferencia absoluta entre el nivel de gris de ese píxel Ni y el del generador
Ng sea menor que el umbral T. Además, se debe utilizar un criterio para arbitrar los
casos de empate.
Por ejemplo, en la imagen siguiente, se toman como generadores los puntos de
coordenadas (3,2) y (3,4). La propiedad es P = |Ni - Ng| < T. Para el caso a) se toma T=3
y para el b) T=8. Cualquier píxel que satisfaga esta propiedad simultáneamente para
ambos generadores se asigna (arbitrariamente) a la región R1.
Imagen original a) b)
0 0 5 6 7 A A B B B A A A A A
1 1 5 8 7 A A B B B A A A A A
0 1 6 7 7 A A B B B A A A A A
2 0 7 6 6 A A B B B A A A A A
0 1 5 6 5 A A B B B A A A A A

R1 se representa como A y R2, como B.


Este método presenta los siguientes problemas:
- Selección de los generadores iniciales que representen correctamente a las
regiones de interés.
- Selección de las propiedades adecuadas para la inclusión de puntos en las
diversas regiones durante el proceso de crecimiento.
a) Selección de los generadores iniciales.
Se puede realizar de dos formas:
- Basándose en la naturaleza del problema: por ejemplo, en las aplicaciones
militares de imágenes infrarrojas, los objetivos de interés están generalmente
más calientes (y por ello aparecen más brillantes) que el fondo. Por tanto, el
generador será el punto más brillante.
- Si no se dispone de información a priori, se calcula para cada píxel el mismo
conjunto de propiedades que se utilizarán al final para asignar píxeles a las
regiones de crecimiento. Si el resultado de estos cálculos muestra agrupaciones
SEGMENTACIÓN 117

de valores, los píxeles situados en el centro de estas agrupaciones se pueden


utilizar como generadores. En el ejemplo anterior, un histograma de nivel de gris
mostraría que los puntos con intensidad 1 y 7 son los más predominantes (el
criterio de pertenencia a la región se basa en el nivel de gris).
b) Selección de las propiedades para la inclusión de puntos en las regiones.
Conviene utilizar la información de conectividad o adyacencia en el proceso de
crecimiento de regiones para evitar resultados falsos.
Por ejemplo, dada una distribución aleatoria de píxeles con sólo tres valores de
intensidad distintos. Si se reagrupan los píxeles con la misma intensidad para formar
una región sin prestar atención a la conectividad se puede generar una segmentación sin
sentido (no correspondería a objetos).
c) Formulación de una regla de parada.
El crecimiento de una región debe detenerse cuando no haya más píxeles que satisfagan
el criterio de inclusión en esa región.
Los criterios de intensidad, textura o color son locales, y no tienen en cuenta la
“historia” del crecimiento de la región.
d) Forma de la región y comparación de intensidad.
La potencia del algoritmo de crecimiento puede incrementarse si, para incluir un píxel
en una región se tiene en cuenta la forma de la región que está creciendo, o se compara
la intensidad del candidato con la intensidad media de dicha región.

3) División y fusión de regiones.


Es un procedimiento de segmentación que consiste en subdividir la imagen inicialmente
en un conjunto de regiones arbitrarias disjuntas y después fusionar y/o dividir las
regiones intentando satisfacer las condiciones establecidas en el apartado de
Formulación Básica.
a) Algoritmo de división.
Si R representa la región de la imagen completa y se selecciona un predicado P de la
forma que se expuso en el apartado de Formulación Básica, para una imagen cuadrada,
un método de segmentar consiste en subdividirla sucesivamente en cuadrantes cada vez
más pequeños de forma que, para cualquier región Ri, P(Ri) = VERDADERO.
Esto es lo mismo que decir que si P(R) = FALSO, se divide la imagen en cuadrantes.
Si P es falso para cualquier cuadrante, se subdivide el cuadrante en subcuadrantes, y así
sucesivamente.
Esta técnica de división se representa adecuadamente mediante un árbol cuádruple
(quadtree) -un árbol en el que cada nodo tiene exactamente cuatro descendientes-. La
raíz del árbol corresponde a la imagen completa y cada nodo corresponde a una
subdivisión.

R
R1 R2
R1 R2 R3 R4
R41 R42
R3
R43 R44 R4 R4 R4 R4
118 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

b) Algoritmo de fusión.
Si solamente se utiliza la división, la partición final podrá contener regiones adyacentes
con propiedades idénticas. Esto puede solucionarse permitiendo también fusiones entre
regiones adyacentes cuyos píxeles combinados satisfagan el predicado P, esto es, dos
regiones adyacentes Ri y Rk se fusionarán solamente si P(Ri ∪ Rk) = VERDADERO.
c) Algoritmo de división y fusión.
Se pueden resumir ambos algoritmos en uno solo, en el que, en un paso cualquiera, se
tiene:
1) Dividir en cuatro cuadrantes disjuntos cualquier región Ri donde P(Ri) = FALSO.
2) Fusionar las regiones adyacentes Ri y Rk para las que
P(Ri ∪ Rk) = VERDADERO;
3) Parar cuando no sea posible realizar más fusiones o divisiones.
d) Variación al método básico.
Se divide inicialmente la imagen en un conjunto de bloques cuadrados.
• Se lleva a cabo la división como se ha descrito, pero se limita la fusión a grupos
de cuatro bloques que son descendientes en la representación por quadtree y que
satisfacen el predicado P.
• Cuando no es posible hacer más fusiones de este tipo, se realiza una fusión final
de las regiones que satisfacen el paso 2, pudiendo ser las regiones fusionadas de
diferentes tamaños.
La principal ventaja es que usa el mismo quadtree para la división y la fusión hasta la
etapa de fusión final.
TEMA 15. REPRESENTACIÓN
1. GENERALIDADES.
Una vez que una imagen está segmentada en diferentes regiones, es habitual
representarla y después describir esa representación de una forma que facilite su
posterior procesado mediante el ordenador.
La representación puede hacerse con dos enfoques distintos:
a) en términos de sus características externas (su contorno): características de
forma.
b) en términos de sus características internas (los píxeles que comprenden la
región): color y textura (propiedades de reflectividad).
Estas representaciones son invariantes a cambios en el tamaño, así como a traslaciones y
rotaciones.
Las técnicas de segmentación producen datos en bruto en forma de píxeles de un
contorno o una región. Algunas veces esos datos se utilizan directamente para obtener
descriptores. Lo habitual es utilizar esquemas que compacten los datos en
representaciones que son bastante más útiles en el cálculo de descriptores.
Algunos métodos de representación son:
- Códigos de cadena.
- Aproximaciones poligonales.
- Firmas.
- Lados del contorno.
- El esqueleto de una región.

2. CÓDIGOS DE CADENA.
2.1. Objetivos.
Los códigos de cadena permiten representar un contorno por medio de una sucesión
conexa de segmentos de longitud y dirección especificadas. Normalmente la
representación se basa en segmentos formados por grupos de píxeles que tienen
conectividad 4 u 8. La dirección de cada segmento se codifica utilizando un esquema de
numeración como el de la figura:
120 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

1 2
3 1

2 0 4 0

57
3 6
(a) (b)
Direcciones de: (a) código de cadena de 4 direcciones y
(b) código de cadena de 8 direcciones.
2.2. Métodos.
a) Teórico básico: Las imágenes se adquieren normalmente en un formato de
cuadrículas con igual espaciado en las direcciones x e y. Se podría generar
un código de cadena siguiendo un contorno, con un sentido dado (por
ejemplo, el de las agujas del reloj) y asignando una dirección a los
segmentos que conectan cada par de píxeles.
Los problemas de este método son los siguientes:
- la cadena de códigos resultante es normalmente bastante larga;
- cualquier pequeña perturbación a lo largo del contorno (debida al ruido
o a un segmentación imperfecta) origina cambios en el código -que
pueden no estar relacionados con la forma del contorno. Por eso se
suele utilizar el método siguiente.
b) Remuestreo del contorno: se vuelve a muestrear el contorno del objeto
seleccionando un espacio de cuadricula mayor. Según se recorre el contorno
se asigna un punto a cada nodo del cuadriculado, dependiendo de la
proximidad del contorno original a ese nodo.
La precisión de la representación del código resultante depende del
espaciado del cuadriculado de muestreo.
Dado un contorno (figura a) y una cuadrícula (figura b), se miran los puntos
que cortan a la rejilla. Se elige el nodo más cercano. Utilizando un código
de cadena de 4 direcciones se codifica su contorno (figura c), y siendo el
punto más grueso el punto de partida, el contorno será el camino externo
más corto que permita el cuadriculado de la figura b, es decir,
00333333323221211101101. En la figura d, se representa el código de
cadena que resultaría de utilizar 8 direcciones (076666553321212).
REPRESENTACIÓN 121

c) Generación mediante la división de frontera: se divide el contorno del


objeto en lados de igual longitud. Por simplicidad, se pueden tomar lados
con el mismo número de píxeles.
Se conectan los puntos inicial y final de los lados mediante líneas rectas y se
asigna a cada línea la dirección más cercana a una de las líneas del código
de cadena.
122 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

3. APROXIMACIONES LINEALES.
3.1. Generalidades.
Se utiliza un polígono para representar, con diferente precisión, el contorno de un
objeto.
Para una curva cerrada, se consigue una aproximación exacta cuando el número de
lados del polígono es igual al número de puntos del contorno, de forma que cada par de
puntos adyacentes define un lado del polígono.
El objetivo práctico es captar la esencia de la forma de un contorno con un polígono
del menor número posible de lados.
Se utilizan dos técnicas: el cálculo del polígono de perímetro mínimo y técnicas de
división.

3.2. Polígono de perímetro mínimo.


Para calcular el polígono de perímetro mínimo, se realiza lo siguiente:
1. Se encierra el contorno dentro de un conjunto de células concatenadas. El
conjunto de células actúa como un canal y el contorno, como una goma
elástica.
2. Se tensa la tira de goma (contorno), produciendo un polígono de
perímetro mínimo que se adapta a la geometría establecida por la
sucesión de células.

3.3. Técnicas de división.


Para dividir un contorno en un número de lados, se subdivide sucesivamente el lado en
dos partes hasta que se satisfaga un criterio dado
Este método calcula la distancia perpendicular máxima desde un lado del contorno a
la línea que une dos extremos. Si excede de un umbral preestablecido, el punto más
lejano se convierte en un vértice, subdividiendo así el lado en dos sublados. En caso
contrario, se ha encontrado ya el polígono buscado.
REPRESENTACIÓN 123

La ventaja que tiene es que busca puntos de inflexión destacados. Para contornos
cerrados, los mejores puntos de inicio suelen ser los dos puntos mas separados.
Un ejemplo es que se muestra en la figura. Dado el contorno de un objeto (a), se
subdivide mediante una línea contínua tomando los puntos más separados. El punto c
tiene la mayor distancia perpendicular desde el lado superior a la línea ab. Igual ocurre
con el punto d, que tiene la mayor distancia perpendicular desde el lado inferior a la
línea ab. Como dichas distancias son mayores que el umbral dado (0,25 veces la
longitud de ab), c y d pasan a ser nuevos vértices del polígono. La figura (d) es el
polígono final, ya que ningún punto de los nuevos lados del contorno creados en la
figura (c) tienen una distancia perpendicular (a la recta de su lado) que exceda el
umbral.

4. FIRMAS.
4.1. Objetivo.
Consiste en representar un contorno mediante una función unidimensional.

4.2. Métodos.
a) Distancia ángulo: Se representa la distancia desde el centro al contorno
como una función del ángulo. Es invariante a la traslación, pero varía con la
rotación y la escala.
124 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

b) Ángulo entre tangente y línea de referencia: Se recorre el contorno y se


dibuja el ángulo que forman una línea tangente al contorno y una línea de
referencia como una función de posición a lo largo del contorno.
La firma resultante contendrá información acerca de las características
básicas de la forma (por ejemplo, las líneas rectas del contorno, por ser
constante en ellas el ángulo tangente, se representarán mediante segmentos
horizontales en la curva de representación).
c) Función de densidad de pendiente: Es una variación del método anterior.
Es un histograma con los valores de los ángulos tangentes. Como un
histograma es una medida de concentración de valores, esta función
responde con fuerza a secciones del contorno con ángulos tangentes
constantes –lados rectos o casi rectos-, y tiene valles profundos en las
secciones con ángulos de variación rápida –esquinas o inflexiones agudas.

4.3. Normalización.
1) Normalización a la rotación.
Se quiere encontrar un modo de seleccionar el mismo punto de partida para
generar la firma, independientemente de la orientación de la forma.
a) Seleccionar como punto de partida el punto más alejado del centro
(siempre que ese punto sea único).
b) Seleccionar el punto del eje propio principal (mayor) más alejado del
centro. Requiere más cálculo que el anterior, pero es más consistente.
c) Obtener el código de cadena del contorno y utilizar después la
normalización del código a la rotación.
2) Normalización al escalado.
Los cambios de tamaño de una forma producen cambios en los valores de
amplitud de la firma correspondiente. Los métodos de normalización al
cambio de escala pretenden eliminar la dependencia del tamaño pero
conservar la forma fundamental de las formas de onda.
Métodos:
a) Escalar funciones en un rango
Se escala todas las funciones de firma de manera que sólo tomen
valores dentro de un intervalo cerrado (por ejemplo [0,1]). Se coge el
valor mayor y se dividen todos los puntos entre él.
Es una técnica más simple, pero al depender únicamente del máximo y
del mínimo el ruido puede introducir errores.
b) División entre la varianza
Se divide cada una de las muestras tomadas del contorno para
construir la firma (se realiza un muestreo a intervalos regulares de T)
por la varianza de la firma.
Sólo se puede utilizar si la varianza no es cero o tan pequeña que cree
problemas de cálculo.

5. LADOS DEL CONTORNO


Consiste en descomponer un contorno en lados. Se reduce la complejidad del contorno
y se simplifica el proceso de descripción. Está especialemente indicado cuando el
REPRESENTACIÓN 125

contorno presenta concavidades (una o más) significativas que contienen información


sobre la forma.
En esos casos, se emplea el cerco convexo de la región abarcada por el contorno
para descomponer dicho contorno.

5.1. Cerco convexo.


El cerco convexo H de un conjunto arbitrario S es el conjunto convexo más pequeño
que contiene a S. El conjunto diferencia H-S se denomina deficiencia convexa D del
conjunto S.
Un conjunto convexo, en un espacio afín real, es aquel al que siempre que le
pertenezcan dos puntos, también le pertenecen todos los puntos del segmento que los
tiene por extremos, es decir:
A ⊂ E es convexo si se verifica: (p ∈ A, q ∈ A) ⇒ [p,q] ⊂ A

Por ejemplo, dado un objetos S y representando las regiones sombreadas como D, para
realizar una división del contorno, se sigue el contorno de S y se marcan los puntos en
los que se realiza una transición hacia dentro o hacia fuera de una componente de la
deficiencia convexa (línea tangente a las partes más prominentes, que pasa a ser un lado
del contorno). Una vez dividido, se puede buscar una función que aproxime cada curva
(“lado”). Será un polígono de regresión de orden 2, 3, etc. Para los más sencillos, será
una recta.
La figura b) muestra el resultado. Es independiente de la orientación y del tamaño de
la región.

6. ESQUELETO DE UNA REGIÓN.


Hasta ahora se han visto formas de representar un contorno. La siguiente técnica,
permite representar las regiones de una imagen, sus características, además de su
contorno.
Una aproximación para representar la forma estructural de una región plana consiste
en reducir esta región a un grafo. Una posibilidad es conseguir el esqueleto de la región
mediante un algoritmo de reducción (también llamado de esqueletonización)

6.1. Transformación del eje medio.


El esqueleto de una región puede definirse mediante la transformación del eje medio
(MAT, Medial Axis Transformation).
El algoritmo MAT de una región R con borde B es el siguiente:
Para cada punto p de R, se encuentra su vecino más próximo en B.
126 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Si p tiene más de un vecino de estos, se dice que pertenece al eje medio


(esqueleto de R).
El concepto de “más próximo” depende de la definición de una distancia, y por tanto,
los resultados de una operación MAT están influidos por la elección de una medida
de distancia.
Este método proporciona un esqueleto atrayente, pero es prohibitivo en términos de
cálculo. Por eso, se suelen utilizar otros algoritmos para la MAT. En la figura
siguiente, se ha utilizado la distancia euclídea.
TEMA 16. DESCRIPCIÓN
1. DESCRIPTORES DE CONTORNO.
1.1. Descriptores sencillos.
a) Longitud.
Una aproximación de su longitud se obtiene contando el número de píxeles
a lo largo del contorno. Esta información, unida con la de los lados
(dirección, número de píxeles, etc.) puede ser útil para describir una
imagen.b
b) Curvatura.
Se define como el ritmo de variación de la pendiente. Es difícil obtener
medidas fiables de curvatura en un punto. Se puede emplear la diferencia
entre las pendientes de segmentos adyacentes del contorno (que han sido
representados por líneas rectas) como un descriptor de la curvatura en el
punto de intersección de los segmentos. De esta forma, se obtiene la
curvatura de puntos significativos, como, por ejemplo, los vértices de un
polígono. Se puede querer indicar si un segmento es cóncavo/convexo o
bien si un segmento es recto o corresponde con una esquina.
128 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Por ejemplo, si se recorre el contorno en el sentido de las agujas del reloj:


a) Un vértice “p” parte de segmento convexo si el cambio de pendiente en p es
positivo. Si es negativo, parte de segmento cóncavo.
b) Utilizando intervalos: p parte de un segmento casi recto si la variación es
menor de 10º, o un punto de esquina si la variación pasa de 90º.
En la figura, dado el punto b, el segmento cb forma un ángulo de 120º mientras que el
segmento bd, forma un ángulo de 180º. Al restarlos da un número negativo (cb – bd =
-60º), por lo que cb es cóncavo. Análogamente:
Punto d: bd – da = 180 – 100 = 80 > 0 El segmento bd es convexo.
Punto a: da – ac = 100 – 0 = 100 > 0 El segmento da es convexo.
Punto c: ac – cb = 180 – 280 = -100 < 0 El segmento ac es cóncavo.

1.2. Números de forma.


El número de forma de un contorno, basado en el código de 4-direcciones, se define
como la primera diferencia de módulo más pequeño.
El orden n de un número de forma se define como el número de dígitos de su
representación. n es par para un contorno cerrado y su valor limita el número de
posibles formas.
En la figura siguiente se observan todas las formas de orden 4, 6 y 8, junto con sus
representaciones de codificación en cadena, las primeras diferencias y sus
correspondientes números de forma. Las primeras diferencias se calcularon tratando los
códigos de cadena como una serie circular. Aunque la primera diferencia de un código
de cadena es independiente de la rotación, en general el contorno codificado depende de
la orientación del cuadriculado.

1.2.1. Normalizaciones al punto de inicio y a la rotación.


El código de cadena de un contorno depende del punto de partida. La normalización
pretende que se exprese de una forma única. Las normalizaciones son exactas si los
contornos son invariantes a la rotación y al cambio de escala, lo cual ocurre pocas
veces.
DESCRIPCIÓN 129

a) Normalización directa: Dado un código de cadena generado empezando en


una posición arbitraria, se trata como una serie circular de números de
dirección. Se define el punto de partida de modo que la serie de números
resultantes formen un entero de modulo mínimo. Es invariante al punto de
inicio.
Por ejemplo, dada la cadena 312012312000133002, el entero de módulo
mínimo sería 000133002312012312.
b) Normalización por rotación: Se utiliza la primera diferencia del código de
cadena en vez del propio código. Esta primera diferencia se obtiene
contando (en sentido contrario a las agujas del reloj) el número de
direcciones que separan dos elementos adyacentes del código.
También puede tratarse el código como una serie circular. El primer
elemento de la diferencia se calcula utilizando la transición entre los
componentes último y primero de la cadena.
Por ejemplo, si se tiene 0 0 0 1 3 1 2 1 3 2 1, y el código es de 4 direcciones,
la primer diferencia sería 0 0 1 2 2 1 3 2 3 3.
1

2 0

0
1
0 0 0 0 3 0000103332122221
1 3 3000133003310003
2 2 2 2 0001330033100033
3
1
2
0
1 3

1 3
0333303222101111
1 3 3300013300331000
0001330033100033
1 3
0 0
1 3

2 2 2

1.2.2. Normalización a la orientación del cuadriculado.


Para normalizar la orientación del cuadriculado, se definen los siguientes conceptos:
• Eje mayor: segmento de recta que une los dos puntos del contorno más
separados entre sí.
• Eje menor: perpendicular al eje mayor y de tal longitud que se podría
formar un rectángulo que contenga exactamente al contorno (llamado
rectángulo básico).
130 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

• Excentricidad: relación entre el eje mayor y el eje menor


En la mayor parte de los casos se obtendrá un único número de forma alineando el
cuadriculado del código de cadena con los lados del rectángulo básico.
Para obtener un orden de forma deseado, se halla el rectángulo de orden n cuya
excentricidad se aproxime mejor a la del rectángulo básico para un contorno dado y se
utiliza este nuevo rectángulo para establecer el tamaño del cuadriculado.
Si, por ejemplo, n=12, todos los rectángulos de orden 12 son 2x4, 3x3 y 1x5. Si la
excentricidad del rectángulo 2x4 se acopla mejor a la del rectángulo básico para un
contorno dado, se establece un cuadriculado 2x4 centrado en el rectángulo básico y se
obtiene el código de cadena.
El número de forma se deduce de la primera diferencia del código de cadena.
Aunque el orden del número de forma resultante normalmente es igual a n, debido al
modo en que se seleccionó el espaciado de la cuadrícula, los contornos con depresiones
comparables a este espaciado pueden producir números de forma de orden mayor que n.
En este caso, se especifica un rectángulo de orden menor que n y se repite el
procedimiento hasta que el número de forma resultante sea de orden n.
Por ejemplo, si se especifica n = 18 para el contorno de la figura (a), para obtener un
número de forma de este orden es necesario seguir los pasos descritos anteriormente.
1) Encontrar el rectángulo básico, como se muestra en la figura (b).
2) El rectángulo más próximo de orden 18 es un rectángulo de 3 x 6, siendo
necesario subdividir el rectángulo básico como se ve en la figura (c), donde
las direcciones del código de cadena se alinean con el cuadriculado
resultante.
3) Finalmente se obtiene el código de cadena y se utiliza su primera diferencia
para calcular el número de forma, como se muestra en la figura (d).
DESCRIPCIÓN 131

Código de cadena: 0 0 0 0 3 0 0 3 2 2 3 2 2 2 1 2 1 1
Diferencia: 3 0 0 0 3 1 0 3 3 0 1 3 0 0 3 1 3 0
Número de forma: 0 0 0 3 1 0 3 3 0 1 3 0 0 3 1 3 0 3

1.3. Descriptores de Fourier.


Dado un contorno digital de N puntos en el plano xy (una figura).Se parte de un punto
arbitrario (x0, y0), y al recorrer el contorno, se encuentran los pares de coordenadas
(x0, y0), (x1, y1), (x2, y2),..., (xN-1, yN-1). Estas coordenadas se pueden expresar en la
forma x(k) = xk y y(k) = yk.
Con esta notación, el propio contorno se puede representar como la serie de
coordenadas s(k) = [x(k), y(k)], para k = 0, 1, 2,..., N-1. Además, cada par de
coordenadas puede ser tratado como un número complejo tal que:
s(k) = x(k) + j y(k) para k = 0, 1, 2,..., N.
De esta manera se toma el eje x como eje real y el eje y como eje imaginario de una
serie de números complejos.
Aunque se haya reordenado la interpretación de la serie, no se ha cambiado la propia
naturaleza del contorno. Se ha convertido un problema bidimensional en uno
unidimensional.
La transformada discreta de Fourier de s(k) es:
1 N −1 2πuk
a (u ) = ∑ s ( k ) e− j N para u = 0, 1, 2,..., N-1.
N k =0
Los a(u) se denominan descriptores de Fourier del contorno.
La transformada inversa de Fourier de los a(u) restaura s(k):
N −1 2πuk
s (k ) = ∑ a(u ) e j N para k = 0, 1, 2,..., N-1.
u =0
Si en vez de todos los a(u) se utilizan únicamente los M primeros coeficientes (hacemos
una descripción del contorno con menos elementos), es equivalente a hacer a(n) = 0
para u > M-1 en la ecuación anterior. El resultado es la siguiente aproximación a s(k):
M −1 2πuk
sˆ(k ) = ∑ a (u ) e j N para k = 0, 1, 2,..., N-1.
u =0
132 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Por ejemplo, en la figura siguiente se observa un contorno cuadrado, que está formado
por N=64 puntos, y el resultado de utilizar los descriptores de Fourier para reconstruir
este contorno para varios valores de M. Se puede apreciar que el valor de M tiene que
estar próximo a 8 para que el contorno reconstruido tenga más parecido con un
cuadrado que con un círculo.

También se puede observar que no aparecen cambios en el proceso de definición de las


esquinas hasta que M está próximo a 56, momento en que los puntos de cada esquina
comienzan a aparecer en la serie.
Cuando M=61 las curvas empiezan a enderezarse, lo que, tras añadir otro coeficiente
lleva a una réplica del original.
Algunos coeficientes de orden inferior capturan la forma genérica, pero se necesitan
muchos más términos de orden superior para definir con precisión características más
acusadas, como esquinas y líneas rectas. En función de la precisión de los descriptores
utilizados, la representación será mejor o peor.
Los descriptores de Fourier elípticos se han utilizado, por ejemplo, en el
reconocimiento de dígitos manuscritos. Una forma cualesquiera se puede considerar
geométricamente como el resultado de mover adecuadamente una serie de elipses de
características. La figura siguiente muestra la reconstrucción de un dígito a partir de los
descriptores de Fourier elípticos de orden 1 al 10 y de los órdenes 15, 20, 30, 40, 50 y
100, respectivamente.

1.4. Momentos.
Dada una firma, se muestrea y se guardan las muestras en un vector de características.
Este proceso aunque es preciso, es más lento que utilizando otros métodos como los
momentos, que tratan a la firma como una variable aleatoria. Los momentos permiten
DESCRIPCIÓN 133

describir cuantitativamente la forma de los lados de un contorno y la forma de las


firmas.
Utilizando como ejemplo la figura que se muestra a continuación,
(a) muestra un lado de un contorno, y
(b) muestra el lado representado como una función unidimensional g(r) de una
variable arbitraria r.

Si se trata la amplitud de g como una variable aleatoria v y se forma un histograma de


amplitud p(vi), i = 1, 2,..., k, siendo k el número de incrementos de amplitud discretos,
se puede obtener el momento n-ésimo de v respecto a su media como:
k k
µn(v) = ∑ (vi − m) n p(vi ) donde m = ∑ vip(vi )
i =1 i =1

La cantidad m es la media o valor medio de v y µ2 su varianza.


Generalmente sólo se necesitan los primeros momentos para diferenciar firmas de
formas claramente distintas.
Un método alternativo consiste en normalizar g(r) por unidad de área y tratarlo como
un histograma. En este caso r se convierte en la variable aleatoria y los momentos son:
L L
µ n ( r ) = ∑ ( ri − m ) n g ( ri ) donde m = ∑ rig (ri )
i =1 i =1

En esta notación, L es el número de puntos del contorno y µn(r) está directamente


relacionado con la forma de g(r). Por ejemplo, el segundo momento µ2(r) mide la
dispersión de la curva respecto al valor medio de r, y el tercer momento µ3(r) mide su
simetría con respecto a la media. Se pueden utilizar simultáneamente las dos
representaciones del contorno (o de la firma).
Existen muchos tipos de momentos, como los momentos de Hu o los de Zernike. A
partir de la información que aportan, se puede reconstruir la forma de la imagen con
mayor o menor exactitud, en función del orden utilizado. En la figura se muestra la
reconstrucción de la imagen del dígito “5” a partir de los momentos de Zernike del
orden 1 hasta el 13:
134 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2. DESCRIPTORES DE REGIONES.
Dada una imagen, la descripción se realiza mediante sus características internas.
2.1. Números de Euler.
a) Figuras.
Los números de Euler son una medida de la topología de una imagen. Se
definen como el número de componentes conexas (C) de una imagen menos
el número de huecos (H: holes): E = C – H
El número de huecos es:
|1 – nº de componentes conexas en el complementario de la figura|
Puede verse como el número de objetos en una imagen menos el número de
huecos.
E=0 E = -1 E=1

A B H

E = 1 - 6 = -5 H = 1 – 7 = -6

b) Redes poligonales.
Las redes poligonales son figuras realizadas con líneas rectas. Cuando un
polígono está contenido en otro puede ser necesario diferenciar entre dos
tipos de regiones interiores de la red poligonal llamando a un tipo caras y al
otro huecos.
El número de Euler para una red poligonal es:
E=V–S+F=C–H
donde
V: número de vértices (vertexes).
S: número de lados (sides).
F: número de caras (faces).
En el ejemplo siguiente:
E=V–S+F=6–8+2=0
E=C–H=1–1=0
C = 1 (una región formada por las dos caras)
DESCRIPCIÓN 135

Caras

Hueco

E=0

2.2. Métricas.
Son generalizaciones de las medidas de distancia, habitualmente de la distancia Euclídea. Una
propiedad métrica cambiará si el plano de la figura se distorsiona.
a) Área (A): número de píxeles contenidos dentro de su frontera.
b) Perímetro (P): longitud de la frontera de la región. Es el número de píxeles que
forman la frontera. A partir de las coordenadas de los píxeles de la frontera, se
calcula de la siguiente forma:
P = ∑ ( xi − xi −1)2 + ( yi − yi −1)2
i
c) Compatibilidad (C): la compatibilidad de una región se define como la relación
entre el cuadrado del perímetro entre el área de la región. Es un valor sin
dimensiones siendo mínimo para una región en forma de disco.
2
C=P
A
d) Centro de gravedad ( x , y ) : es un punto representativo de la región.
a) Simple: se obtiene un valor no entero y se le asigna el mismo peso a
todos los píxeles.
∑ xi ∑ yi
i
x= y= i
A A
b) Ponderado: en ocasiones es interesante calcular el centro de gravedad
ponderando la posición del píxel con su valor de intensidad.
∑ f ( xi, yi ) xi ∑ f ( xi, yi ) yi
i
x= y= i
∑ f ( xi, yi ) ∑ f ( xi, yi )
i i
e) Redondez: razón entre el área y el eje mayor al cuadrado.
f) Enlongación: también denominada razón de aspecto, es la relación entre la
longitud y la anchura de una región.
Para un cuadrado = 1, se obtiene circunscribiendo un rectángulo a la región y
calculando la razón de aspecto del rectángulo circunscrito.
136 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

g) Excentricidad: cociente entre la longitud de los ejes mayor y menor.


h) Compacidad: cociente entre la raíz cuadrada del área y el eje mayor.
TEMA 17. RECONOCIMIENTO
1. CLASIFICACIÓN.

GEOMÉTRICOS ESTRUCTURALES
SUPERVISADO Reconomiento de cadenas
Paramétrico Reconomiento de árboles

Bayesiano Gramáticas

Lineales:
-Mahalanobis
-Euclídea

No Paramétrico
REDES NEURONALES
NO SUPERVISADO ARTIFICIALES

# clases conocido
# clases desconocido
basados en grafos

2. CARACTERÍSTICAS.
En el reconocimiento de imágenes se seleccionan los rasgos discriminantes de una
imagen, construyendo un vector de características que la represente. Esta etapa se
caracteriza por:
• ser una parte fundamental del procesamiento de imágenes;
• es difícil formalizarla.
Las características que se utilicen tienen que cumplir las siguientes propiedades:
1. Capacidad discriminante: deben separar lo más nítidamente posible las clases
existentes.
138 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2. Fiabilidad: los objetos de una misma clase tendrán la menor dispersión posible.
3. Incorrelación: las características no dependerán fuertemente de otras, ya que si
fuera así, no aportarían información. Viene determinada por el coeficiente de
correlación, que se calcula a partir de la matriz de covarianzas. Cuanto más
próximo a cero sea rij, más independientes son las características.
Cij
rij =
Cii Cij

4. Rapidez de cálculo.
5. Economía de cálculo.

3. MÉTODOS GEOMÉTRICOS.
Son aquellos que representan una imagen mediante un conjunto de características, que
se obtienen del muestreo y cuantificación de la imagen.

Adquisición de datos Extracción de Clasificación


características

patrón
Imagen Extracción de
Preprocesamiento Segmentación Clasificador
digital características

REPRESENTACIÓN NUMÉRICA Resultado

CLASE
FASE DE FUNCIONAMIENTO

FASE DE DISEÑO

Conjunto de Selección de Diseño del


muestras características clasificador

3.1. Patrones.
Un patrón es una descripción estructural o cuantitativa (geométrica) de un objeto o de
alguna otra entidad de interés en una imagen. Es una disposición de descriptores
(características).
Los patrones se agrupan en clases. Una clase será una familia de patrones que
comparten algunas propiedades. Se representa mediante w1, w2, ..., wM, donde M es el
número de clases. Cada clase se representa mediante uno o varios patrones prototipo.
Los patrones, en el caso de descripciones cuantitativas, se representan mediante
vectores, utilizando letras minúsculas en negrita (x, y, z, ...) y mostrándose en
columnas:
RECONOCIMIENTO 139

 x1 
 x 2
x= 
... 
 
 xn 
Cada componente xi, representa el i-ésimo descriptor y n es el número de descriptores.
T
De forma equivalente, se pueden representar también como x = (x1, x2, ..., xn) donde T
indica transposición. técnica de medida utilizada para describir el propio patrón físico.
Como las medidas obtenidas para cada característica varían en cada imagen, cada
componente del vector es una variable aleatoria y cada uno de sus valores es una
realización de dicha variable aleatoria.

El reconocimiento de patrones tiene como objetivo la clasificación de objetos en un


número dado de clases. Un patrón es un punto en el espacio de representación de los
patrones, que es un espacio cuya dimensión viene determinada por el número de
variables (características) consideradas. Los patrones pertenecientes a la misma clase
deben estar cercanos en dicho espacio de representación, y los de distintas clases estarán
en regiones diferentes.
Ejemplos.-
Descriptores simples. Descripción de 3 tipos de lirios (Iris setosa, Iris virginica e Iris
versicolor) mediante la medida de la longitud y la anchura de sus pétalos. Se utilizan
vectores bidimensionales, donde x1=anchura y x2=longitud.
Las tres clases de patrones, representadas por w1, w2 y w3 corresponden a cada
variedad. El problema está en seleccionar las características adecuadas para obtener
separabilidad entre clases.

Anchura Iris virginica


de los
pétalos
Iris versicolor

Iris setosa

Longitud de los pétalos

Descripción mediante firma. Se realizan los siguientes pasos:


1. Se muestrea la firma a n intervalos constantes, generando un vector de n
elementos denominado patrón.
2. Se utilizan los n primeros momentos de una firma como los componentes del
patrón vectorial.
140 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

3.2. Aprendizaje supervisado.


Se suelen utilizar los términos aprendizaje o entrenamiento para referirse al proceso de
construcción del clasificador. El aprendizaje supervisado requiere disponer de un
conjunto de patrones de los cuales se conoce la clase a la que pertenecen. A este
conjunto se le denomina conjunto de entrenamiento.
Primero se elige la dimensión del vector de características, que ha de ser lo más
reducida posible, especialmente si el conjunto de entrenamiento tiene pocos elementos,
para garantizar la generalidad del clasificador (ya que si hay muchas características
limitarán los grados de libertad) y reducir la dimensionalidad de los datos de entrada.
Si se considera que los patrones agrupados en el espacio de representación de
patrones corresponden con una clase, y cada clase tiene asociado un agrupamiento bien
diferenciado de los demás, el problema de la clasificación supervisada se reduce a
buscar superficies que separen los distintos agrupamientos. Esas superficies se
denominan superficies de decisión y determinan regiones de decisión, asociadas a cada
clase.
La búsqueda de estas regiones se puede realizar de dos formas, en función de si se
conoce o supone un determinado modelo estadístico para las clases.

3.2.1. Paramétrico.
Se supone un completo conocimiento a priori de la estructura estadística de las clases.
Por tanto, el aprendizaje se reduce a la estimación de los parámetros que determinan las
funciones de densidad de probabilidad de las clases. Las distribuciones de probabilidad
de las clases definen las fronteras de decisión. A los clasificadores así construídos se les
denomina clasificadores paramétricos.
a) Funciones de decisión: Un patrón desconocido x pertenece a la i-ésima clase de
patrones si, al sustituir la x en todas las funciones de decisión, di(x) toma el mayor
valor numérico.
T
Si x = (x1, x2, ..., xn) representa un patrón vectorial de dimensión n, para M clases
de patrones w1, w2, ..., wM, el problema básico en el reconocimiento de patrones por
decisión teórica consiste en encontrar M funciones de decisión d1(x), d2(x), ..., dM(x)
que cumplan que, si un patrón x pertenece a la clase wi, entonces di(x) > dj(x) con
j=1,2,...,M; j ≠ i
b) Frontera de decisión: La frontera de decisión que separa la clase wi de la wj viene
dada por valores de x para los que di(x) = dj(x) o, de otra forma di(x)-dj(x) = 0
Lo más habitual es hacer que la frontera de decisión entre dos clases sea la función
dij(x) = di(x)-dj(x) = 0
De esta forma, se verifica:
dij(x) > 0 para los patrones de la clase wi
dij(x) < 0 para los patrones de la clase wj
RECONOCIMIENTO 141

Ejemplos de fronteras de decisión:


- Clasificador paramétrico.
Representación de los prototipos de dos clases solapadas modeladas por una
función de densidad normal y la frontera de decisión entre ambas. Las
siguientes ecuaciones determinan a qué clase pertenece un patrón: -

R1 = { X ; d ( X ) = w1}equiv., R1 = { X ; g ( X ) > 0}
R2 = { X ; d ( X ) = w2 }equiv., R2 = { X ; g ( X ) < 0}

X2
g(x) > 0
R1
g(x) = 0
Clase 1 R1

g(x) < 0
R2

Clase 2

X1

Clasificador no paramétrico.
Representación de los prototipos de dos clases solapadas y fronteras de
decisión inducidas por un clasificador basado en un árbol de clasificación.

X2
Clase1

Clase2

Clase1
Clase2
X1

c) Clasificadores.
c1) Mínima distancia.
Si se supone que cada clase de patrones está representada por un vector
prototipo (o medio): mj = 1/ N ∑x con x ∈ wj j = 1,2... N
donde Nj es el número de patrones vectoriales de la clase wj y la suma se
realiza para todos los vectores. La clasificación de mínima distancia consiste
142 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

en determinar la pertenencia de un patrón vectorial desconocido x a una clase,


asignando el patrón a la clase del prototipo más próximo.
Las medidas de similitud que se basen en un vector de características pueden
utilizar una métrica o una medida de distancia, pensando en que cuanto mayor
sea la distancia entre dos imágenes, menos similares son. Una métrica tiene
las propiedades siguientes:
• Sus valores nunca son negativos. La distancia entre dos puntos será
igual a 0 si y sólo si los puntos son idénticos.
• Es simétrica. La distancia de A a B es la misma que la distancia de B a
A.
• Satisface la desigualdad triangular. La distancia de A a C nunca es
mayor que la suma de las distancias de A a B y de B a C, para cualquier
punto A, B y C.
La similitud se suele tomar como alguna función cuyos valores son
inversamente proporcionales a la distancia.
Una posibilidad sería, si d es la distancia, tomar la función exponencial e-d
como medida de similitud. Con esto, un vector de características que
estuviera a una distancia 0 de una consulta dada tendría una similitud de 1, y
todas las demás imágenes tendrían valores inferiores.
c.1.1) Métricas Lp.
1

 p
p

L p ( D1 , D2 ) = ∑ d1i − d 2i 
 i 
Es una de las medidas más utilizadas. Se definen mediante la
ecuación:Los valores más usados para p son:
p=1, al que se le llama distancia city block o Manhattan,
p=2 o distancia Euclídea,
p=∞ o distancia de la máxima dirección.
Distancia Euclídea:

δE ( A,B ) = (A X1 − BX 1 ) + (A
2
X2 − BX 2 )
2

Regla de decisión óptima del clasificador de distancia Euclídea:


Para clasificar un patrón X, se calcula la distancia Euclídea de X a
cada uno de los centros de las J clases y se le asigna la etiqueta de la
clase más cercana. La función de decisión será la siguiente:

Di ( x) = x t µ i − 12 µ i µ i = Wi x
t t
RECONOCIMIENTO 143

δE (A, B) = (A X 1
− B X1 )2 + (A X 2
− B X2 )2
X2 X2
B B
BB X2
x2

B x 2 - A X2

A X2 A
A
B x1 - A X1

X1
A X1 BX1 X1

A
Distancia B
X Euclídea entre los puntos A y B
X 2
2

R1
X2

R2

X1
Frontera de decisión

Clasificador Euclídeo para dos clases

c.1.2) Distancia Mahalanobis.


Se calcula mediante la siguiente ecuación:
∂2M (A, B) = (A-B) T ∑-1 (A-B)
donde Σ es la matriz de covarianzas y A y B, los vectores de
características. Esta distancia se utiliza cuando las matrices de
covarianza son similares.
Regla de decisión óptima del clasificador de mínima distancia de
Mahalanobis:
Para clasificar un patrón X, se calcula la distancia Mahalanobis de X
a cada uno de los centros de las J clases existentes y se asigna la
etiqueta de la clase más cercana.
Aunque las funciones de decisión son cuadráticas, la frontera es
lineal.
x ∈ R1 si d12(x) ≥ 0
x ∈ R2 si d12(x) < 0
144 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Frontera de decisión

La distancia de Mahalanobis está ponderada por la matriz de


covarianzas, es decir, considera la distinta dispersión de las variables
en el espacio.
En la figura siguiente se representan los contornos de
equiprobabilidad asociados a dos distribuciones normales con igual
media y diferente matriz de covarianza:

X2

µ2

A X1

µ1

Dos distribuciones normales con igual media y


diferente matriz de covarianza

En azul -elipses- se representa una distribución en la que las


variables presentan una alta correlación (tienen una covarianza
de valor alto valor -relativo-) y las circunferencias rojas,
muestran una distribución en la que las variables están
incorreladas.
Suponiendo que los contornos dibujados representan los mismos
valores de probabilidad:
- El más interno de los rojos –el de mayor probabilidad-
representa el mismo valor de probabilidad que el más
interno de los azules; el segundo de los rojos, el mismo
valor de probabilidad que el segundo de los azules, y así
sucesivamente.
RECONOCIMIENTO 145

- Si se considera la distribución azul (las elipses), todos los


puntos situados en la elipse más externa, por ejemplo,
están a la misma distancia (de Mahalanobis) del centro.
Así, los puntos indicados con A y B en la figura tienen la
misma distancia de Mahalanobis. Esto es así porque tiene
en cuenta la dispersión de la clase. Verifican que:
( A-µ) T ∑-1 (A- µ) = ( B - µ)T ∑-1 (B - µ)
c2) Coseno.
El patrón más cercano es el que forma el menor ángulo con el patrón
representante de clase. Este ángulo se obtiene a partir de la siguiente
ecuación:

∑ (t k * q k )
σ ( D, Q ) = k

∑ (t k ) 2 * ∑ (q k ) 2
k k

donde tk es el valor del término k en el vector de características de la imagen y


qk es el valor correspondiente en la consulta.

X2
X2

Bx2
B
BX
2

A
AX
A X22 α

AAXX11 BBXx1
1
XX2 1

Hay que tener en cuenta que el ángulo más pequeño es el que tiene el coseno
más grande.
Utilizando el coseno como referencia para hallar el elemento cercano, se
pueden obtener diferencias significativas con las demás distancias, ya que un
punto puede estar muy alejado pero en cambio ser el punto que forma el
ángulo más pequeño.
c3) Cuadráticos.
Son aquellos clasificadores en los que las fronteras de decisión se expresan
como una función cuadrática (círculos, elipses, parábolas, hipérbolas) a
diferencia de los lineales, cuya frontera de decisión es una recta. En general,
requieren un número de prototipos mucho mayor que un clasificador lineal.
Por eso, si no hay muchos prototipos y la dimensionalidad de los datos es
alta, los estimadores no son fiables y no se puede aplicar este tipo de
clasificadores.
146 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Frontera de decisión

c4) Correspondencia por correlación.


Aunque se puede formular de forma vectorial, es más intuitivo plantearlo con
imágenes o subimágenes. Este clasificador se utiliza para encontrar réplicas
de una subimagen w(x,y) de tamaño J x K dentro de una imagen f(x,y) de
dimensión M x N, donde J ≤ M y K ≤ N. En el caso de que se trabaje con una
única imagen, se llama función de autocorrelación. En el caso de que sean
imágenes distintas, se enfrenta la imagen que se quiere analizar con los
prototipos o plantillas que haya, y la mayor similitud corresponde a aquella
imagen que genera a una función de correlación de mayor valor.
La función de correlación es la siguiente:

c( s, t ) = ∑∑ f ( x, y ) ⋅ w( x − s, y − t )
x y
donde s=0,1,...,M-1, t=0,1,..,N-1 y el sumatorio se calcula para la región de la
imagen donde se solapan w y f.
Este clasificador presenta el inconveniente de que es sensible al valor de
f(x,y) –si se duplica f(x,y) se duplica c(s,t).
Para solucionar este problema, se normaliza el coeficiente de correlación
utilizando los valores medios de las imágenes ( w y f ( x, y ) ) en la región
coincidente con w. Los sumatorios se calculan para las coordenadas comunes
a f y w.

∑ ∑ [ f ( x, y ) − f ( x, y )][w( x − s, y − t ) − w ]
γ ( s, t ) = x y
1

 2
2

∑ ∑ [ f ( x, y ) − f ( x, y )] ∑ ∑ [w( x − s, y − t ) − w ] 
2

x y x y 
c5) Clasificador de Bayes.
Utiliza técnicas de clasificación óptimas minimizando la probabilidad de
cometer errores de clasificación. La función de decisión del clasificador de
Bayes viene dada por:
dj(x) = p(x /wj) P(wj) j=1,2,...,M
donde dj(x) es la probabilidad a posteriori (P(wj/x)), es decir la probabilidad
que un objeto representado por el vector de características x, pertenezca a la
RECONOCIMIENTO 147

clase wj. P(wj) es la probabilidad de que un patrón cualquiera sea de la clase


wj. p(x/wj) es la función de densidad de probabilidad condicionada de la clase
wj.
En el caso de un problema unidimensional (n=1), que incluye dos clases de
patrones (M=2) gobernados por funciones de densidad de probabilidad
gaussianas, con medias m1 y m2 y desviaciones típicas s1 y s2
respectivamente, las funciones de decisión de Bayes para una variable tienen
la forma:
( x−m j )2
1 −
2σ 2 j
d j ( x) = p( x / w j ) P( w j ) = e P( w j ) j = 1, 2
2πσ j
c6) Redes neuronales.
Las técnicas anteriores utilizan patrones de ejemplo para estimar parámetros
estadísticos de cada clase de patrón. Estos patrones, de los que se conoce a
qué clase pertenecen, y que se utilizan para estimar dichos parámetros, se
denominan patrones de entrenamiento. Al conjunto de patrones de una
misma clase se le denomina conjunto de entrenamiento.
Utilizan muchos elementos de cálculo elementales –y generalmente no
lineales- llamados neuronas, los cuales reciben un conjunto de señales de
entrada x1, x2, ..., xn (el vector X). Cada señal de entrada se multiplica por un
peso asociado a la conexión y después se calcula una suma ponderada para
determinar el nivel de excitación de la neurona. La salida de la neurona se
obtiene calculando el nivel de excitación mediante una función de activación.
Las neuronas se conectan entre sí formando redes, análogamente a como se
piensa que están interconectadas las neuronas en el cerebro. También se
denominan: neurocomputadoras, modelos de procesamiento paralelo
distribuido, sistemas neuromórficos, redes multicapa autoconfigurables,
modelos conexionistas, etc.
A partir de un conjunto de entrenamiento para cada clase, la red realiza un
aprendizaje, ajustando los pesos de las conexiones entre neuronas para que la
salida de la red se aproxime a la deseada. Para cada uno de los descriptores de
cada patrón de entrenamiento, la red le asigna un peso:
- Si los pesos asignados hacen que se clasifique correctamente cada
patrón en su correspondiente clase, no se modifica la asignación.
- En otro caso se modifica el vector de pesos según el algoritmo de
entrenamiento utilizado.
Una vez que se ha determinado la función de decisión (matriz de pesos), dado
un patrón, la red lo clasifica como perteneciente a una u otra de las clases
conocidas, aunque sea un patrón distinto a los que había en los conjuntos de
entrenamiento.

3.2.2. No paramétrico.
Si para calcular las regiones de decisión, no se supone un determinado modelo
estadístico (porque no se conozca o porque no se pueda asumir un modelo paramétrico
adecuado), el problema es más complejo y se puede abordar desde diferentes
perspectivas. Los prototipos definen las fronteras de decisión. A estos clasificadores se
les denomina clasificadores no paramétricos.
148 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Un método no paramétrico muy simple sería el del vecino más cercano, que consiste
en asignar a un patrón la clase del prototipo más cercano.

3.3. Aprendizaje no supervisado.


Este método construye clasificadores sin información a priori, es decir, a partir de
conjuntos de patrones de los que no se conoce su clase cierta. En ocasiones, ni siquiera
se conoce el número de clases.
El objetivo es encontrar y caracterizar los agrupamientos de los patrones para obtener
un conjunto de clases. Se suele utilizar para verificar la validez del conjunto de clases
informacionales para una clasificación supervisada.
Las técnicas utilizadas suelen denominarse métodos de agrupamiento o clustering y
se pueden definir como técnicas diseñadas para realizar una clasificación asignando
patrones a grupos de tal forma que cada grupo sea más o menos homogéneo y distinto
de los demás en el espacio de representación. El criterio de homogeneidad más simple
está basado en la distancia: se espera que la distancia entre los patrones de un mismo
agrupamiento sea significativamente menor que la distancia entre patrones de
agrupamientos diferentes. Generalmente, cada agrupamiento se caracteriza por su
centroide (media).

3.3.1. Número desconocido de clases.


El objetivo es estimar el número de clases. Se parte del máximo desconocimiento ya
que no conocen el número de agrupamientos a encontrar, ni siquiera se establece un
máximo para éste.
Únicamente requieren los parámetros específicos del algoritmo particular para
controlar su funcionamiento.
Los métodos más relevantes de este tipo son:
• Método adaptivo: utiliza un valor umbral para crear agrupamientos y una
fracción que determina la confianza. Cuando un patrón se asigna a un grupo,
se recalcula el centroide, pudiendo ocasionar que algunos patrones cambien
de grupo. Se repite el proceso y cuando no hay reasignaciones el algoritmo
se estabiliza y los grupos quedan definidos.
• Algoritmo de Batchelor y Wilkins (algoritmo de máxima distancia): utiliza
un umbral de distancia media para determinar si se crea un agrupamiento. A
diferencia del método anterior, este umbral varía en función de la distancia
media entre los agrupamientos existentes en un momento dado. El algoritmo
acaba cuando no se crean nuevos agrupamientos.

3.3.2. Número conocido de clases.


Estos algoritmos parten de la suposición de que se conoce el número de agrupamientos
que se van a encontrar o simplemente el número máximo de éstos. Son métodos
indirectos, basados en la búsqueda de la partición que minimiza el criterio de la suma
del error cuadrático.
Algunos de estos algoritmos fuerzan la mezcla de agrupamientos cercanos y también
fuerzan la división de agrupamientos dispersos.
Entre los algoritmos más relevantes están:
• Algoritmo de las K-medias: también se denomina algoritmo de las medias
móviles porque en cada iteración se recalculan los centros de los
agrupamientos cuando se asigna un patrón al agrupamiento más cercano.
RECONOCIMIENTO 149

• Algoritmo de agrupamientos secuencial: puede obtener un número de


agrupamientos menor que en caso anterior. Es un algoritmo incremental: se
parte de un único grupo y se van creando nuevos agrupamientos.
• Algoritmo ISODATA: Al igual que en el algoritmo de las K-medias, los
patrones se procesan repetidamente y en cada iteración se asignan al grupo
más cercano, recalculándose los centros de los agrupamientos después de
cada asignación. Se diferencia en que incorpora una serie de heurísticas con
tres objetivos:
- eliminar agrupamientos poco numerosos;
- mezclar agrupamientos cercanos;
- dividir agrupamientos dispersos.

3.3.3. Métodos basados en grafos.


Los métodos de agrupamiento anteriores comparten la desventaja de que el resultado
final depende del orden en que se presentan los patrones al algoritmo de agrupamiento.
Se puede argumentar en este sentido que el resultado final será más acertado si todos los
patrones pudieran considerarse simultáneamente. Los métodos de agrupamiento basados
en grafos se basan en esta premisa, considerando las relaciones de similaridad entre
todos los patrones empleados para el agrupamiento. La contrapartida es que,
forzosamente, se incrementa el coste computacional, tanto en tiempo de cálculo como
en la cantidad de espacio de almacenamiento requerido y rapidez de acceso.
• Algoritmo basado en la matriz de similaridad: la cual expresa la similaridad
entre cualquier pareja de patrones.
• Algoritmo basado en el árbol generador minimal: el algoritmo anterior
produce un conjunto numeroso de arcos. Los grafos resultantes pueden
simplificarse notablemente, reduciendo el conjunto de arcos hasta obtener un
conjunto más reducido que caracteriza cada uno de los subgrafos.

patrón
Imagen Reconocimiento Análisis
Preprocesamiento Segmentación
digital de primitivas sintáctico

REPRESENTACIÓN SIMBÓLICA Clasificación


y/o
descripción
FASE DE FUNCIONAMIENTO (Reconocimiento)

FASE DE DISEÑO (Aprendizaje)

Conjunto de Selección de Inferencia


muestras relaciones entre gramatical del
características clasificador
150 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

4. MÉTODOS ESTRUCTURALES.
Los métodos geométricos no consideran el contexto, es decir, la relación entre
diferentes patrones: en ocasiones, patrones complejos se pueden descomponer
recursivamente en patrones más simples hasta obtener componentes básicos.

4.1. Patrones estructurales.


Se utilizan cuando la pertenencia a una clase viene determinado por un conjunto de
medidas cuantitativas de cada característica junto con las relaciones espaciales entre las
características.En los métodos estructurales o sintácticos, un patrón se describe
mediante sus elementos básicos y unas reglas sintácticas (gramática) que especifican
cómo se pueden generar patrones válidos de una determinada clase. El problema se
reduce a determinar si un patrón pertenece al lenguaje generado por una gramática.

4.1.1. Cadenas.
Se utilizan para generar patrones de objetos cuya estructura se basa en conexiones
relativamente sencillas de elementos primitivos, asociadas normalmente a formas de
bordes o contornos.
Por ejemplo, si se tiene una escalera, y se definen los elementos primitivos a y b, un
patrón será una cadena de símbolos w = ...ababab...

a a

b a
b
a
b
a

a
b

4.1.2. Árboles.
Son más potentes que las cadenas. Son indicados para la mayoría de los esquemas de
ordenación jerárquica.
Por ejemplo, se pueden utilizar para: Representación del contenido de las regiones
segmentadas mediante la técnica de división y fusión de regiones (quadtree).
- Representación del contenido de fotografías aéreas
Escena

Tierra Fondo

Camino Casa Cielo Sol

Fachada Tejado

Ventanas Puerta
RECONOCIMIENTO 151

4.2. Técnicas.
4.2.1. Correspondencia de números de forma.
Se basan en la comparación de contornos descritos mediante números de forma. Es un
procedimiento análogo al concepto de mínima distancia aplicado a patrones vectoriales.
El grado de similitud (k) entre dos contornos A y B, es el mayor orden para el que
aún coinciden sus correspondientes números de forma.
Por ejemplo, para los números de forma de los límites cerrados representados por los
códigos de cadena de 4 direcciones, A y B poseen un grado k de similitud si:
s4(A) = s4(B), s6(A)=s6(B), s8(A)=s8(b), ..., sk(A)=sk(B),
sk+2(A) ≠ sk+2(B), sk+4(A) ≠ sk+4(B),....
donde s indica el número de forma y el subíndice indica el orden.
La distancia entre dos formas A y B es el inverso de su grado de similitud. Tiene
las siguientes propiedades:
D(A,B) ≥ 0
D(A,B) = 0 si A=B
D(A,C) ≤ máx [D(A,B), D(B,C)]
Se pueden comparar formas. Las más similares son aquellas que tienen mayor grado de
similitud o menor distancia entre ellas.

4.2.2. Correspondencia número de cadena.


Dados dos contornos, A y B, codificados mediante las cadenas representadas por a1,
a2,...an y b1, b2,...bn respectivamente. Si M representa el número de correspondencias
entre ambas cadenas, teniendo en cuenta que se produce una correspondencia en la
k-ésima posición si ak = bk, el número de símbolos que no se corresponden es (medida
de disimilitud o distancia):
Q = máx (|A|, |B|) – M
donde |arg| es la longitud (número de símbolos) de la representación en forma de cadena
del argumento. Se puede demostrar que Q=0 si y sólo si A y B son idénticos
M M
R= =
Q máx(| A |, | B |) − M

R es infinito si existe una correspondencia total y vale 0 cuando no hay


correspondencias entre los símbolos de A y B. Cuanto mayor es el valor de R, mayor
grado de correspondencia hay.
Interesan métodos para obtener el mismo punto inicial, es decir, que estén
normalizados.

4.2.3. Métodos sintácticos.


Son una de las técnicas más utilizadas en los problemas de reconocimiento de
estructuras. Se basan en:
- Especificar un conjunto de primitivas de patrones.
- Definir un conjunto de reglas –en forma de gramática- que gobiernen su
interrelación.
- Crear un reconocedor –denominado autómata- cuya estructura está determinada
por el conjunto de reglas que impone la gramática.
152 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Hay dos tipos:


1. Reconocimiento sintáctico de cadenas
2. Reconocimiento sintáctico de árboles
Se parte de que los objetos de interés ya han sido expresados en forma de cadenas
utilizando los elementos primitivos apropiados.
a) Gramática de cadenas.
Dadas dos clases, w1 y w2 cuyos patrones son cadenas de primitivas, cada primitiva es
un símbolo permitido del alfabeto de una determinada gramática, siendo una gramática
un conjunto de reglas sintácticas que controla la generación de sentencias construidas a
partir de los símbolos del alfabeto.
El conjunto de sentencias generadas por una gramática, G, se denomina lenguaje de
dicha gramática, y se indica mediante L(G).
Las sentencias son cadenas de símbolos (que, a su vez, representan patrones), y los
lenguajes se corresponden con las clases de patrones.
Cuando se trabaja con cadenas, se puede definir una gramática como:
G = ( N, Σ, P, S)
donde
N = Conjunto finito de variables denominadas no terminales.
Σ = Conjunto finito de constantes denominadas terminales.
P = Conjunto de reglas de reescritura denominadas producciones.
S = Símbolo inicial.
b) Gramática de árbol.
Se puede definir como:
G = ( N, Σ, P, r, S)
donde r es una función de categoría, que indica el número de descendientes directos de
un nodo cuya leyenda sea un terminal de la gramática.
Por ejemplo, dada la gramática:
G = ( N, Σ, P, S)
con
N = [A, B, S] (no terminales)
Σ = [a, b, c] (terminales)
P = [S → aA, A → bA, A → bB, B → c] (producciones)
Aplicando la primera producción y luego dos veces la segunda, se obtendría la cadena
siguiente:
S ⇒ aA ⇒ abA ⇒ abbA
Aplicando dos veces la producción segunda, y una vez la tercera y la cuarta, se
obtendría:
abbA ⇒ abbbA ⇒ abbbbA ⇒ abbbbbB ⇒abbbbbc
El lenguaje que genera esa gramática es:
L(G) = {ab*c | n ≥ 1}
G sólo es capaz de generar esqueletos como el de la figura, pero de longitud arbitraria:
RECONOCIMIENTO 153

(a)

b
a c
(b)

(c)

c) Proceso de reconocimiento.
Dadas dos gramáticas, G1 y G2, cuyas reglas sintácticas son tales que:
- G1 sólo permite la generación de sentencias correspondientes a los patrones
de la clase w1.
- G2 sólo permite la generación de sentencias correspondientes a los patrones
de la clase w2.
Para una sentencia que represente a un patrón desconocido, el reconocimiento consiste
en decidir en qué lenguaje se puede considerar como una sentencia válida.
- Si la sentencia pertenece a L(G1), se dice que el patrón pertenece a la clase
w1.
- Si la sentencia pertenece a L(G2), se dice que el patrón pertenece a la clase
w2.
Cuando existen más de dos clases de patrones, en el proceso existen más gramáticas (al
menos una por clase)
Si una sentencia pertenece a lenguajes de distintas clases, no se puede tomar una
decisión única. Si una sentencia no es válida en ningún lenguaje, se rechaza.
La función de las gramáticas consiste en indicar qué patrones son válidos (porque
pertenecer a un lenguaje determinado, el que genera esa gramática). La función de los
autómatas o máquinas de estados es reconocer si una sentencia pertenece a un lenguaje
dado (el que reconoce ese autómata).
TEMA 18. INTERPRETACIÓN
1. FUNDAMENTOS.
La interpretación automática de imágenes es compleja. Entre las dificultades que
aparecen están:
- El número elevado de datos que se tienen que procesar.
- La falta de herramientas básicas de procesado (que conviertan una matriz de
píxeles en una lista del contenido).
La solución se basa en el uso de restricciones:
a. Limitando la generalidad del problema: se simplifica el problema limitando
el número de circunstancias desconocidas. Si no se pueden controlar las
variables del problema, se limita el abanico y la precisión de los resultados
b. Intentando incorporar el conocimiento humano al proceso: eligiendo un
formalismo en el que se exprese el conocimiento.
Las técnicas que se utilizan para modelar el conocimiento son:
1. La lógica formal.
Está basada en el cálculo de predicados de primer orden. El conocimiento se
expresa como reglas lógicas que se pueden utilizar para demostrar o refutar la
validez de expresiones lógicas.
2. Las redes semánticas.
Son grafos dirigidos con leyendas y presentan formulaciones intuitivas en
términos de relaciones entre los elementos de una imagen. Los objetos se
representan como nodos de un grafo y las relaciones entre los mismos se
representan como arcos que conectan los distintos nodos y que poseen una
leyenda.
3. Sistemas de producción (sistemas expertos o sistemas basados en reglas).
Es la técnica más utilizada y permite la posibilidad de aplicar el conocimiento
humano de forma intuitiva, directa y gradual.
156 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2. SISTEMAS LÓGICOS (CÁLCULO DE PREDICADOS).


Los componentes de un sistema lógico son:
- Símbolos: predicados (átomos), funciones, variables y constantes.
- Conectivas lógicas.
- Cláusulas.
1. Símbolo predicado.
Representa una relación en el ámbito del discurso
Por ejemplo, en la cláusula:
“cinco es menor que diez” → MENORQUE(cinco, diez)
se tendría lo siguiente:
MENORQUE: símbolo predicado,
cinco, diez: símbolos constantes.
2. Símbolo función.
Es aquel símbolo que actúa como argumento, siendo a su vez función de otros
argumentos.
Por ejemplo:
CASADOS [padre (Juan), madre (Juan) → El padre de Juan está
casado con la madre de Juan.]
En este caso:
CASADOS: símbolo predicado,
madre, padre: símbolos función,
Juan: símbolo constante.
3. Símbolo variable.
Se denomina así a los símbolos cuyo valor no está definido, pudiendo
“contener” distintos valores constantes.
Por ejemplo:
DETRÁS(x, y) → x está detrás de y
siendo:
DETRÁS: símbolo predicado,
x, y: símbolos variables.
Las cláusulas son combinaciones de átomos (símbolos predicado) mediante conectivas
lógicas.
Las conectivas lógicas son:
∧ AND / Y
∨ OR / O
∼ NOT / NEGACION
⇒ IMPLICA
∀x “para todo x”
∃x “existe un valor de x”
Por ejemplo, supongamos el caso de un aeropuerto comercial. La siguiente información
forma parte de la base de conocimiento de un sistema para la interpretación de imágenes
aéreas:
INTERPRETACIÓN 157

1) Todas las imágenes de los aeropuertos comerciales contienen pista(s) de


aterrizaje.
2) Todas las imágenes de los aeropuertos comerciales contienen aviones.
3) Todas las imágenes de los aeropuertos comerciales contienen algún edificio.
4) En un aeropuerto comercial, al menos uno de los edificios es el edificio de
una terminal.
5) Un edificio rodeado de aviones, de tal forma colocados que apuntan a dicho
edificio, es una terminal.
Un modelo de un aeropuerto comercial en forma clausulada es el siguiente:
(∀x) [CONTIENE(x, pista(s)) ∧ CONTIENE(x, aviones) ∧
CONTIENE(x, edificio(s)) ∧ APUNTA-A(aviones, edificio(s)) ] ⇒
⇒ AEROPUERTOCOM(x)
Si se obtiene una imagen aérea y se dispone de un sistema que pueda reconocer los
diferentes objetos, utilizando la lógica de predicados podría concluirse que la fotografía
corresponde o no a un aeropuerto comercial.

3. REDES SEMÁNTICAS.
Las redes semánticas son grafos dirigidos y etiquetados, en los que los nodos
normalmente representan objetos o variables y los arcos representan relaciones entre
dichos nodos.
Presentan las siguientes características:
- Ofrecen una forma alternativa de realizar tareas de interpretación.
- La construcción de una red semántica a partir de expresiones en forma
clausulada es inmediata.
Cada cláusula se representa como una partición de la red semántica, como un subgrafo
independiente.
Los nodos de la red contienen variables y constantes (normalmente, objetos). Los
arcos orientados y etiquetados representan relaciones binarias entre dichos nodos.
Un arco se dibuja como
- una flecha de una sola punta si representa una relación en la parte de la
conclusión (derecha) de la cláusula;
- una flecha con dos puntas si representa una relación en la parte de la condición
(izquierda) de una cláusula.

edificio(s) APUNTA-A
AEROPUERTOCOM

aviones
CONTIENE
x

CONTIENE
CONTIENE

pista(s) aviones
158 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

4. SISTEMAS EXPERTOS DE PRODUCCIÓN.


Las características de estos sistemas son las siguientes:
- Ofrecen un enfoque alternativo a los otros sistemas.
- Requieren una concordancia para identificar la inferencia a realizar, al igual
que los otros, pero las acciones posteriores posibles son mucho más
generales.
- Se basan en reglas y su encadenamiento para, mediante la inferencia, llegar
a conclusiones.
Los componentes básicos son:
1. Procesador de lenguaje.
Es la interfaz de comunicación entre el usuario y el sistema.
El usuario interactúa con el sistema experto mediante un lenguaje orientado al
problema, que normalmente está en un formato similar al lenguaje natural pero
con restricciones. El procesador de lenguaje interpreta las entradas
suministradas por el usuario y da formato a la información generada por el
sistema.
2. Justificador.
Explica al usuario las diversas acciones realizadas por el sistema. Puede
contestar a preguntas relativas al camino seguido para llegar a una conclusión,
o los motivos por los que se rechazó una alternativa.
Desempeña un papel crucial en las etapas iniciales de diseño y depuración de
un sistema experto.
3. Pizarra.
Espacio de trabajo utilizado para almacenar elementos como pueden ser:
- los datos sobre un problema específico,
- las hipótesis de trabajo,
- las decisiones intermedias.
A menudo se utilizan los términos de memoria temporal y memoria a corto
plazo haciendo referencia a ella.
4. Base de conocimiento.
Contiene conocimiento procedimental, visual y universal. También contiene las
reglas que necesita el sistema para resolver un problema.
5. Mecanismo de control.
Contiene conocimiento general para la resolución de problemas, así como
estrategias para la resolución de conflictos.
El conocimiento general para la resolución de problemas, llamado motor de
inferencias, contiene la esencia de cómo concordar las reglas, conocimiento,
algoritmos y hechos actualmente conocidos sobre una tarea con el fin de poder
llegar a (o inferir) una solución.
El mecanismo de control actúa como estratega en la selección y ejecución de
herramientas para la resolución de un problema.
INTERPRETACIÓN 159

Usuario

Procesador Base de
del lenguaje conocimiento

Justificador

Pizarra Controlador

Siguiendo con el ejemplo del aeropuerto comercial, se tiene la siguiente cláusula que
permite decidir si una imagen corresponde a un aeropuerto comercial:
si x es una imagen y
x contiene pista(s) y
x contiene aviones y
x contiene edificio(s) y
(algunos) aviones apuntan al (los) edificio(s)
entonces x es una imagen de un aeropuerto comercial.

Al sistema se plantearía una consulta del tipo: ¿es ésta la imagen de un aeropuerto? La
consulta ofrece al sistema el primer hecho: “x es una imagen”. A continuación el
controlador intentará emparejar las condiciones de aquellas reglas que comiencen por
“si x es una imagen”.
El controlador gestionará todos los recursos del sistema (adquisición,
preprocesamiento, segmentación, descripción, etc.) necesarios para localizar ejemplos
de los elementos requeridos para que se satisfagan las condiciones de la regla.
Cuando se hayan encontrado las pistas, empezará a buscar aviones y luego edificios
y después comprobará si algunos aviones apuntan a los edificios.
Cuando el sistema compruebe que se cumplen o no todas las condiciones, dará su
respuesta: es un aeropuerto comercial –en caso afirmativo-, y no es un aeropuerto
comercial –en otro caso.
TEMA 19. COMPRESIÓN
1. GENERALIDADES.
1.1. Objetivo.
La compresión de datos tiene como finalidad reducir el número de bytes necesarios para
representar un conjunto de datos. Las ventajas que se obtienen son:
Se necesita menos memoria para almacenar los datos.
Se requiere menos tiempo para transmitir los datos (a través de una línea de
comunicación).

1.2. Métodos de Compresión.


Existen tres tipos de métodos de compresión de datos:
Método 1.- Transformación.
Se transforman los datos en otro conjunto de datos equivalente y menor que
el original.
Método 2.- Reducir la precisión.
Se reduce la precisión utilizada para cada uno de los datos originales, lo que
reduce el número de bits necesario para representar a cada uno de ellos.
Método 3.- Minimizar el número de bits.
Se codifica cada dato de manera que el número de dígitos binarios
necesarios para representar el conjunto total, sea el menor posible.

2. TRANSFORMACIÓN.
2.1. Objetivo.
Este método reduce el tamaño de un conjunto de datos aprovechándose de los patrones
de repetición que aparezcan. Si no hay repeticiones, el conjunto de datos es totalmente
aleatorio, con lo que al aplicar un método de compresión de este tipo, se incrementará el
tamaño del conjunto de datos.
La búsqueda de los patrones puede realizarse en una, en dos o en tres dimensiones,
según se procesen los datos como:
- Una lista secuencial.
162 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

- Una matriz bidimensional.


- Una lista secuencial de matrices bidimensionales.

2.2. Búsqueda de patrones en una dimensión.


Las técnicas que se utilizan son:
i) Reducir el número de datos: se utilizará un algoritmo de codificación en función
de que haya:
- Datos idénticos adyacentes repetidos: se utiliza la codificación RLE.
- Datos no idénticos adyacentes repetidos: se usa la LZW.
ii) Reducir la magnitud de los datos: para ello se reemplazan los datos por la
diferencia en relación a valores anteriores (Diferenciación).

2.2.1. Run – Length Encoding.


Este método busca valores idénticos repetidos en una lista. Los datos se comprimen
reemplazando la secuencia repetida con dos valores: longitud de la secuencia, dato.
Si no hay repeticiones, al aplicar este método de compresión se incrementará el
tamaño del conjunto de datos.
Datos originales (14 bytes)

125 125 32 32 32 32 15 15 15 15 15 15 32 15

2 125 4 32 6 15 1 32 1 15
Datos comprimidos (10 bytes)

Existen varios esquemas o versiones de este método:


1. PackBits
2. SunRaster
3. PCX
4. GEM/IMG
5. RLE

2.2.2. LZW Encoding.


La compresión de repeticiones de secuencias, se realiza buscando repeticiones de las
mismas secuencias formadas por conjuntos de valores diferentes entre sí.
Se asigna un código único a la secuencia que se repite y luego se almacena en el
conjunto de datos codificados. Los códigos y las secuencias de datos asociadas forman
un CodeBook que se almacena conjuntamente con los datos codificados. Esto permite a
un decodificador conocer los datos correspondientes a cada código.
COMPRESIÓN 163

225 230 235 40 225 230 235 10 40 225 230 235 10 40

Cod1 40 Cod1 Cod2 Cod1 Cod2


Datos comprimidos (6 bytes)
Cod 1 y Cod2 representan códigos únicos

El método LZW, desarrollado por Lempel-Ziv y Welch, evita la necesidad de recordar


el CodeBook. El codificador y el decodificador construyen idénticos CodeBook al
procesar secuencialmente un flujo de datos.
El codificador:
• Genera un código para un patrón sólo cuando lo encuentra por segunda vez.
• La primera vez que encuentra una secuencia, la coloca en su CodeBook y
devuelve la misma secuencia sin ningún tipo de codificación.
• Cuando encuentra la misma secuencia por segunda vez genera un código para
este patrón a partir de su CodeBook.
El decodificador:
• Encuentra una secuencia, cuando aparece por primera vez, la pone en su
CodeBook, y genera un código (el mismo que creó el codificador).
• Cuando aparece el código de la secuencia anterior, la reconoce al haber
generado ese mismo código en su CodeBook para esa secuencia.
Este método se utiliza en el compresor ARC y en los archivos de tipo Gif, Postcript y
TIFF.

2.2.3. Diferencias.
Intenta reducir el tamaño de cada uno de los datos individuales. Cuanto menores sean
los datos, la codificación se podrá realizar utilizando menos bits.
En una imagen, los niveles de gris de píxeles vecinos suelen tener valores parecidos.
En vez de almacenar los valores del nivel de gris, se almacena la diferencia entre los
valores. En muchos casos, la diferencia tiene una magnitud menor que el valor original.
Por ejemplo, teniendo como datos originales los siguientes:
123 125 127 128 132 130 136 139 141 137 136 135
Se codifican, guardando las diferencias entre los datos. El primer dato no se modifica:
123 2 2 1 4 -2 6 3 2 -4 -1 -1
Se utiliza en: JPEG, LANDSAT, MPEG y CCITT H.261; el ratio de compresión que se
consigue es de 1.5 a 3.

2.3. Búsqueda de patrones en dos dimensiones.


2.3.1. Fractales.
Este método busca un conjunto de datos pequeño y sencillo que, aplicándole
transformaciones repetidamente, sea similar al conjunto de datos original. La
164 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

compresión se realiza almacenando este pequeño conjunto de datos y las


transformaciones.
El inconveniente que presenta es que necesita mucho tiempo de procesamiento para
encontrar el conjunto reducido de datos.
Las compresiones típicas que se obtienen son 50:1 ó 100:1. En situaciones idóneas se
consigue hasta un 1000:1.

2.3.2. Diferencias bidimensionales.


a) Imágenes en blanco y negro.
La mayoría de los píxeles “negros” están agrupados juntos. Cuando se llega al final
de un grupo de píxeles “negros”, se salta sobre el bloque de píxeles blancos hasta el
próximo de negros. La codificación se basa en 9 posibles casos que indican la
relación entre la línea de píxeles anterior y la actual.
b) Imágenes en color.
Utiliza el mismo sistema que la codificación por diferencias en una dimensión,
excepto que el valor de la diferencia no se calcula necesariamente sobre el valor
anterior del píxel de la misma línea.
Este método lo utilizan los formatos JPEG, MPEG y CCITT H.261.

2.3.3. DCT (Discrete Cosine Transform).


Este método realiza los siguientes pasos:
• Se divide la imagen en 8 x 8 bloques.
• Se aplica la DCT obteniendo, para cada bloque, un nuevo conjunto de valores.
• La transformada inversa (IDCT) da la vuelta al proceso obteniendo los valores
originales.
Se caracteriza por ser una compresión con pérdidas debido a:
• Realización de cálculos repetidos con precisión limitada.
• No se puede obtener exactamente los coeficientes del coseno para números
transcendentes.
Se utiliza en: ACATS (TV alta definición), JPEG, MPEG y CCITT H.261.

3. REDUCIR LA PRECISIÓN.
En ocasiones los datos gráficos tienen más precisión de la necesaria
Por ejemplo:
• Al insertar una imagen en color en un trabajo impreso en blanco y negro
• Si se tiene una imagen con más resolución de la que el ojo humano puede
distinguir.
Cuando se conoce la aplicación final de los datos, puede utilizarse la reducción de la
precisión para comprimirlos.
Los métodos que se utilizan son:
a) Eliminar el último dígito significativo.
Dada una línea de una imagen escaneada:
125 126 127 125 126 125 126 127 126 125 125 126 127 125 126
Se almacenan los valores sin el último dígito significativo. Para recuperarlo, se
rellena con 0.
COMPRESIÓN 165

b) Factor de división constante (cuantización).


Se puede reducir los valores utilizando un factor de división constante que
divida el rango de los valores en “bloques”. Si tenemos como datos originales
los siguientes:
0 1 2 3 4 5 6 7 8 9 10 12 13 14 15, ...
dividiendo entre 4, se reduciría la precisión:
0123 →0
4567 →1
8 9 10 11 →2
12 13 14 15 → 3
Este método se utilizado en los formatos JPEG y MPEG.

4. MINIMIZAR EL NÚMERO DE BITS.


La compresión se realiza reduciendo al mínimo el número total de bits que se necesitan
para representar los datos del conjunto original.
El proceso de codificación asigna un único valor del código a cada dato.
Dependiendo del esquema que se use, un valor del código puede representar un único
dato o una secuencia del conjunto de datos original.
Un archivo puede contener más de un conjunto de datos, teniendo cada uno su propio
conjunto de códigos.
a) Códigos de desplazamiento.
Cuando, dentro de un conjunto de datos, la mayoría de las veces se utiliza sólo
un pequeño subconjunto, se puede seleccionar un código cuya longitud pueda
representar únicamente a este subconjunto.
A los valores que estén fuera del subconjunto frecuentemente utilizado se les
puede asignar un código de overflow indicando con él que se utilizará otro
código para esos datos.
La compresión se realiza al codificar la mayoría de los valores con un conjunto
de bits mínimo.
Por ejemplo, en el caso de las imágenes de LANDSAT de la NASA, tras
aplicarles “diferencias en una dimensión”, la mayoría de los valores se
encotraban entre [-7, 7]. Se implementó, por tanto, un código de 4 bits que
permite representar 16 valores diferentes (14 desde –7 a 6, overflow el 7,
underflow el –8)
b) Códigos de Huffman.
Asignan un código de longitud variable a cada posible dato, de manera que los
valores que aparecen más a menudo tienen códigos de menor longitud y los
que aparecen menos tienen los códigos de mayor longitud.
Una vez que conoce la probabilidad de ocurrencia de cada dato, el algoritmo
de Huffman asigna automáticamente el código apropiado para cada valor.
Lo utilizan: CCITT Fax, JPEG, MPEG y TARGA.
c) Codificación aritmética.
En método, en vez de asignar un único código a cada valor individual, se basa
en generar un conjunto de valores que corresponden a secuencias de datos
únicas. Para crear los códigos utiliza la probabilidad de ocurrencia de cada
dato.
166 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Es más complejo de implementar y de entender que la codificación de


Huffman pero puede comprimir entre un 5 y un 10% más.
Se utiliza en los formatos JBIG y JPEG.
EJERCICIOS
Tema I

1) Calcular la frecuencia de las siguientes ondas:


a) λ = 500 nm
b) λ = 1000 m
Representar aproximadamente.

Partiendo de la fórmula:
λ=c/f
podemos resolver todo el problema:
a) λ = c / f f = c / λ = 300 000 * 103 / (500 * 10-9) = 6 * 1014 Hz = 600 Thz.
b) f = 300 000 * 103 / 1000 = 3 * 105 = 3 Khz.

a) Tiene mayor frecuencia que b) como vemos en la representación, ya que se producen


más cambios por unidad de tiempo.
Tema II

2) Indicar, en el modelo RGB, cuáles son las coordenadas que definirían estos datos:
Cian Magenta Amarillo
Amarillo oscuro Azul oscuro Naranja claro
Naranja oscuro
B

Azul Cian

Magenta
Azul oscuro G
Negro
Naranja oscuro Amarillo oscuro

Rojo Naranja Amarillo


R claro

RGB:
Cian: (0, 1, 1)
Magenta: (1, 0, 1)
Amarillo: (1, 1, 0)
Amarillo oscuro: (1/2, 1/2, 1/2)
Azul oscuro: (0, 0, 1/2)
Naranja claro: (1,1/2,0)
Naranja oscuro: (1/2, 1/4, 0)

3) Calcular f (b, a, L) para los colores Cian, Magenta, Yellow, White y Black. [ HSL]

f ( b, a, L )
Cian (180, a, L/2)
Magenta (300, a, L/2)
Yellow (60, a, L/2)
White (x, x, L)
Black (x, x, 0)
172 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

4) Dada una imagen de 300 x 100 píxeles, cuánta memoria ocupará, en Kbytes, si se
almacena con los siguientes modos de color:
a) color real b) escala de grises
c) paleta de color d) binaria

El tamaño de la imagen será, según el dato dado: 300 *100 = 30000 píxeles.
Sabemos que: 1 byte = 8 bits y kbyte = 1024 bytes
a) 30 000 pixeles * 24 bits / 1 pixel * 1 byte / 8 bits * 1 KByte / 1024 bytes =
37,89 Kb
b) 30 000 pixeles * 8 bits / 1 pixel * 1 byte / 8 bits * 1 KByte / 1024 bytes =
29,3 Kb
c) 30 000 píxeles * 8 bits / 1 píxel * 1 byte / 8 bits * 1 KByte / 1024 bytes =
29,3 Kb más el espacio en la paleta de color.
d) 30 000 pixeles * 1 bits / 1 pixel * 1 byte / 8 bits * 1 KByte / 1024 bytes = 3,6
Kb
Tema III

5) Obtener el histograma para la siguiente imagen:

230
190 20
255

170
120

60

Número de píxeles color


Mar 1000 60
Barco 300 120
Humo 50 20
Nube 150 190
Sol 120 230
Gaviota 10 255
Cielo 8330 170

Histograma

8000
6000
número de
pixeles 4000
2000
0
20 60 120 170 190 230 255
nivel de gris
174 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

6) Representar el histograma de una imagen en el caso de que sea: clara, oscura, de


alto contraste y de bajo contraste.

clara oscura

alto contraste bajo contraste

7) Tras incrementar el tamaño de una línea de una imagen de 6 a 8 elementos, se


desea obtener el valor del color de los nuevos píxeles mediante una interpolación de
orden cero así como mediante una bilineal. La línea original es la siguiente:
50 50 100 150 200 250

Para realizar una interpolación bilineal se tiene que sacar la relación:


relación = original / final = 6 / 8 = 3 / 4
Así se divide la línea de píxeles proporcionada en el enunciado en 24 y se toma un Ln
cada 3 divisiones, de cada 4 en las que se ha dividido cada píxel.
Los nuevos valores, se obtienen:
L1 = 3 / 3 * 50 = 50
L2 = 1 / 3 * 50 + 2 / 3 * 50 = 50 L3 = 2 / 3 * 50 + 1/ 3 * 100 = 66
L4 = 3 / 3 * 100 = 100 L5 = 3 / 3 * 150 = 150
L6 = 1 / 3 * 150 + 2 / 3 * 200 = 183 L7 = 2 / 3 * 200 + 1 / 3 * 250 = 225
L8 = 3 / 3 * 250 = 250

L1 L2 L3 L4 L5 L6 L7 L8

50 50 100 150 200 250

50 50 50 100 150 200 200 250


L1 L2 L3 L4 L5 L6 L7 L8

Para orden cero se divide el “final” según la relación obtenida y se asignan valores por
proximidad.
50 50 100 150 200 250

Orden cero
50 50 50 100 150 200 200 250
EJERCICIOS 175

8) Interpolar en modo bilineal:


255 200 255
200 100 200
255 200 255

Para obtener:
L11 L12 L13 L14
L21 L22 L23 L24
L31 L32 L33 L34
L41 L42 L43 L44

Se divide la imagen original según la relación obtenida: original / final = 3 / 4

255 200 255

200 100 200

255 200 255

Se obtienen los valores:


L11 = 255
L12 = 3 / 9 * 255 + 6 / 9 * 200 = 218
L13 = 6 / 9 * 200 + 3 / 9 * 255 = 218 L14 = 255
L 21 = 3 / 9 * 255 + 6 / 9 * 200 = 218
L22 = 1 / 9 * 255 + 2 / 9 * 200 + 2 / 9 * 200 + 4 / 9 * 100 = 162
L23 = 2 / 9 * 200 + 1/ 9 * 255 + 2 / 9 * 200 + 4 / 9 * 100 = 162
L24 = 3 / 9 * 255 + 6 / 9 * 200 = 218
L31 = 6 / 9 * 200 + 3 / 9 * 255 = 218
L32 = 2 / 9 * 200 + 4 / 9 * 100 + 1 / 9 * 255 + 2 / 9 * 200 = 162
L33 = 4 / 9 * 100 + 2 / 9 * 200 + 1 / 9 * 255 + 2 / 9 * 200 = 162
L34 = 6 / 9 * 200 + 3 / 9 * 255 = 218
L41 = 255
L42 = 3 / 9 * 255 + 6 / 9 * 200 = 218
L43 = 6 / 9 * 200 + 3 / 9 * 255 = 218 L 44 = 255

255 218 218 255

218 162 162 218

218 162 162 218

255 218 218 255


Tema IV

9) Indicar cuanto medirá, en pulgadas, una imagen con los tamaños dados,
visualizada en un monitor de PC si tomamos como resolución de éste 100 píxeles por
pulgada.
Tamaños: a) (10 x 10) “ y 100 p. p.
b) (20 x 20)” y 200 p. p.
c) (5 x 5) “ y 300 p. p.
d) (5 x 5)” y 400 p. P

a) puntos en la imagen = 10 x 100 = 1000 puntos


tamaño_ monitor = 1000 puntos / (100 puntos x pulgada) = 10 pulgadas
b) puntos en la imagen = 20 x 200 = 4000 puntos
tamaño_ monitor = 4000 puntos / (100 puntos x pulgada) = 40 pulgadas
c) puntos en la imagen = 5 x 300 = 1500 puntos
tamaño_ monitor = 1500 puntos / (100 puntos x pulgada) = 15 pulgadas
d) puntos en la imagen = 5 x 400 = 2000 puntos
tamaño_ monitor = 2000 puntos / (100 puntos x pulgada) = 20 pulgadas
Tema V

10) Se proporciona una imagen correspondiente a una fotografía frontal de una


estantería. Todos los libros se encuentran a la misma altura. En la balda superior la
sucesión de libros es claro, oscuro, claro, oscuro,... En la inferior cada tres libros
cambia el color.
La fotografía está a escala de grises: de 0 a 255.
Datos: pared = blanco = 255 libro claro = 200 libro oscuro = 80
estantería = 20

Tomamos tres secciones distintas en la fotografía: tres cortes.


A. atraviesa la mitad de la balda inferior.
B. atraviesa la mitad de los libros inferiores.
C. atraviesa la mitad de los libros superiores.

A
180 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Hacemos el histograma correspondiente para cada uno de los cortes.


A B C
255
200

80
20
0 0 0

11) Para la señal que se muestra a continuación, obtener los primeros 6 elementos de
su espectro de potencias:
VN = (2 * A) / (n * π) [n impar]

50

-50
1µs

De la gráfica obtenemos: Amplitud de pico a pico = 100


Como nos pide para los primeros 6 elementos, n tomara los valores impares empezando
en 1.
Sustituimos en la fórmula del enunciado y obtenemos la siguiente tabla:
Término n valor
1 1 63,66
2 3 21,22
3 5 12,73
4 7 9,09
5 9 7,07
6 11 5,78

V1 = 2*100 / π = 63,66 V2 = 2*100 / 3*π V3 = 2*100/5*π


V4 = 2*100 / 7*π V5 = 2*100 / 9*π V6 = 2*100 / 11*π
Las que más información aportan son las tres primeras.
Tema VII

12) Dada la matriz:


6 7 8 9

6
7 p r s
8 q
9 t
y los puntos p( 7, 7) r ( 7, 8) s ( 7, 9) q ( 8, 8). Hallar las medidas de distancia L1, L2 y
L∞.

Para cada caso realizamos las siguientes operaciones:


L1 (p, q) = |7 - 8| + |7 – 8| = 2;
L2 (p, q) = (7 −8)2 + (7 −8)2 ;
L∞ será el máximo.
Para la división euclídea unimos los puntos y tomamos como si fuese un triángulo.
6 7 8 9

6
7 p r s
8 q
9 t
Obteniendo así, la siguiente tabla.
L1 L2 L∞
p-q 2 2 1
p-r 1 1 1
p-t 3 5 2
r-t 2 2 2
q-s 2 1
182 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

13) ¿Qué tipo de conectividad hay en los siguientes: V = {1}


0 1 1 0 1
1 0 0 1 1
0 1 1 0 1
1 0 1 1 0
1 0 1 1 1

“n” de N4 (p) y N4 (t) ¢ V


0 1 1 0 1
1 µ0 0 1t 1
0 1 1p 0 1
1 0 q1 1r 0
1 0 1s 1 1

Así obtenemos la siguiente tabla:

4–c 8–c m –c
p -q Si Si Si
p-t No Si Si
p-r No Si No
p–s No No No
p–n No No No
Tema IX

14) Dada la siguiente imagen hallar:


• Histograma de la imagen original.
• Histograma de la imagen transformada.
• Mapa de transformación de la luminancia (mtl).
Para las siguientes operaciones:
• Negativo.
• Binarización con nivel de gris l = 130.
• Umbralización con nivel de gris l = 60.
• Slice, 45º, a=10 b=10.

Cuadrado: 16 píxeles, l = 80.


Línea: 6 píxeles, l = 20.
Resto: 78 píxeles, blancos.

Histograma de la imagen original

80
60
nº pixeles 40
20
0
20 80 255
nivel de gris

Cada barra representa el nivel de gris de cada parte de la figura con su correspondiente
número de píxeles.

Negativo
Los valores del nivel de gris para el histograma los calculamos restando al valor
máximo: 255, el nivel correspondiente de gris, así: 255 – 20 = 235, 255 – 80 = 175 y
255 – 255 = 0.
184 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

El número de píxeles es el de imagen original.


Mtl

Histograma
Vl
80

60

nºpixeles 40
20

0
0 175 235 L
nivel de gris

Binarización
En este caso tomamos los valores que superen 130, nivel dado en el enunciado, así para
la imagen de color blanco tendrá un nivel de gris de 255, sin embargo los otros dos
niveles de gris están por debajo del valor dado, así que lo aproximamos a cero y
sumamos el número de pixeles, 16.
Histograma

80
Vl
60
nº pixeles 40
20
0
0 255
130 L
nivel de gris

Umbralización
El número de pixeles se conserva respecto a la imagen original: 6, 16, 78. Cambia el
nivel de gris según la ecuación de la recta en MTL, ya que nos basamos en la pendiente
de esta:
y – y0 = m * ( x – x 0 )
sabiendo que la pendiente vale m = 255 / ( 255-60 ) =1.3077, el nivel de gris máximo
(255) entre la diferencia de este y el nivel dado para la umbralización.
Así tenemos la ecuación: y – 0 = 1.3077 * ( x – 60 ) en la sustituimos por x el nivel de
gris de la imagen: y80 = 1.3077 * ( 80 – 60 ) = 26
y20 = 1.3077 * ( 20 – 60 ) = 0 nos da un número negativo así que aproximamos a 0.
y78 = 1.3077 * ( 255 – 60 ) = 255
EJERCICIOS 185

80
(255, 255)
70
60 Vl
50
40
30
20
10
0
0 26 255
60 L

Slice
Establecemos el Mtl según los datos dados por el enunciado, la recta tendrá un ángulo
de inclinación de 40º y pasara por los puntos del eje de las X: 10 y 100.

10 100

15) Utilizar el método de diferenciación de color de Pietro Vlahos con la siguiente


región de 4 píxeles de una imagen perteneciente a una secuencia rodada sobre fondo
azul:
R: 125 G:225 B:34 R: 0 G:15 B:253
R: 79 G:150 B:138 R: 0 G:0 B:255

Y la imagen o secuencia background:


R: 0,1 G:0,8 B:0,7 R: 0 G:0,3 B:0,5
R: 0,5 G:0,4 B:0 R: 0,9 G:0,9 B:0,5

De lo primero que nos damos cuenta es que en la imagen foreground, los dos píxeles de
la derecha son los que pertenecen a la pantalla azul (recordemos que es muy difícil
conseguir un azul puro, por eso los canales R y G pueden tener algún valor bajo).
Lo segundo que observamos es que la imagen background está normalizada, de ahí sus
valores decimales. Esto nos recuerda que el algoritmo antes descrito está pensado para
valores normalizados, por eso nuestro Paso 0 será normalizar la imagen foreground.
PASO 0: Normalizar la imagen foreground
Dividimos cada uno de los canales de cada uno de los píxeles por 255 (en este caso
las imágenes son de 8 bits por canal).
De esta forma para el primer píxel tenemos: 125/255=0,5; 255/255=1; 34/255=0,1
Para el resto de píxeles nos queda:
186 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

R: 0,5 G:1 B:0,1 R: 0 G:0 B:1


R: 0,3 G:0,6 B:0,5 R: 0 G:0 B:1
PASO 1: Primer paso del algoritmo → Transformar todo el azul en negro
Para el primer píxel seguimos el algoritmo:
B:0,1 es menor que G:1, por lo tanto el canal B se queda como está B=0,1
Para el segundo píxel:
B:1 es mayor que G:0, por lo tanto el valor de G pasa a B. Entonces B=0
Para el tercer píxel:
B=0,5 es menor que G=0,6 por lo tanto el canal B se queda como está B=0,5
Para el cuarto píxel:
B:1 es mayor que G:0, por lo tanto el valor de G pasa a B. Entonces B=0

Con lo que nos quedan los píxeles azules en negro obteniendo la que vamos a llamar
imagenPASO1:
R: 0,5 G:1 B:0,1 R: 0 G:0 B:0
R: 0,3 G:0,6 B:0,5 R: 0 G:0 B:0
PASO 2: Creación del matte
Según el algoritmo M = B - max(G,R) de la imagen foreground.
Para cada uno de los píxeles (en el sentido de las agujas del reloj):
0,5 – 1 = 0 (no puede haber valores menores de 0)
1 0=1
0,5 – 0,6 = 0
1–0=0
Con esto obtenemos un matteINVERTIDO:
0 1
0 1
Como se puede ver solo hay una canal, ya que el matte es una imagen en escala de
grises. El matte está invertido porque los vales claros (1) están en la zona que deberá
ser transparente, y en un matte las zonas que serán transparentes son negras (0) y las
opacas blancas (1), todo lo contrario de lo que indica este matte. Pero este
matteINVERTIDO será de gran ayuda como vamos a ver.
PASO 3: Multiplicar el matte invertido por el fondo (background).
Al multiplicar cada píxel de la imagen background por el píxel correspondiente del
matte invertido, obtenemos:

R: 0,1 G:0,8 B:0,7 R: 0 G:0,3 B:0,5 0 1 R:0 G:0 B:0 R: 0 G:0,3 B:0,5
R: 0,5 G:0,4 B:0 R: 0,9 G:0,9 B:0,5 X 0 1 = R: 0 G:0 B:0 R: 0,9 G:0,9 B:0,5

Como vemos, se obtiene la imagenPASO3 de background con un agujero negro, en


el que se ajusta perfectamente la imagen obtenida en el paso 1 al sumársela.
PASO 4: Sumar la imagenPASO3 con la imagenPASO1.
Al sumar dichas imágenes ya tenemos la composición realizada, la parte que no
pertenecía a la pantalla azul del foreground está integrada con el background.
R: 0,5 G:1 B:0,1 R: 0 G:0,3 B:0,5
R: 0,3 G:0,6 B:0,5 R: 0,9 G:0,9 B:0,5
Tema XI

16) Dadas estas imágenes:


Hallar las imágenes resultantes y
hacer la tabla de verdad de cada
una de las operaciones.
=0

=1

A AND B:

A B Q
0 0 0
0 1 0
1 0 0
1 1 1

A NAND B:

A B Q
0 0 1
0 1 1
1 0 1
1 1 0

A OR B:

A B Q
0 0 0
0 1 1
1 0 1
1 1 1

A NOR B:

A B Q
0 0 1
0 1 0
1 0 0
1 1 0
188 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

A XOR B:

A B Q
0 0 0
0 1 1
1 0 1
1 1 0

A XNOR B:

A B Q
0 0 1
0 1 0
1 0 0
1 1 1

17) Dadas las imágenes A y B, calcula la imagen resultante de hacer A AND B.


150 150 150 0 0 0 0 0 0 0 0 0 0 0 0 0
150 150 150 0 0 0 0 0 0 150 150 150 0 0 0 0
0 0 0 0 91 91 91 91 0 0 0 0 0 0 0 0
0 0 0 0 91 91 91 91 0 0 153 153 153 153 153 153
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 200 200 0 0 0 0 0 0 200 200
0 0 0 0 0 0 200 200 0 0 0 0 0 0 200 200

Primero se pasan a binario los niveles de gris:


91(10=01011011 (2
150(10=10010110(2
153(10=10011001 (2
200(10=11001000(2
Se realiza el AND, píxel a píxel:
150(10 AND 0(10 = 10010110(2 AND 00000000(2 = 00000000(2 = 0(10
150(10 AND 150(10 = 10010110(2 AND 10010110(2 =10010110(2 = 150(10
0(10 AND 0(10 = 00000000(2 AND 00000000(2 = 00000000(2 = 0(10
0(10 AND 91(10 = 00000000(2 AND 01011011(2 = 00000000(2 = 0(10
91(10 AND 153(10 = 01011011(2 AND 10011001(2 = 00011001(2 = 25(10
0(10 AND 153(10 = 00000000(2 AND 10011001(2 = 00000000(2 = 0(10
200(10 AND 200(10 = 11001000(2 AND 11001000(2 = 11001000(2 = 200(10
La imagen resultante sería:
0 0 0 0 0 0 0 0
0 150 150 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 25 25 25 25
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 200 200
0 0 0 0 0 0 200 200
Tema XII

18) Realizar la apertura de la siguiente imagen utilizando un kernel de 3x3 de las dos
formas posibles (apertura directamente y erosión + dilatación).

0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 1 1 1 1 1 0 0 0 0 0 0
0 0 1 1 1 1 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0
0 0 0 0 1 1 0 0 0 0 0 0
0 0 0 1 1 1 1 1 1 0 0 0
0 0 1 1 1 1 1 1 1 1 0 0
0 0 0 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0

Apertura directamente
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 0 0 0 0
0 0 0 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
Erosión + Dilatación
Erosión
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 00 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 1 1 1 1 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
190 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

Dilatación:
0 0 0 0 0 0 0 0 0 0 00 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 1 1 1 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
0 0 1 1 1 1 1 1 0 0 0 0
0 0 1 1 1 1 1 1 0 0 0 0
0 0 1 1 1 1 1 1 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0
Tema XIII

19) Filtro Paso-Bajo:


Filtro [111,111,111] * (1/10)
200 200 200
200 10 200
200 10 200
200 10 200
200 10 200
200 10 200

R= (w1* z1 + w2* z2 + w3* z3 +…+ w9* z9 )* (1 / p1)


R1 = (0*1 + 0*1 + 0*1 + 0*1 + 200*1 + 200*1 + 0*1 + 200*1 + 10*1)*(1/10)=
(200+200+200+10)*(1/10) = 61
En realidad habría que dividir por 9, pero para que sea más fácil operar dividimos por
10.
R2 = (200+200+200+200+10+200)*(1/10) = 101
R3 …

61 101 61
82 124 82
63 123 63
63 123 63
63 123 63
42 82 42

20) Tenemos una imagen de 11 filas y 8 columnas con los siguientes valores:
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
100 10 10 10 10 10 10 100
100 10 10 10 10 10 10 100
100 100 100 10 10 100 100 100
100 100 100 10 10 100 100 100
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
100 100 100 100 100 100 100 100
192 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

21) Aplicar un filtro espacial de Resalte de Bordes mediante desplazamiento y


diferencia horizontal

KERNEL HORIZONTAL:
0 -1 0
0 1 0
0 0 0

Lo que quiere decir este Kernel es que a cada píxel se le resta el píxel que está en la
misma columna en la fila superior.

100 100 100 100 100 100 100 100


0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
0 -90 -90 -90 -90 -90 -90 0
0 0 0 0 0 0 0 0
0 90 90 0 0 90 90 0
0 0 0 0 0 0 0 0
0 0 0 90 90 0 0 0
0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0
Tema XIV

22) Ejercicio detección de rectas.


Dada la siguiente imagen, indicar si los puntos a, b, c y d pertenecen a alguna recta.
En caso afirmativo, determinar cuál es su orientación (horizontal, vertical, +45º, -
45º).

10 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10
10 50 50 c 50 50 50 50 10
10 10 b 10 10 10 10 10 10
10 10 10 10 10 10 90 10
10 10 10 10 10 90 10 10
10 10 10 10 90 d 10 10 10
10 10 10 90 10 10 10 10
10 10 90 10 10 10 10 10
10 90 10 10 10 10 10 a 10
90 10 10 10 10 10 10 10
10 10 10 10 10 10 10 10

Se utilizan los siguientes kernels:


-1 -1 -1 -1 2 -1 -1 -1 2 2 -1 -1
2 2 2 -1 2 -1 -1 2 -1 -1 2 -1
-1 -1 -1 -1 2 -1 2 -1 -1 -1 -1 2
Horizontal Vertical +45º -45º
Haciendo cálculos:
ah=0 bh=-110+60-30=-80 ch=-60+300=240 dh=220-110-110=0
av=0 bv=-30+140-70=40 cv=-140+140=0 dv=220-110-110=0
a+45=0 b+45=-70+140-30=40 c+45=-140+140=0 d+45=540-30-30=480
a-45=0 b-45=-110+60-30=-80 c-45=-140+140=0 d-45=220-110-110=0

Se obtienen los siguientes resultados:


a(10,7): ah=0 av=0 a+45=0 a-45=0
b(4,2): bh=-80 bv=40 b+45=40 b-45=-80
c(3,3): ch=240 cv=0 c+45=0 c-45=0
d(7,5): dh=0 dv=0 d+45=480 d-45=0

Por tanto, el punto a y el b no pertenecen a ninguna recta, el c, a una recta horizontal y


el d, a una de +45º.
194 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

23) Umbralización.
Obtener el umbral de la siguiente imagen utilizando el método de ISODATA.

7
6
5 5
4
3
2
1 1

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16

0) ϕ0 = 2; 16 = 24 24-1 = 23 = 8
1) mb,1 = 99/14 = 7,07 mf,1 = 279/20 = 13,95
L f L f
1 1 =5 9 3 = 27
6 2 = 12 13 1 = 13
7 6 = 42 14 5 = 70
8 5 = 40 15 7 = 105
14 99 16 4 = 64
20 279

ϕ1 = (7,07 + 13,95) / 2 = 10,51 ≈ 11


ϕ1 ≠ ϕ0 ⇒ continuar
2) mb,2 = 126/17 = 7,41 mf,2 = 252/17 = 14,82
L f L f
1 1 =5 13 1 = 13
6 2 = 12 14 5 = 70
7 6 = 42 15 7 = 105
8 5 = 40 16 4 = 64
9 3 = 27 17 252
17 126

ϕ2 = (7,41 + 14,82) / 2 = 11,11 ≈ 11


ϕ2 = ϕ1 ⇒ detener ⇒ umbral = 11
Tema XV

24) Para el siguiente contorno, obtener:


a) Código de cadena de 4-direcciones.
b) Código de cadena de 8-direcciones.
c) Normalización directa.

a) Punto de inicio: por convenio el punto de inicio es de los de arriba el que está más a
la izquierda.

1
Código cadena 4-direcciones:
00333323223211110011
2 0 Normalizado al punto de inicio (módulo mínimo):
0011003333232232

3
196 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

2
3 1
Código cadena de 8-direcciones:
7666454522220021
Normalizado: 4 0
0021766645452222

5 6 7

25) Obtener el polígono de perímetro mínimo para la figura:


Tema XVI

26) Calcular el número de forma de los siguientes contornos:


a) b)
0
1 0 0 0
1 3
1 3
1 30
2 0 2 2
1
1 3 3
2
3 2 2

Código de cadena Módulo mínimo Primera diferencia Número de forma


a) 0330322111 0322111033 1330300330 0033013303
b) 0003223211 0003223211 3003301330 0033013303

Rectángulos de orden 12:


3
2
5
4 3 1
Tema XVII

27) Considérese los siguientes 3 objetos A, B y C como objetos representantes de su


clase ya que sus dimensiones provienen de calcular la media para cada dimensión de
un objeto del mismo tipo.
1. Proponer un patrón para cada clase formado por 3 características relacionado
con sus dimensiones.
2. Obtener un vector de características para el objeto D e indicar a qué clase
pertenece utilizando como función discriminante la distancia euclídea.

A) R1 B) R2

C) R3 D) O1

Se calculan los vectores de A B C O1


características:
superficie vertical = 0 0.3 0 0.48

superficie horizontal = 2 0.25 0.09 0.64

altura = 0.75 1.10 0.5 0.9


200 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

*Se desprecia la superficie vertical de las patas y se hacen aproximaciones.


n
A continuación, se halla la distancia euclídea (De= ∑ (v1i −v 2i ) 2 ):
i =1
D(R2-O1) = (( 0 - 0.48) + (2 - 0.64) + (0.75 – 0.9)2)1/2 = 1.45
2 2

D(R2-O1) = (( 0.3 - 0.48)2 + (0.25 - 0.64)2 + (1.10 – 0.9)2)1/2 = 0.47


D(R3-O1) = (( 0 - 0.48)2 + (0.09 - 0.64)2 + (0.5 – 0.9)2)1/2 = 0.83

El objeto O1 pertenece a la clase R2 (0.45), ya que a menor distancia, mayor similitud.


Tema XIX

28) Dado el siguiente algoritmo de compresión (método Packbits):


a) Por cada serie de elementos repetidos sucesivos que aparecen introduce dos
valores en la secuencia resultado:
• El primero: número de elementos menos uno de los elementos
repetidos y con signo negativo.
• El segundo: el elemento repetido.
b) Para una secuencia de n números no repetidos:
Pone en la salida n+1 valores:
• El primero: el número de elementos no repetidos menos 1 (= n-1).
• El resto (n elementos): la secuencia de elementos.
Se pide:
a) Comprimir la siguiente secuencia:
120 120 255 255 255 255 0 0 0 0 0 0 10 15
b) Descomprimir la siguiente secuencia:
3 0 1 2 3 -1 10 0 20 -2 50 1 0 1 -3 0 -1 255

a)
-1 120 -3 255 -5 0 1 10 15

b)
0 1 2 3 10 10 20 50 50 50 0 1 0 0 0 0 255 255
PRÁ CTICAS
PRÁ CTICA 1. INTRODUCCIÓN A MATLAB (I):
MATRICES, VISUALIZACIÓN Y GRÁ FICOS
1. OBJETIVOS.
En esta práctica de introducción a MATLAB se adquirirá una visión general de las
posibilidades que ofrece este entorno. Aunque se pida responder sólo a algunas
cuestiones relacionadas con distintas demos, es conveniente recorrer la mayoría de las
que ofrece el programa, familiarizándose así con la notación y la forma de trabajo.
Utilice la ayuda siempre que la necesite, y no dude en teclear los ejemplos y las
modificaciones que se le ocurran en la ventana de comandos.
Si necesita AYUDA:
Teclee help en la ventana de comandos y aparecerán los distintos bloques de
funciones instalados.
Sobre un tema en concreto, por ejemplo, ver los distintos operadores y caracteres
especiales: “help ops”.
Sobre una función concreta de Matlab, por ejemplo, obtener ayuda sobre la
operación lógica AND: “help and”.
El punto y coma, cuando aparece en la ventana de comandos al final de una expresión,
hace que aunque la expresión se evalúe NO se muestre el resultado.

2. REALIZACIÓN DE LA PRÁCTICA.
Abra la ventana de demostraciones.
Teclee demo en la ventana de comandos de MATLAB.
Recorra las siguientes demostraciones y responda a las preguntas. Para responder a
las preguntas lea la ayuda que aparece en el cuadro de texto de la parte derecha superior
de la ventana “MATLAB Demos”, o recorra la demostración apropiada. Utilice también
la ayuda de la ventana de comandos de MATLAB (help, helpwindow, ...) y pruebe los
distintos comandos cuando sea necesario.
206 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Desktop Environment.
1) Tutoriales sobre el entorno.
1.1 Recorra el tutorial Desktop overview. Indique cuál es el objetivo de este
tutorial.
1.2 Recorra el tutorial Importing data. ¿Qué conclusión extrae de lo que ha
visto?.
1.3 Recorra el tutorial Workspace. Indique qué es el workspace, enumere seis
operaciones que se pueden realizar con las variables del espacio de
trabajo utilizando menús contextuales.
1.4 Recorra el tutorial Command History. Indique qué es el historial de
comandos, y dos maneras de repetir la evaluación de una expresión
ejecutada anteriormente.
1.5 Recorra el tutorial Current Directory. Indique para qué sirve la ventana
de directorio actual y cómo se pueden modificar alguna de las opciones
de visualización.
Matrices.
2) Basic matrix operations, Matrix manipulation.
(Recorra el tutorial y luego responda y/o realice las siguientes cuestiones
tecleando las correspondientes expresiones en la ventana de comandos).
2.1 ¿Es MATLAB un lenguaje de tercera generación de propósito general?.
Escriba la respuesta correcta.
2.2 Escriba un vector fila, llamado “v1” con los siguientes cinco elementos:
12, 23, 54, 8, 6.
2.3 Súmele 10 a cada elemento de v1 y almacenelo en v2.
2.4 Visualice un gráfico en dos dimensiones de v2.
2.5 Cree la siguiente matriz de 4 por 4 elementos y llámela M:
1 4 22 7
9 2 3 11
49 55 6 3
24 7 9 12
2.6 Obtenga la traspuesta de M y llámela Mt.
2.7 Obtenga la inversa de M y llámela Mi.
2.8 Compruebe que el producto de una matriz por su inversa es la matriz
identidad.
2.9 Obtenga las soluciones de la matriz M (si la matriz consistiera en los
coeficientes de las ecuaciones de un sistema de cuatro ecuaciones y
cuatro incógnitas, los valores propios –eigenvalues- de la matriz son las
soluciones del sistema –información sobre los eigenvalues puede
encontrarse en el último apartado de esta práctica-).
2.10 Indique qué contiene la variable “ans”.
2.11 Visualice un gráfico en tres dimensiones de la matriz M, tanto en
alambres como con superficie. (teclee: >>mesh(M), >> surf(M) –los >>
es el símbolo del prompt-).
Numerics.
3) Function functions in Matlab.
3.1 ¿Qué primitiva se utiliza para visualizar funciones?.
3.2 ¿Qué primiriva permite encontrar los ceros de una función cerca de un
punto?
PRÁCTICA 1. INTRODUCCIÓN A MATLAB (I): MATRICES, VISUALIZACIÓN Y GRÁFICOS 207

3.3 ¿Qué hace fminbnd?


3.4 ¿Qué hace quad?
4) 2D visual solutions.
4.1 ¿Qué es mayor, eπ ó πe?.
Graphics.
5) Overview of features.
5.1 ¿Se pueden cambiar los mapas de color de un gráfico en tres
dimensiones?
6) Plotting and printing.
6.1 ¿Cómo se pueden editar las propiedades de una línea?.
6.2 ¿Con qué opción se modifica el posicionamiento en la página de las
figuras que se van a imprimir?.
7) 2D Plots.
7.1 ¿Qué hace la expresión “x = 0:0.05:5;”?.
7.2 ¿Qué hace la función “bar”?
7.3 ¿Qué hace la función “stairs”?
8) 3D Plots.
8.1 Indique y compruebe qué hace la expresión “z = peaks(25)”.
8.2 Indique la diferencia entre mesh y waterfall.
8.3 Indique qué diferencia hay entre surf y surfl.
8.4 Observe los efectos de contour, quiver y slice.
9) Transparency.
9.1 Visualice los distintos ejemplos de esta demo.
10) Volume visualization.
10.1 Abra una figura nueva (teclee figure) y ejecute línea a línea las distintas
sentencias de la demo del visualizador de la resonancia magnética de la
sección del cerebro. Observe lo que pasa e indique, de forma genérica y
utilizando la ayuda si es necesario, qué hace cada comando.
% Isosurface of MRI (Magnetic Resonance Imager) data
load mri; D = squeeze(D);
[x y z D] = subvolume(D, [nan nan nan nan nan 4]);
p = patch(isosurface(x,y,z,D, 5), 'FaceColor',
'red', 'EdgeColor', 'none');
p2 = patch(isocaps(x,y,z,D, 5), 'FaceColor',
'interp', 'EdgeColor', 'none');
isonormals(x,y,z,D,p);
view(3); axis tight; daspect([1 1 .4])
10.2 Observe los otros ejemplos.
11) Image colormaps.
11.1 Observe los distintos mapas de color que se pueden aplicar a imágenes
indexadas. Indique tres de ellos señalando el tipo de color que se obtiene
al emplearlos.
12) Line plotting.
12.1 Explique qué hace cada una de las líneas de la demo.
x=0:0.02:1;
hndl=plot(x,humps(x));
set(hndl,'Color','cyan')
12.2 ¿Qué es lo que se almacena en hndl?
12.3 ¿Qué sentencia hay que escribir para cambiar el color de la línea a verde?
208 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

12.4 ¿Qué sentencia hay que escribir para cambiar el ancho de la línea a 2?
12.5 ¿Qué sentencia hay que escribir para cambiar el marcador de puntos de la
línea a “o”?
12.6 ¿Qué sentencia hay que escribir para cambiar el tamaño del marcador a
12?
13) 3D Surface plots.
13.1 Abra una figura nueva (teclee figure), evalúe una a una las siguientes
líneas de la demo e indique qué hace cada una de ellas.
z=peaks(25);
surfl(z)
shading interp
colormap(hot)
axis off
14) Resto de demos de Graphics.
14.1 Recorra el resto de las demostraciones del uso de gráficos y utilice las
opciones para ver su efecto.
Descomposición de una matriz en sus valores singulares (SVD).
Sea A una matriz cuadrada n x n, se dice que el número λ es un valor propio
(eigenvalue) de A si existe un vector no nulo x tal que Ax = λx o equivalentemente si
(A-λI) x = 0 Ecuación (1)
el vector x es llamado un vector propio (eigenvector ) de A Los vectores propios son
por lo general normalizados para que tengan norma 1.
Ejemplo: -1 es un valor propio de una matriz Householder correpondiente al vector
propio u.
Solución: Hu = (I-2uu’/u’u)u = u-2uu’u/u’u = u-2u = -u
La ecuación (1) tiene una solución no nula si det(A-λI)=0.
El polinomio de grado n, P(λ) =det(A-λI) es llamado el Polinomio característico de
A y los n eigenvalues de A son las n raices de P(λ).
El conjunto de los valores propios de una matriz es llamado el espectro (spectrum) de
A.
n
Más específicamente A = ∑ λi xi y i' donde y’ representa un vector propio izquierdo
i =1
de A.
Propiedades de eigenvalues y eigenvectors.
1. Si λ es un valor propio de A y x es su vector propio correspondiente entonces λ y
Bx son valor y vector propio respectivamente de BAB-1.
2. Si A es triangular entonces sus valores propios son los elementos de la diagonal.
3. Si A es una matriz simétrica entonces todos sus eigenvalues son reales.
4. Traza(A)=suma de los eigenvalues de A.
5. Si A es simétrica entonces existe una matriz orthogonal U tal que U’AU=D donde
D es una matriz diagonal cuyas entradas son los eigenvalues de A y las columnas
de U son los eigenvectors correspondientes. Equivalentemente, A=UDU’.
La función eig de Matlab encuentra los vectores y valores propios de una matriz
Ejemplo: Hallar los valores y vectores propios de la siguiente matriz
A =[1 2 3; 2 4 1; 3 1 5]
PRÁCTICA 1. INTRODUCCIÓN A MATLAB (I): MATRICES, VISUALIZACIÓN Y GRÁFICOS 209

Solución:
» A=[ 1 2 3; 2 4 1; 3 1 5]
A=
123
241
315
» eig(A)
ans =
-0.9734
3.3838
7.5896
» [V,D]=eig(A)
V=
0.8772 -0.0151 0.4799
-0.2734 -0.8375 0.4732
-0.3948 0.5463 0.7387
D=
-0.9734 0 0
0 3.3838 0
0 0 7.5896
» trace(A)
ans =
10
» V*D*V'
ans =
1.0000 2.0000 3.0000
2.0000 4.0000 1.0000
3.0000 1.0000 5.0000
»
PRÁ CTICA 2. INTRODUCCIÓN A MATLAB (II):
LENGUAJE, TOOLBOXES
1. OBJETIVOS.
Al finalizar esta práctica el alumno será capaz de:
1. Explicar en qué consiste “pensar vectorialmente” utilizando Matlab y qué ventajas
tiene.
2. Explicar las diferencias entre script y function y saber crear funciones y scripts
sencillos.
3. Crear matrices multidimensionales y acceder a cualquier elemento de estas
matrices.
4. Definir toolbox y enumerar al menos cuatro ejemplos.
5. Definir los conceptos: DCT, threshold, lowpass filter, highpass filter, histogram
equalization, ruido, umbralización.

2. INSTALACIÓN DE MATLAB Y AYUDA.


La instalación de la copia de evaluación de Matlab se realiza siguiendo los pasos del
fichero “Leame – Instalación y Ayuda.txt”.
Instalación.
1. Copiar los ficheros .cab y el Installer.exe a la carpeta C:\tmp (si no existe, créela).
2. Ejecutar el Installer.
Cuando solicite sobreescribir, seleccione NO.
3. Instalar con el Setup.
4. Copiar en C:\...\MatlabR12\help\ la carpeta pdf_doc con todo su contenido.
Observaciones uso.
Primera lectura recomendada:
Manual_matlab61.pdf - Manual "Aprenda Matlab 6.1 como si estuviera en primero".
EN ESPAÑOL.
(El resto de los pdf están en inglés)
Aclarar dudas o ampliar información:
using_ml.pdf - Explicacion del entorno e introduccion a su utilización.
212 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

getstar.pdf - Introducción a Matlab y a conceptos básicos sobre Matrices, Gráficos y


Programación.
Aprender o ampliar conceptos sobre gráficos y ejes:
graphg.pdf - Utilizacion de graficos en 2D y en 3D.
Programación de ventanas y botones:
buildgui.pdf - Creacion y programación de Interfaces Graficas de Usuario.
Toolbox de PROCESAMIENTO DE IMÁGENES 3.0:
images_tb.pdf - Funciones de la toolbox, sintaxis y explicación de su funcionamiento
incluyendo ejemplos.
Explicación completa de la sintaxis de cada función:
refbook.pdf - A -> E
refbook2.pdf - F -> O
refbook3.pdf - P -> Z

3. REALIZACIÓN DE LA PRÁCTICA.
Language.
1) MATLAB language introduction.
1.1 ¿Cuál es el “lema” de Matlab?
1.2 Indique bajo qué dos aspectos se pueden encontrar los programas creados
en MATLAB y explique en qué consiste cada uno de ellos.
1.3 Cree un script con el código del punto 5.1 y llámelo versuperficie.
Ejecutelo y compruebe que funciona.
1.4 Cree una función que calcule los números de Fibonnaci.
1.5 ¿Qué significa la expresión, que puede encontrarse en esta demo, “Piensa
VECTORIZADO”?
1.6 ¿Tiene Matlab un debugger?. ¿Para qué se utiliza?.
2) Multi-dimensional arrays.
2.1 ¿Qué es un array multidimensional?
2.2 Consulte la ayuda e indique para qué se utiliza el operador “:” –colon-
en los arrays.
2.3 Compruebe e indique qué hacen las siguientes expresiones
A=[5 7 8; 0 1 9; 4 3 6]
A(:,:,2)=[1 0 4;3 5 6; 9 8 7]
2.4 Compruebe las siguientes expresiones, escriba el valor que devuelven y
señale en qué se diferencian:
A(1,2)
A(1,2,1)
A(1,2,2)
2.5 ¿Cómo se hace referencia al elemento de la tercera fila, segunda columna
de la segunda dimensión?.
3) Structures.
3.1 ¿Qué es una estructura -struct-?
3.2 Cree una estructura, llamada “mificha”, que contenga los campos:
nombre (contendrá un string con su nombre), edad (años que tiene) y
medidas (un vector con 3 elementos: altura en cm., peso en Kg., y nº de
zapato que calza) –utilice la ayuda si es necesario-.
3.3 Asigne a una variable llamada “e” el valor de la edad almacenado en la
variable anterior.
3.4 ¿Pueden anidarse las estructuras?
PRÁCTICA 2: INTRODUCCIÓN A MATLAB (II): LENGUAJE, TOOLBOXES 213

Gallery.
4) Gallery.
4.1 Visualice los ejemplos de la galería.
More Examples.
5) More examples.
5.1 Recorra y juegue con los diferentes ejemplos que pueda encontrar en esta
categoría.
Toolboxes.
6) En general.
6.1 Escriba una definición de lo que son las toolboxes. Indique tres campos
en los que se han centrado los investigadores escribiendo toolboxes.
(encontrará la información en el cuadro de texto derecho superior de la
ventana “Matlab demo”).
6.2 Explique brevemente para qué sirve cada una de las siguientes toolboxes:
Filter Design
Image Processing
Neural Networks
Signal Processing
Wavelet
Statistics
Image Processing Toolbox.
7) 2-D DCT Image Compression.
7.1 ¿Qué significa DCT? –si necesita ayuda pulse sobre el botón Info-.
7.2 Observe la demo de la Transformada de coseno discreta. Explique cómo
afecta el número de coeficientes que se utiliza a la imagen reconstruida y
a la imagen de error.
8) Edge Detection.
8.1 Indique tres métodos diferentes de detección de bordes. Pruebelos, con al
menos tres imágenes, e indique cuál ofrece mejores resultados, para cada
imagen, y de manera general. Tome nota de las observaciones y
aclaraciones que estime oportunas.
8.2 Explique para qué sirven las opciones threshold, direction y sigma –si
necesita ayuda pulse sobre el botón Info-.
9) 2-D FIR Filtering Demo.
9.1 Indique, de forma genérica, para qué sirve esta demo –si necesita ayuda
pulsa sobre el botón Info-.
9.2 Explique qué es un filtro y para qué se utiliza.
9.3 Busque en la ayuda la función fsamp2 e indique para qué sirve.
9.4 Seleccionando como método de diseño fsamp2, realice pruebas con
varias imágenes e indique qué diferencia hay entre aplicar un filtro tipo
“lowpass” –paso bajo- y aplicar otro “highpass” –paso alto-.
10) Intensity Adjustment and Histogram Equalization.
10.1 En Operations seleccione Histogram Equalization. Observe los efectos
de aplicar la ecualización del histograma a varias imágenes e indique qué
es lo que hace esta operación.
10.2 Observe lo que pasa cuando se selecciona la imagen Quarter. Indique los
efectos de ecualizar el histograma de esta imagen y explique por qué pasa
esto.
214 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

10.3 Seleccione Intensity Adjustment en Operations. Observe la imagen


ajustada y la zona de Intensity Trasnformation, e indique qué es lo que
pasa cuando se pulsa sobre los botones de más brillo y de menos brillo.
10.4 Explique también qué es lo que pasa cuando se pulsa sobre los botones
de más contraste y menos contraste.
10.5 A partir de las anteriores observaciones –o utilizando el botón Info-,
explique qué es lo que representa la zona de Intensity Transformation.
11) Landsat Color Composite Demo.
11.1 Explique brevemente qué permite comprobar esta demo (aspectos que
ilustra y con los que se puede experimentar).
11.2 ¿Cuántas bandas espectrales distintas tienen los datos Landsat?.
11.3 Realice pruebas con las distintas imágenes y opciones de visualización
relacionando las diferentes bandas con el agua, la vegetación, etc.
12) Noise Reduction Filtering.
12.1 Explique qué es el ruido –noise- en una imagen y qué tipos de ruido
pueden utilizarse en esta demo (indique brevemente las diferencias entre
cada uno).
12.2 ¿Qué filtros pueden encontrarse en esta demo y para qué sirven?.
12.3 Qué diferencias hay, para el mismo filtro, según sea el valor seleccionado
como entorno de filtrado –filtering neighborhood-.
12.4 Pruebe las siguientes líneas en la ventana de comandos y observe los
resultados. Puede hacer alguna modificación (tipo de ruido, sus
parámetros, otra imagen –se encuentran en la carpeta
...\MatlabR12\toolbox\images\imdemos-).
I = imread('eight.tif');
J = imnoise(I,'salt & pepper', 0.02);
imshow(I), figure, imshow(J)
12.5 Cree una función, llámela ponruido, a la que se le pasa una imagen y un
valor decimal –el valor de ruido, en este caso 0.02, pero será un
parámetro que podrá tener distintos valores- y muestre la imagen original
y en otra ventana la imagen con el ruido, de tipo gaussian, que le haya
añadido. La función devolverá la imagen con ruido (se le podrá asignar a
una variable).
12.6 Cree otra función, llámela ponruidoN, que haga lo mismo que la anterior
pero que no devuelva ningún valor. Mire lo que pasa al intentar asignar
lo que devuelve a una variable cualquiera -ej.: F=ponruidoN(I,0.023);-.
13) Quadtree Decomposition.
13.1 Observe lo que hace esta demo y expliquelo –utilice el botón Info si lo
necesita-.
13.2 Modifique el valor del umbral –threshold- e indique cómo afecta al
proceso. Explique la utilidad de este valor.
13.3 Busque en la ayuda y observe qué hace la función qtdecomp y qué
parametros se le puede pasar.
13.4 Indique alguna aplicación de esta función.
14) Region of-Interest Processing.
14.1 Indique para qué se usan las regiones de interés en las imágenes. Realice
alguna prueba.
15) Region Labeling of Steel Grains.
15.1 Dada una imagen, steel, explique qué hacen las siguientes instrucciones y
por qué funcionan de esa manera. Pruebelas y utilice la ayuda si lo
necesita.
PRÁCTICA 2: INTRODUCCIÓN A MATLAB (II): LENGUAJE, TOOLBOXES 215

load imdemos steel;


imshow(steel)
bw_40=steel>40;
bin_70=steel>70;
bin_200=steel>200;
figure, imshow(bw_40), figure, imshow(bin_70), figure,
imshow(bin_200)
15.2 Indique qué hace la siguiente instrucción:
[r, c]=find(bw_70==0);
15.2.1 ¿Qué hace find? –help find-
15.2.2 ¿Qué contiene r y c?
15.3 Explique qué hace bwselect. Mire en la ayuda y pruebe con la siguientes
instrucciones, varias veces, haciendo click, sobre tres o cuatro puntos
aislados de la imagen, -para finalizar la introducción de puntos pulse
Return-.
binHan=bwselect(bin_210,4);
figure(3),imshow(binHan)
15.4 Indique qué hace la siguiente instrucción: (~: Alt + 126 ó en algunos
editores AltGr + 4)
(bw_clean=bwselect(~bw_210, c, r, 8);
15.4.1 ¿Qué hace el operador ~?
15.4.2 ¿Qué hace bwselect(A, c, r, n)?
15.5 Cree un script, llamado prubwselect, con las siguientes instrucciones,
ejecutelo y observe lo que pasa.
%Script Prubwselect
%Ejemplo para probar la funcion bwselect
load imdemos steel;
figure(1), imshow(steel)
bin_70=steel > 70;
bin_210=steel>210;
figure(2), imshow(bin_70)
figure(3), imshow(bin_210)
[fil,col]=find(bin_70==0);
BinLimpiaN=bwselect(~bin_210, col, fil, 8);
figure(4), imshow(BinLimpiaN)
15.6 Indique qué hace la siguiente instrucción:
bw_skel=bwmorph(bw_clean,’skel’,6);
15.6.1 ¿Qué hace la función bwmorph?
15.6.2 ¿Qué hacen los operadores ‘skel’ y ‘spur’, y qué otros
operadores tiene (escriba almenos tres o cuatro)?
15.7 Explique qué hace la siguiente instrucción:
[labeled, N]=bwlabel(grain_boundaries, 4);
PRÁ CTICA 3. OBTENCIÓN DEL HISTOGRAMA
DE UNA IMAGEN (I)

1. OBJETIVOS.
Realizar un conjunto de funciones en Matlab que permitan:
Abrir una imagen seleccionándola de entre las que se encuentran en el directorio
“C:\...\Matlab12\toolbox\images\imdemos”.
Devuelva un vector conteniendo el histograma de una imagen. La imagen podrá
ser binaria, en escala de grises, indexada o en color real. Las imágenes indexadas
y en color real se convertirán a imágenes en escala de grises y se devolverá el
histograma de la imagen convertida. Además de devolver el histograma se
mostrará un mensaje, tanto en la línea de comandos como en una ventana de
diálogo, indicando el “modo” de color de la imagen.
Visualizar el histograma anteriormente calculado.

2. DETALLES: FUNCIONES A REALIZAR.


Las funciones estarán debidamente comentadas (la primitiva de comentario es el tanto
por ciento “%”).
a) abreimagen.
Descripción.
Al llamar a la función se abre una ventana que permite seleccionar una
imagen que se encuentre en cualquier carpeta de cualquier unidad. Si no se
realiza ninguna selección se indicará un mensaje de advertencia en un
cuadro de diálogo.
La función devuelve una variable conteniendo la imagen seleccionada.
Funciones útiles.
function, uigetfile, msgbox, try, catch, imread.
b) histogrisbucle.
Descripción.
Se le pasa como parámetro una imagen en escala de grises y devuelve un
vector (Z) de dos filas y 256 columnas. En la primera fila aparecerán los 256
218 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

posibles niveles de gris: desde el 0 al 255. En la segunda fila el número de


veces que, para la imagen dada, aparece el correspondiente nivel de gris. De
esta manera, si el nivel 88 aparece 322 veces los elementos Z(1,89) y
Z(2,89) serán 88 y 322 respectivamente (se pone en la posición 89 porque
las matrices en Matlab empiezan a numerarse en 1 y no en 0).
Funciones útiles.
function, size, zeros, for, if.
c) histograma.
Descripción.
Esta es la función principal.
Se llama sin parámetros y devuelve dos variables. La primera contiene el
vector histograma y la segunda una cadena de caracteres con uno de los
siguientes textos según sea el tipo de fichero que se quiera abrir: “blanco y
negro, escala de grises, paleta de color, color real, otro tipo”.
Si el fichero seleccionado no es una imagen mostrará un mensaje de error en
la línea de comandos y tambien un cuadro de dialogo indicando el suceso.
Llama a las funciones de usuario abreimagen e histogrisbucle, por lo que se
programará una vez realizadas éstas.
Funciones útiles
function, if, elseif, isbw, size, find, isgray, isind, ind2gray, isrgb, rgb2gray,
error, msgbox.
d) presresu.
Descripción.
Se le pasan como parámetros las dos variables que devuelve histograma. A
partir del vector histograma visualiza un representación del histograma y
muestra después un mensaje de información indicando el tipo de imagen o
de fichero que corresponde con la función. No devuelve ningún valor.
Funciones útiles.
function, stem, disp, blanks, msgbox.

3. INFORMACIÓN SOBRE PROGRAMACIÓN EN MATLAB.


1. Manual (Manual_matlab61.pdf): “Aprenda Matlab 6.1 como si estuviera en
primero”. Escuela Técnica Superior de Ingenieros Industriales. Universidad
Politécnica de Madrid. Javier García de Jalón • José Ignacio Rodríguez • Alfonso
Brazales.
1.1. El capítulo 6 de este manual, pgs. 58 a 90. El manual (1.313 Kb, 113
páginas, pdf) se encuentra entre los pdf del CD con la versión de
evaluación de Matlab. También se puede encontrar en cualquier ordenador
del laboratorio F3 (C:\matlabR12\help\pdf_doc\ Manual_matlab61.pdf) o
en Internet.
2. Ayuda de Matlab: using_ml.pdf (Using Matlab). En el capítulo 17 se dedican 75
páginas a explicar cómo programar en Matlab.
3. Ayuda en línea de comandos. Tecleando help images se muestra la información
listada a continuación. Tecleando help ElNombredeUnaFunción se muestra la
sintaxis específica para esa función.
PRÁCTICA 3: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN 219

Image Processing Toolbox.


Version 3.1 (R12.1) 18-May-2001

Release information.
images/Readme - Display information about current and
previous versions.

Image display.
colorbar - Display colorbar (MATLAB Toolbox).
getimage - Get image data from axes.
image - Create and display image object (MATLAB
Toolbox).
imagesc - Scale data and display as image (MATLAB
Toolbox).
immovie - Make movie from multiframe image.
imshow - Display image.
montage - Display multiple image frames as
rectangular montage.
movie - Play recorded movie frames.
subimage - Display multiple images in single figure.
truesize - Adjust display size of image.
warp - Display image as texture-mapped surface.

Image file I/O.


dicominfo - Read metadata from a DICOM message.
dicomread - Read a DICOM image.
dicom-dict.txt - Text file containing DICOM data
dictionary.
imfinfo - Return information about image file
(MATLAB Toolbox).
imread - Read image file (MATLAB Toolbox).
imwrite - Write image file (MATLAB Toolbox).

Image arithmetic.
imabsdiff - Compute absolute difference of two
images.
imadd - Add two images, or add constant to image.
imcomplement - Complement image.
imdivide - Divide two images, or divide image by
constant.
imlincomb - Compute linear combination of images.
immultiply - Multiply two images, or multiply image by
constant.
imsubtract - Subtract two images, or subtract constant
from image.

Geometric transformations.
checkerboard - Create checkerboard image.
findbounds - Find output bounds for geometric
transformation.
fliptform - Flip the input and output roles of a
TFORM struct.
220 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

imcrop - Crop image.


imresize - Resize image.
imrotate - Rotate image.
imtransform - Apply geometric transformation to image.
makeresampler - Create resampler structure.
maketform - Create geometric transformation structure
(TFORM).
tformarray - Apply geometric transformation to N-D
array.
tformfwd - Apply forward geometric transformation.
tforminv - Apply inverse geometric transformation.

Image registration.
cpstruct2pairs - Convert CPSTRUCT to valid pairs of
control points.
cp2tform - Infer geometric transformation from
control point pairs.
cpcorr - Tune control point locations using cross-
correlation.
cpselect - Control point selection tool.
normxcorr2 - Normalized two-dimensional cross-
correlation.

Pixel values and statistics.


corr2 - Compute 2-D correlation coefficient.
imcontour - Create contour plot of image data.
imhist - Display histogram of image data.
impixel - Determine pixel color values.
improfile - Compute pixel-value cross-sections along
line segments.
mean2 - Compute mean of matrix elements.
pixval - Display information about image pixels.
regionprops - Measure properties of image regions.
std2 - Compute standard deviation of matrix
elements.

Image analysis.
edge - Find edges in intensity image.
qtdecomp - Perform quadtree decomposition.
qtgetblk - Get block values in quadtree
decomposition.
qtsetblk - Set block values in quadtree
decomposition.

Image enhancement.
histeq - Enhance contrast using histogram
equalization.
imadjust - Adjust image intensity values or
colormap.
imnoise - Add noise to an image.
medfilt2 - Perform 2-D median filtering.
ordfilt2 - Perform 2-D order-statistic filtering.
PRÁCTICA 3: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN 221

stretchlim - Find limits to contrast stretch an image.


wiener2 - Perform 2-D adaptive noise-removal
filtering.

Linear filtering.
convmtx2 - Compute 2-D convolution matrix.
fspecial - Create predefined filters.
imfilter - Filter 2-D and N-D images.

Linear 2-D filter design.


freqspace - Determine 2-D frequency response spacing
(MATLAB Toolbox).
freqz2 - Compute 2-D frequency response.
fsamp2 - Design 2-D FIR filter using frequency
sampling.
ftrans2 - Design 2-D FIR filter using frequency
transformation.
fwind1 - Design 2-D FIR filter using 1-D window
method.
fwind2 - Design 2-D FIR filter using 2-D window
method.

Image deblurring.
deconvblind - Deblur image using blind deconvolution.
deconvlucy - Deblur image using Lucy-Richardson
method.
deconvreg - Deblur image using regularized filter.
deconvwnr - Deblur image using Wiener filter.
edgetaper - Taper edges using point-spread function.
otf2psf - Optical transfer function to point-spread
function.
psf2otf - Point-spread function to optical transfer
function.

Image transforms.
dct2 - 2-D discrete cosine transform.
dctmtx - Discrete cosine transform matrix.
fft2 - 2-D fast Fourier transform (MATLAB
Toolbox).
fftn - N-D fast Fourier transform (MATLAB
Toolbox).
fftshift - Reverse quadrants of output of FFT
(MATLAB Toolbox).
idct2 - 2-D inverse discrete cosine transform.
ifft2 - 2-D inverse fast Fourier transform
(MATLAB Toolbox).
ifftn - N-D inverse fast Fourier transform
(MATLAB Toolbox).
iradon - Compute inverse Radon transform.
phantom - Generate a head phantom image.
radon - Compute Radon transform.
222 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Neighborhood and block processing.


bestblk - Choose block size for block processing.
blkproc - Implement distinct block processing for
image.
col2im - Rearrange matrix columns into blocks.
colfilt - Columnwise neighborhood operations.
im2col - Rearrange image blocks into columns.
nlfilter - Perform general sliding-neighborhood
operations.

Morphological operations (intensity and binary images).


conndef - Default connectivity.
imbothat - Perform bottom-hat filtering.
imclearborder - Suppress light structures connected
to image border.
imclose - Close image.
imdilate - Dilate image.
imerode - Erode image.
imextendedmax - Extended-maxima transform.
imextendedmin - Extended-minima transform.
imfill - Fill image regions and holes.
imhmax - H-maxima transform.
imhmin - H-minima transform.
imimposemin - Impose minima.
imopen - Open image.
imreconstruct - Morphological reconstruction.
imregionalmax - Regional maxima.
imregionalmin - Regional minima.
imtophat - Perform tophat filtering.
watershed - Watershed transform.

Morphological operations (binary images)


applylut - Perform neighborhood operations using
lookup tables.
bwarea - Compute area of objects in binary image.
bwareaopen - Binary area open (remove small objects).
bwdist - Compute distance transform of binary
image.
bweuler - Compute Euler number of binary image.
bwhitmiss - Binary hit-miss operation.
bwlabel - Label connected components in 2-D binary
image.
bwlabeln - Label connected components in N-D binary
image.
bwmorph - Perform morphological operations on
binary image.
bwpack - Pack binary image.
bwperim - Determine perimeter of objects in binary
image.
bwselect - Select objects in binary image.
bwulterode - Ultimate erosion.
bwunpack - Unpack binary image.
PRÁCTICA 3: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN 223

makelut - Construct lookup table for use with


applylut.

Structuring element (STREL) creation and manipulation.


getheight - Get strel height.
getneighbors - Get offset location and height of
strel neighbors
getnhood - Get strel neighborhood.
getsequence - Get sequence of decomposed strels.
isflat - Return true for flat strels.
reflect - Reflect strel about its center.
strel - Create morphological structuring element.
translate - Translate strel.
Region-based processing.
roicolor - Select region of interest, based on
color.
roifill - Smoothly interpolate within arbitrary
region.
roifilt2 - Filter a region of interest.
roipoly - Select polygonal region of interest.

Colormap manipulation.
brighten - Brighten or darken colormap (MATLAB
Toolbox).
cmpermute - Rearrange colors in colormap.
cmunique - Find unique colormap colors and
corresponding image.
colormap - Set or get color lookup table (MATLAB
Toolbox).
imapprox - Approximate indexed image by one with
fewer colors.
rgbplot - Plot RGB colormap components (MATLAB
Toolbox).

Color space conversions.


hsv2rgb - Convert HSV values to RGB color space
(MATLAB Toolbox).
ntsc2rgb - Convert NTSC values to RGB color space.
rgb2hsv - Convert RGB values to HSV color space
(MATLAB Toolbox).
rgb2ntsc - Convert RGB values to NTSC color space.
rgb2ycbcr - Convert RGB values to YCBCR color space.
ycbcr2rgb - Convert YCBCR values to RGB color space.

Array operations.
circshift - Shift array circularly.
padarray - Pad array.

Image types and type conversions.


dither - Convert image using dithering.
gray2ind - Convert intensity image to indexed image.
224 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

grayslice - Create indexed image from intensity image


by thresholding.
graythresh - Compute global image threshold using
Otsu's method.
im2bw - Convert image to binary image by
thresholding.
im2double - Convert image array to double precision.
im2uint8 - Convert image array to 8-bit unsigned
integers.
im2uint16 - Convert image array to 16-bit unsigned
integers.
ind2gray - Convert indexed image to intensity image.
im2mis - Convert image to Java MemoryImageSource.
ind2rgb - Convert indexed image to RGB image
(MATLAB Toolbox).
isbw - Return true for binary image.
isgray - Return true for intensity image.
isind - Return true for indexed image.
isrgb - Return true for RGB image.
label2rgb - Convert label matrix to RGB image.
mat2gray - Convert matrix to intensity image.
rgb2gray - Convert RGB image or colormap to
grayscale.
rgb2ind - Convert RGB image to indexed image.

Toolbox preferences.
iptgetpref - Get value of Image Processing Toolbox
preference.
iptsetpref - Set value of Image Processing Toolbox
preference.

Demos.
dctdemo - 2-D DCT image compression demo.
edgedemo - Edge detection demo.
firdemo - 2-D FIR filtering and filter design demo.
imadjdemo - Intensity adjustment and histogram
equalization demo.
landsatdemo - Landsat color composite demo.
nrfiltdemo - Noise reduction filtering demo.
qtdemo - Quadtree decomposition demo.
roidemo - Region-of-interest processing demo.

Slide shows.
ipss001 - Region labeling of steel grains.
ipss002 - Feature-based logic.
ipss003 - Correction of nonuniform illumination.

Extended-examples.
ipexindex - Index of extended examples.
ipexsegmicro - Segmentation to detect
microstructures.
ipexsegcell - Segmentation to detect cells.
PRÁCTICA 3: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN 225

ipexsegwatershed - Watershed segmentation.


ipexgranulometry - Granulometry of stars.
ipexdeconvwnr - Wiener deblurring.
ipexdeconvreg - Regularized deblurring.
ipexdeconvlucy - Lucy-Richardson deblurring.
ipexdeconvblind - Blind deblurring.
ipextform - Image transform gallery.
ipexshear - Image padding and shearing.
ipexmri - 3-D MRI slices.
ipexconformal - Conformal mapping.
ipexnormxcorr2 - Normalized cross-correlation.
ipexrotate - Rotation and scale recovery.
ipexregaerial - Aerial photo registration.

Conversión entre tipos de datos de imágenes


De uint8 a double:
Indexada: B = double(A)+1;
Intensidad o RGB: B = double(A)/255;
Binaria: B = double(A);
De double a uint8
Indexada: B = uint8(round(A-1);
Intensidad o RGB: B = uint8(round(A*255);;
Binaria: B = logical(uint8(round(A)));

Sample TIFF images. Sample Landsat images.


alumgrns.tif logo.tif littlecoriver.lan
autumn.tif m83.tif mississippi.lan
bacteria.tif moon.tif montana.lan
blood1.tif mri.tif paris.lan
bonemarr.tif ngc4024l.tif rio.lan
cameraman.tif ngc4024m.tif tokyo.lan
canoe.tif ngc4024s.tif
circbw.tif paper1.tif
circles.tif pout.tif
circlesm.tif rice.tif
debye1.tif saturn.tif
eight.tif shadow.tif
enamel.tif shot1.tif
flowers.tif spine.tif
forest.tif testpat1.tif
ic.tif testpat2.tif
kids.tif text.tif
lily.tif tire.tif
trees.tif
PRÁ CTICA 4. OBTENCIÓN DEL HISTOGRAMA
DE UNA IMAGEN (II)

1. OBJETIVOS.
1. Teclear y probar las siguientes funciones observando cómo están realizadas.
Aprender a utilizar las primitivas empleadas y comprender los resultados que su
uso produce. Comparar el resultado de obtener el histograma de la imagen
utilizando estas funciones con el que se obtiene mediante la función imhist.
Indicar las diferencias –si se observan-.
2. Estudiar el código de la función histogrisvector. Comprender su funcionamiento
y observar las diferencias con histogrisbucle. Modificar ambas funciones de
manera que las dos presenten, tras su ejecución, el tiempo que han tardado. Probar
ambas con varias imágenes y observar cuál emplea más tiempo. Dar una
explicación de este hecho.

2. DETALLES: FUNCIONES A REALIZAR.


a) abreimagen.
a.1) Versión utilizando try ... catch.
function ima=abreimagen
% ima=abreimagen;
% Abre una imagen y la introduce en la variable ima
%
% Si se produce un error muestra un mensaje
% (3-03-2001). KA.

[nombreimagen, ruta] = uigetfile...

('E:\OProgram\Matlab12\toolbox\images\imdemos\*.tif;*.jpg;*.bmp'
,...
'Selecciona una imagen');
try
% Lee la imagen seleccionada
ima = imread(nombreimagen);
228 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

catch
% Si no se ha seleccionado ninguna...
% se indica en un cuadro de dialogo
beep;
msgbox('No se ha realizado ninguna seleccion',...
'Operacion incorrecta','error');
% Y se muestra el mensaje de error en la linea de comandos
lasterr
end %Fin del try

a.2) Versión utilizando if ... else.


function ima=abreimagenif
% ima=abreimagenif;
% Abre una imagen y la introduce en la variable ima
%
% Si se produce un error muestra un mensaje
% (5-04-2001). KA.

[nombreimagen, ruta] = uigetfile...

('E:\OProgram\Matlab12\toolbox\images\imdemos\*.tif;*.jpg;*.bmp'
,...
'Selecciona una imagen');

% Si nombreimagen contiene algun valor


if nombreimagen
% Lee la imagen seleccionada
ima = imread(nombreimagen);

% Cuando nombreimagen=0 => se ha producido algun error


else
% Si no se ha seleccionado ninguna...
% se indica en un cuadro de dialogo
msgbox('No se ha realizado ninguna seleccion',...
'Operacion incorrecta','error');
% Y se muestra el mensaje de error en la linea de comandos
lasterr
end % Fin del if

b) vector histograma.
b.1) histogrisbucle.
function Z=histogrisbucle(A)
% Z=histogrisbucle(A)
% Devuelve el vector Z conteniendo el histograma de la imagen I.
%
% La imagen A esta en escala de grises.
%
% (3-03-2001). KA.

[nfil, ncol]=size(A); % Numero de FILas y de COLumnas de la


% imagen
nvec=zeros(1,255); % Vector conteniendo el numero de veces
% que aparece cada tono
PRÁCTICA 4: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN (II) 229

% Inicialmente todos contienen cero.


nc=0;
for i=1:nfil,
for j=1:ncol,
if A(i,j)==0
nc=nc+1;
else
nvec(1,A(i,j))=nvec(1,A(i,j))+1; % Se incrementa en 1
% el nº de veces que
end % ha aparecido ese tono
end
end

% Se crea el vector conteniendo el histograma


Z(1,:)=0:1:255;
Z(2,1)=nc;
Z(2,2:256)=nvec;

b.2) histogrisvector.
function Z=histogrisvector(A)
% Z=histogrisvector(A)
% Devuelve el vector Z conteniendo el histograma de la imagen I.
%
% La imagen A esta en escala de grises.
%
% (3-03-2001). KA.

[nfil, ncol]=size(A); % Numero de FILas y de COLumnas de la


% imagen
nvec=zeros(1,255); % Vector conteniendo el numero de veces
% que aparece cada tono
% Inicialmente todos contienen cero.

for i=1:256,
indices=find(A==(i-1));
numele=size(indices);
nvec(i)=numele(1);
end % for

% Se crea el vector conteniendo el histograma


Z(1,:)=0:1:255;
Z(2,:)=nvec;

c) histograma.
function [H,tipo]=histograma
% [H, tipo]=histograma
% Obtiene el vector histograma de una imagen. La imagen se busca
% en el disco duro.
%
230 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

% Devuelve: 1) "H"= vector de dos dimensiones conteniendo el


% histograma.
% 2) "tipo"= string conteniendo el tipo de imagen
% -blanco y negro, grises, indexada, color real
% y otro tipo-.
%
% La imagen puede estar en blanco y negro o en escala de grises.
% Si se trata de una imagen en color, ya sea RGB o paleta,
% la convierte a grises y devuelve su histograma.
%
% En el vector de dos dimensiones "H" se encuentran, emparejados
% de dos en dos, en la primera dimension el nivel de gris y en
% la segunda el numero de pixeles.
% El nivel de gris esta ordenado de menor a mayor.
%
% (11-03-2002). KA.

imagen=abreimagen; % Se coge la imagen del disco y


% se pone en "imagen".

if isbw(imagen) % Si es binaria, entonces ...


[numfil,numcol]=size(imagen); % Se obtienen las dimensiones
numpix= numfil * numcol; % NUMero de PIXeles de la imagen
ind=find(imagen); % Se almacena en ind, los
% INDices de los elementos de
% "imagen" que son 1.
numunos=size(ind); % NUMero de UNOs que hay en la
% imagen binaria
H=[0 1;... % Se pone en el vector H la
% informacion del histograma
(numpix(1)-numunos(1)) numunos(1)];
tipo= 'blanco y negro'; % Se pone en "tipo" el modo de
% color de la imagen

elseif isgray(imagen) % Si es en grises, entonces ...


H=histogrisbucle(imagen);
tipo='escala de grises';

elseif isind(imagen)
imagen=ind2gray(imagen);
H=histogrisbucle(imagen);
tipo='paleta de color';

elseif isrgb(imagen)
imagen=rgb2gray(imagen);
H=histogrisbucle(imagen);
tipo='color real';
else
error('No es un tipo de imagen valido');
msgbox('El fichero seleccionado no es un fichero de imagen o
un tipo de imagen valido',...
'Operacion incorrecta','error');
tipo='otro tipo';
end
PRÁCTICA 4: OBTENCIÓN DEL HISTOGRAMA DE UNA IMAGEN (II) 231

d) presresu.
function presresu(H,tipo)
% presresu(H,tipo)
% PRESenta el RESUltado del histograma y el tipo de imagen
%
% Se dibuja el histograma con la funcion "stem".
% Aunque se modifican alguna de sus caracteristicas.
%
% (3-03-2001). KA.

% Dibujo del histograma modificando presentacion


%
% Tipo de linea por defecto, marcador "punto" y color azul
lineas=stem(H(1,:),H(2,:),'.b');
set(lineas,'Marker','none'); % se quita el marcardor del final
% de cada linea

%======== Modificacion del aspecto del grafico ============%


%
% Funciones utiles para manejar figuras, graficos y objetos de
% esos graficos
% gcf devuelve un entero, que es el handle de la ventana activa
% gca devuelve el handle de los ejes activos
% gco devuelve el handle del objeto activo

ejes=gca; % Obtiene un puntero a los ejes actuales


v=axis; % Valores minimo y maximo, en x e y, de los ejes
% actuales
vymax=[v(3) v(4)]; % Limites en el eje "y"
% Nuevos limites para el grafico actual
set(ejes,...
'XLim',[0 255],...
'YLim',vymax,...
'XTick', [0 50 100 150 200 250],...
'XTickLabel', [0 50 100 150 200 250]);

% ===Informacion sobre el tipo de imagen======

mensaje=sprintf('La imagen es en %s',tipo);


msgbox(mensaje,'Tipo de imagen','warn');
beep; % Aviso sonoro
PRÁ CTICA 5. CREACIÓN DE UNA GUI
(INTERFAZ GRÁFICA DE USUARIO) (I)
1. OBJETIVOS.
1. Aprender a diseñar formularios con controles (botones, deslizadores, cuadros de
texto, etc.) utilizando la herramienta “guide”.
2. Aprender a modificar las propiedades de los controles y formularios utilizando el
“inspector de propiedades”.
3. Aprender a llamar a las funciones de matlab desde los botones y demás controles
utilizando los “callbacks”.
234 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2. DETALLES.
Se creará una interface
gráfica que permita abrir
una imagen y visualizarla,
junto con su nombre, en
una zona de la pantalla.
Presionando un botón se
calculará su histograma
mostrando un mensaje que
indique el estado de esta
operación. Finalmente se
podrá visualizar su
histograma presionando el
botón correspondiente.

2.1. Ayuda.
En el manual “buildgui.pdf” se encuentra información sobre cómo crear estas GUIs y
cómo llamar a funciones (callbacks) desde ellas. La información sobre ejes y figuras se
encuentra en “graphg.pdf”

2.2. Creación de un formulario.

Abrir Matlab y después teclear guide.


El inspector de propiedades –Property Inspector- está en la barra de botones,
debajo de la barra de menús.
Crear el anterior formulario (figura) en la que aparecen los siguientes controles
(empezando de arriba hacia abajo, de izda a derecha y por filas):
PRÁCTICA 5: CREACIÓN DE UNA GUI (INTERFAZ GRÁFICA DE USUARIO) (I) 235

1. Dos controles tipo “texto estático”:


En el primero de ellos, cuando se abra la imagen se mostrará su nombre,
mientras que en el segundo aparecerá unicamente el texto “Histograma”,
indicando que en los ejes que están debajo de este texto se visualizará el
histograma correspondiente.
Propiedades comunes modificadas
BackgroundColor (% RGB): 83, 81, 78
FontName MS Sans Serif
FontSize 10.0
HorizontalAlignment center
Style text
Propiedades individuales modificadas
Propiedad Texto estático 1 Texto estático 2
Tag timagen thistog
String “para cada imagen, su Histograma
nombre”.

2. Dos controles tipo “axes”:


En el primero de ellos se mostrará la imagen abierta y en el segundo el
histograma correspondiente.
Propiedades comunes modificadas
Color (% RGB): 100, 100, 93
XTick [ ] (vacío)
YTick [ ] (vacío)
XColor 100, 100, 93
YColor 100, 100, 93
Propiedades individuales modificadas
Propiedad Eje 1 Eje 2
Tag ejeimagen ejehistog
Position [5 11 52 20] [70 11 52 20]

3. Tres controles tipo “push button”:


Permitiendo, respectivamente, cada botón abrir la imagen, calcular el
histograma y visualizar dicho histograma.
Propiedades comunes modificadas
FontSize 12
Propiedades individuales modificadas
Propiedad Botón 1 Botón 2 Botón 3
Tag pbabrir pbcalcular pbvisualizar
String Abrir Calcular Visualizar
Position [10 5 20 3] [70 5 20 3] [97 5 20 3]
Callbacks
Botón Callback
pbabrir guihistog('pbabrir_Callback',gcbo,[],guidata(gcbo))
pbcalcular guihistog('pbcalcular_Callback',gcbo,[],guidata(gcbo))
pbvisualizar guihistog('pbvisualizar_Callback',gcbo,[],guidata(gcbo))
236 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

Información sobre los Callbacks


Los “callbacks” son las llamadas a funciones que se realizan
desde los controles. El “callback” se ejecuta al hacer click sobre
el objeto correspondiente. Se puede asociar una llamada a una
función a otros eventos (cuando se crea o borra el objeto -
CreateFcn, DeleteFcn-, cuando se presiona el botón hacia abajo –
ButtonDownFcn-) pudiendo utilizar funciones diferentes. Lo
único que hay que hacer es indicar el nombre de la función en la
propiedad correspondiente, siguiendo, al escribir la llamada, el
convenio que establece Matlab para los callbacks que es el
siguiente:
En la llamada desde la propiedad del botón:
NombreFigura(‘nombre_funcion’, gcbo,[],guidata(gcbo))
Ej.: guihistog('pbabrir_Callback',gcbo,[],guidata(gcbo))
En en código de la figura(formulario):
Dentro del m-file de la figura (ej.: guihistog.m), se escribe el
código que deseemos que se ejecute como si de una subfunción se
tratara, siguiendo el siguiente convenio al escribir la declaración
de la función:
function varargout = pbabrir_Callback(h, eventdata,
handles, varargin)
Donde se puede observar que lo único que cambia entre las
declaraciones de distintas funciones es el nombre, que suele
formarse –por convenio y no necesariamente-, por el “tag” del
control, unido mediante un guión bajo al tipo de llamada: callback
cuando se realice desde esta propiedad, u otro, por ejemplo
DeleteFcn, cuando se realice desde esta otra propiedad.
Los argumentos que se le pasan a la función en la llamada son los
que se ponen como parámetros en la declaración y permiten hacer
referencia a los objetos de la figura y a las variables que se quiera
pasar:

Llamada Declaración Interpretación


guihistog('pbabrir_Callback', function varargout = Convenio para llamar y
gcbo, [], guidata(gcbo)) pbabrir_Callback(h, declarar las subfunciones
eventdata, handles, varargin)
'pbabrir_Callback' pbabrir_Callback Es el nombre de la función
gcbo h Puntero (“handle”) del
objeto desde el que se
realiza la llamada. En este
caso un puntero al botón
“pbabrir”.
[] eventdata Es un array vacío. No
contiene ningún dato
reservándose para uso
futuro.
PRÁCTICA 5: CREACIÓN DE UNA GUI (INTERFAZ GRÁFICA DE USUARIO) (I) 237

Llamada Declaración Interpretación


guidata(gcbo) handles Es una estructura
conteniendo los “handles”
de los componentes de la
GUI. Se utilizan los “tags”,
etiquetas, como nombre de
los campos, ej.:
hadles.pbabrir.
varagin Por si se le quieren pasar
más parámetros a la función
(un número variable de
ellos).

4. Un botón “Salir” y un cuadro de texto estático.


El botón salir permitirá cerrar el
formulario. Al pulsar sobre él
aparecerá un cuadro de diálogo
pidiendo confirmación para
abandonar la aplicación.
En el cuadro de texto estático aparecerán tres mensajes diferentes:
Cuando se abre la aplicación aparecerá el texto “línea de estado”.
Cuando se pulse el botón “Calcular”, aparecerá el mensaje
“Calculando...”.
Cuando la función histograma finalice el calculo del vector,
aparecerá el mensaje “Finalizado el calculo”.
Propiedades modificadas
Propiedad Botón “Salir” Cuadro de texto
Tag pbsalir testado
String Salir “en cada momento, el
adecuado”
Position [9.8 0.6 22.5 3.2] [76 0.8 39 1.5]
BackgroundColor - 77, 87 72
ForegroundColor - 0, 0, 37
FontName - Courier New
Una vez finalizado, se activa la figura en el botón “Activate Figure” de la barra de
herramientas.

3. ADAPTAR EL CÓDIGO DE LAS FUNCIONES DE LA PRÁCTICA ANTERIOR.


Una vez creado el formulario con los distintos controles es necesario asociar cada botón
con la función correspondiente, direccionar la presentación de la imagen y el histograma
al eje apropiado y mostrar el nombre de la imagen y el mensaje que proceda en su
cuadro de texto.
Aunque pueden no modificarse las funciones de la práctica anterior, lo primero que
se hará consistirá en crear una copia de todas las funciones utilizadas añadiéndole al
nombre las letras “hg” (abrir pasará a llamarse hgabrir). Se guardarán en un directorio
dentro del path de Matlab.
238 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

a) Botón “Abrir.”
Al pulsar sobre este botón se realizarán las siguientes acciones:
a.1) Abrir una imagen y almacenar su nombre y la matriz de la imagen en dos
variables.
a.2) Guardar la imagen en el campo “UserData” del botón pbabrir.
Acceso a variables desde varias funciones.
Por defecto, todas las variables utilizadas por una función de Matlab son
locales. Si se desea acceder al contenido de una variable desde una
función diferente a la que obtuvo su valor hay dos soluciones:
• Un modo de poder acceder a datos entre distintas
funciones consiste en almacenarlos en la propiedad
“UserData” de cada control.
La manera de cambiar el valor de una propiedad de
un objeto es:
set(handle_del_objeto,’nombre_de_la_prop
iedad’,valor)
• La otra forma es declarando las variables globales. Utilizar
para ello la palabra reservada global..
a.3) Activar los ejes de la imagen.
Para activar unos ejes determinados se llama a la función axes pasándole
como parámetro el puntero de los ejes que queremos activar (en este caso
será handles.ejeimagen).
a.4) Mostrar la imagen.
a.5) Poner el nombre de la imagen en el cuadro de texto correspondiente.
Consiste en poner el nombre de la imagen en la propiedad “String” del
cuadro de texto timagen.
b) Botón “Calcular”.
Al pulsar sobre este botón se realizarán las siguientes acciones:
b.1) Se coge la imagen de donde se había almacenado y se mete en una variable.
Para coger el contenido de una propiedad de un objeto se utiliza la
primitiva get:
nomvariable=get (handles_del_objeto,’nombre_propiedad’);
b.2) Antes de empezar a calcular el histograma se pone el texto “Calculando...”
en el cuadro de texto correspondiente.
b.3) Se llama a la función hghistograma. Esta función devuelve lo mismo que la
función histograma: el vector conteniendo el histograma y el tipo de imagen.
b.4) En cuanto acaba la función anterior, se escribe “Finalizado el calculo” en el
cuadro de texto correspondiente.
b.5) Se crea una variable tipo “estructura” en la que se almacenan, en el primer
campo el vector histograma y el segundo el tipo.
b.6) Se almacena esta variable en la propiedad ‘UserData’ del botón
“pbcalcular”.
c) Botón “Visualizar”.
Al pulsar sobre este botón se realizarán las siguientes acciones:
PRÁCTICA 5: CREACIÓN DE UNA GUI (INTERFAZ GRÁFICA DE USUARIO) (I) 239

c.1) Se coge la variable tipo estructura almacenada anteriormente y se mete en


una variable.
b.2) Se activan los ejes del histograma (ejehistog).
b.3) Se llama a la función hgpresresu mostrando el histograma en los ejes
activos y el correspondiente mensaje de “modo de color”.
d) Botón “Salir”
Al pulsar sobre este botón se llamará a la función hgsalir.
Esta función realiza las siguientes acciones:
d.1) Muestra un cuadro de diálogo en el que se pregunta si se desea salir de la
aplicación.
d.2) Si se selecciona “Si” se cierra la ventana.
d.2) Seleccionando cualquier otro botón, se cierra el cuadro de diálogo y no pasa
nada más.
PRÁ CTICA 6. CREACIÓN DE UNA GUI
(INTERFAZ GRÁ FICA DE USUARIO) (II)
1. OBJETIVOS.
1. Completar la práctica anterior utilizando como solución, si es necesario, el código
que se presenta a continuación.
2. Si aún no se ha hecho, crear una nueva función (hgpresbn) que visualice el
histograma de una imagen binaria de una manera más apropiada a cómo lo hace
hgpresresu.
3. Si aún no se ha hecho, modificar el funcionamiento del botón “Visualizar” para
que llame a la función hgpresbn cuando tenga que visualizarse el histograma de
una imagen en blanco y negro, y llame a hgpresresu cuando sea neceario
visualizar el histograma de una imagen en escala de gris.
4. Si aún no se ha hecho, estudiar el código de la función histogrisvector.
Comprender su funcionamiento y observar las diferencias con histogrisbucle.
Modificar ambas funciones de manera que las dos presenten, tras su ejecución, el
tiempo que han tardado. Probar ambas con varias imágenes y observar cuál
emplea más tiempo. Dar una explicación de este hecho.

2. INFORMACIÓN ADICIONAL.
2.1. Modificación función abreimagen.
La función abreimagen se modifica, pasándose a llamar hgabreimagen de manera que
devuelva, además de la imagen, el nombre que ésta tiene.
El código es el siguiente:

function [ima,nombreimagen]=hgabreima
% [ima,nombreimagen]=hgabreima;
% Abre una imagen y la introduce en la variable ima
%
% Si se produce un error muestra un mensaje
% (12-04-2001). KA.
242 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

[nombreimagen, ruta] = uigetfile...

('E:\OProgram\Matlab12\toolbox\images\imdemos\*.tif;*.jpg;*.bmp'
,...
'Selecciona una imagen');
try
% Lee la imagen seleccionada
ima = imread(nombreimagen);
catch
% Si no se ha seleccionado ninguna...
% se indica en un cuadro de dialogo
beep;
msgbox('No se ha realizado ninguna seleccion',...
'Operacion incorrecta','error');
% Y se muestra el mensaje de error en la linea de comandos
lasterr
end

2.2. Código del botón “Abrir”.


En el fichero guihistog.m, el código que aparecerá para el callback del botón pbabrir
será el siguiente:

% --------------------------------------------------------------
function varargout = pbabrir_Callback(h, eventdata, handles,
varargin)
% Stub for Callback of the uicontrol handles.pbabrir.

% Abrir y guardar
[ima,nombre]=hgabreima; % Se abre la imagen y se
% almacena en "ima".
% El nombre de la imagen se
% pone en la variable
% "nombre"
set(handles.pbabrir,'UserData',ima); % Se guarda la imagen
% en el campo "UserData"
% del boton "pbabrir"

% Visualizar
axes(handles.ejeimagen); % Se activan los ejes donde se
% mostrara la imagen
imshow(ima); % Se muestra la imagen
set(handles.timagen,'String',nombre); % Se muestra el
% nombre de la imagen

2.3. Modificar opciones de la aplicación para visualizar imágenes.


Cuando se está diseñando el
formulario “guihistog.fig”
utilizando la herramienta guide”,
aparece una barrá de menús, siendo
el segundo por la derecha el menú de herramientas
(Tools).
Al desplegar este menú, aparecen cuatro opciones,
siendo la tercera de ellas “Opciones de la aplicación”.:
PRÁCTICA 6: CREACIÓN DE UNA GUI (INTERFAZ GRÁFICA DE USUARIO) (II) 243

Cuando se trabaja con GUI’s que visualizan imágenes, una manera de permitir que
los comandos de visualización ejecutados muestren su resultado en los ejes dispuestos al
efecto consiste en seleccionar en la línea de “Command-line accessibility”, la opción:
On (recommended for plotting windows).
Realiza este ajuste si quieres poder visualizar la imagen y el histograma en los ejes
diseñados del formulario.

2.4. Funciones de los botones.


El código de las funciones que se ejecutan al pulsar sobre los botones Salir, Calcular y
Visualizar, es el siguiente:

% --------------------------------------------------------------
function varargout = pbsalir_Callback(h, eventdata, handles,
varargin)
% Stub for ButtondownFcn of the uicontrol handles.pbsalir.
hgsalir;

% --------------------------------------------------------------
function varargout = pbcalcular_Callback(h, eventdata, handles,
varargin)
% Stub for ButtondownFcn of the uicontrol handles.pbcalcular.

% Obtener imagen y calcular


ima=get(handles.pbabrir,'UserData'); % Se coge la imagen
% del boton pbabrir
set(handles.testado,'String','Calculando...'); % Mensaje de
% estado
[vechis,tipo]=hghistograma(ima); % Se calcula el histograma
set(handles.testado,'String','Finalizado el calculo');
% Mensaje de estado

% Guardar
datos=struct('vector',vechis,'tipo',tipo); % Se almacena en una
% estructura
244 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

set(handles.pbcalcular,'UserData',datos); % Se guarda en el
% boton pbcalcular

% --------------------------------------------------------------
function varargout = pbvisualizar_Callback(h, eventdata,
handles, varargin)
% Stub for ButtondownFcn of the uicontrol handles.pbvisualizar.

datos=get(handles.pbcalcular,'UserData'); % Coger vector y tipo


axes(handles.ejehistog); % Activar ejes
hgpresresu(datos.vector,datos.tipo); % Mostrar histograma
% y tipo de imagen

2.5. Función hgsalir.

function hgsalir()
% hgsalir();
% Cuadro diálogo avisa guardar antes de salir o cierra la
% aplicación
% (12-04-2001). KA.

mensaje='¿Desea salir de la aplicacion?';


nombot=questdlg(mensaje, 'Salir', 'Si', 'No', 'Cancelar', 'Si');

switch nombot,
case 'Si', % Cierra la figura "fhisto"
closereq;
case 'No', % Unicamente se cierra el cuadro de dialogo
case 'Cancelar', % Unicamente se cierra el cuadro de dialogo
end % switch
PRÁ CTICA 7. PROGRAMACIÓN DE OPERACIONES
MORFOLÓGICAS (I): EROSIÓN, DILATACIÓN,
APERTURA Y CERRAMIENTO
1. OBJETIVOS.
Cuando finalice la práctica el alumno será capaz de:
1. Escribir un algorimo para:
a. Binarizar una imagen.
b. Realizar el negativo de una imagen.
c. Realizar las cuatro operaciones morfológicas básicas.
2. Realizar un conjunto de funciones en Matlab que permitan:
a. Binarizar una imagen.
b. Realizar el negativo de una imagen.
c. Realizar las cuatro operaciones morfológicas básicas.
Dada una imagen en escala de grises obtener una imagen binaria.

2. DETALLES: FUNCIONES A REALIZAR.


2.1. Obtención de una imagen binaria.
Puede realizar las pruebas con la imagen blood1.tif que se
encuentra en: E:\MatlabR12\toolbox\images\imdemos
Puede convertirla a jpg, si lo desea, utilizando las
funciones de lectura y escritura de imágenes de Matlab.
Visualice el histograma de la imagen. Indique con qué
tipos de datos puede utilizarse esta función.
Binarice la imagen. Elija un umbral a partir del histograma
anterior.
Guarde la imagen anterior en el disco con un nombre (ej.
Bloodbin.jpg) y en formato JPEG.
246 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2.2. negativo.m
Realice una función que, dada una imagen binaria, realice su
negativo.
2.3. erosiona.m
Realice una función que erosione el primer plano (blanco) de
imágenes binarias.
Como en la imagen anterior, los objetos de interés –células- están en negro, será
necesario realizar su negativo.
Detalles.
imgenerosionada=erosiona(imgoriginal, 5);
A la función se le pasarán dos parámetros.
El primero podrá ser, indistintamente, el nombre de una variable que
contenga la imagen o la cadena de caracteres que corresponde con el
nombre de una imagen que se encuentra en el path (si no está en el path
habrá que proporcionarle la ruta completa).
El segundo será el factor de forma del kernel (3, 5, 7, ...). Será siempre
un número impar y corresponderá con el número de elementos que tiene
un lado del cuadrado que formará el kernel.
La función devolverá la misma imagen una vez erosionada.
Ayuda.
Algunas funciones que pueden ser útiles son:
if...else...end, try, catch, return, imread, errordlg, rem, find, size, for, all.

Erosiones con kernels de 3, 5 y 7

2.4. dilata.m
Realice una función que dilate el primer plano (blanco) de imágenes binarias.
A esta función se le pasan los dos mismos parámetros que a la anterior,
devolviendo una imagen dilatada según el factor de forma del kernel.
Ayuda.
Además de las anteriores puede ser de utilidad la función any.
PRÁCTICA 7: PROGRAMACIÓN DE OPERACIONES MORFOLÓGICAS (I) 247

2.5. abre.m
Realice una función que realice una apertura del primer plano (blanco) de imágenes
binarias.
A esta función se le pasan los dos mismos parámetros que a la anterior,
devolviendo una imagen con apertura según el factor de forma del kernel.

2.6. cierra.m
Realiza una función que realice un cerramiento del primer plano (blanco) de imágenes
binarias.
A esta función se le pasan los dos mismos parámetros que a la anterior,
devolviendo una imagen tras un cerramiento según el factor de forma del kernel.
PRÁ CTICA 8. PROGRAMACIÓN DE OPERACIONES
MORFOLÓGICAS (II): SOLUCIÓN
1. OBJETIVOS.
El objetivo de esta sesión consiste en:
Estudiar los m-files a continuación presentados.
Enterder cómo funcionan (comprende el algoritmo general y buscar en la ayuda el
funcionamiento de las primitivas que no se conozcan).
Comprobar su funcionamiento utilizando diferentes imágenes y diferentes
tamaños de kernel.
Modificar llas funciones –si se quiere- y plantear alternativas.

2. DETALLES: FUNCIONES A REALIZAR.


2.1. binariza.m
function imagen=binariza(imagen, umbral)
% ima=binariza(imagen, umbral)
% Convierte una imagen en escala de grises a una imagen en
% blanco y negro
% kk. 8-05-02
% Se obtienen las coordenadas de los niveles de gris menores o
% iguales que el umbral y se ponen a 0 (negro)
cordenmen=find(imagen<=umbral);
imagen(cordenmen)=0;
% Se obtienen las coordenadas de los niveles de gris mayores que
% el umbral y se ponen a 255 (blanco)
cordenmay=find(imagen>umbral);
imagen(cordenmay)=255;

2.2. negativo.m
function imgres=negativo(imgint)
%imgres=negativo(imgint)
%Dada una imagen binaria, imgint, devuelve su negativo
imgres=~imgint;
250 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2.3. erosiona.m
function imgero=erosiona(matori, elemas)
%imgero=erosiona(matori, elemas);
%Erosiona el primer plano de una imagen binaria utilizando una
%máscara impar (3x3, 5x5, 7x7, etc.).
%Se le pasa como parámetros:
%1) matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la
% imagen
%2) elemas= el factor de forma de la máscara (3 para un
% kernel de 3x3, 7 para 7x7, etc.)

%====================================
%COMPROBACIÓN Y LECTURA DE DATOS

%Se asigna la imagen a una variable, comprobando si se ha pasado


%un nombre o una matriz
if ischar(matori)
try
img=imread(matori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=matori;
end

imgero=img;

%Se comprueba que el número es impar


%if ~rem(elemas,2)
% 'es par'
%else
% 'es impar'
%end

if ~rem(elemas,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end

%=======================================
%ALGORITMO:

%1) Se localizan los elementos 1 de la imagen


%2) Se calcula el valor de los elementos que pertencen al kernel
% para cada uno de esos elementos
%Cada elemento, cuyo valor quede dentro de la imagen, se
%mete en un vector kernel
%3) Si todos los elementos del kernel son 1 se deja el elemento
% sobre el que se está a 1
PRÁCTICA 8: PROGRAMACIÓN DE OPERACIONES MORFOLÓGICAS (II): SOLUCIÓN 251

%4) Si alguno es distinto de 1, se pone ese elemento a 0


%______________________________________________________%

%1. Elementos de la imagen con valor 1


[f,c]=find(img); %indices de los elementos 1
[nf,nc]=size(f); %número de elementos de la imagen que valen 1
[nfimg, ncimg]=size(img); %nº de filas y columnas de la imagen

eleker=(elemas-1)/2; %nº de elementos del kernel rodeando al


%centro.

%Para cada elemento de la imagen que vale 1


for i=1:nf
fi=f(i,1);%posición de la fila del elemento concreto
ci=c(i,1);%posición de la columna del elemento concreto

%2. Elementos que pertenecen al kernel


%factor de tamaño del kernel = elemas (si es de 5 x 5,
% elemas = 5)

%Incluir elementos que queden dentro de la matriz en el


%vector kernel
%En las filas:
% Menor valor aceptable para la primera fila = 1
% Máximo valor aceptable para la última fila = número de
%filas de la imagen
%En las columnas:
% Menor valor columna más a la izda = 1
% Mayor valor columna más a la dcha = número columnas de
%la imagen

%Se inicializan los valores para hallar los límites del


%kernel
kerfilini=fi-eleker; %1er elemento de la fila superior
%del kernel
kerfilfin=fi+eleker; %1er elemento de la fila inferior
%del kernel
kercolizq=ci-eleker; %1er elemento de la columna
%izquierda del kernel
kercoldch=ci+eleker; %1er elemento de la columna derecha
%del kernel

%Se hallan los limites del kernel (diferentes si el elemento


%está en un borde).
if kerfilini<1
kerfilini=1;
end
if kerfilfin>nfimg
kerfilfin=nfimg;
end
if kercolizq<1
kercolizq=1;
end
252 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

if kercoldch>ncimg
kercoldch=ncimg;
end

%Se seleccionan los elementos del kernel


kernel=img(kerfilini:kerfilfin,kercolizq:kercoldch);

%3. Si NO TODOS son 1 se pone su valor a 0 -en otro caso no se


modifica y queda a 1.
if ~all(all(kernel)), % se comprueban todas las filas y todas
%las columnas
imgero(fi,ci)=0;
end %if all

end %for -se acaba con todos los elementos que son 1 en la
%imagen

2.4. dilata.m
function imgdil=dilata(matori, elemas)
%imgdil=dilata(matori, elemas);
%Dilata el primer plano de una imagen binaria utilizando una
%máscara impar (3x3, 5x5, 7x7, etc.).
%Se le pasa como parámetros:
% matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la imagen
% elemas= el factor de forma de la máscara (3 para un kernel de
% 3x3, 7 para 7x7, etc.)

%====================================
%COMPROBACIÓN Y LECTURA DE DATOS

%Se asigna la imagen a una variable, comprobando si se ha pasado


%un nombre o una matriz
if ischar(matori)
try
img=imread(matori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
return
end
else
img=matori;
end

imgdil=img;

%Se comprueba que el número es impar


%if ~rem(elemas,2)
% 'es par'
%else
% 'es impar'
%end
PRÁCTICA 8: PROGRAMACIÓN DE OPERACIONES MORFOLÓGICAS (II): SOLUCIÓN 253

if ~rem(elemas,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end

%=======================================
%ALGORITMO:

%1) Se localizan los elementos 0 de la imagen


%2) Se calcula el valor de los elementos que pertencen al kernel
% para cada uno de esos elementos
%Cada elemento, cuyo valor quede dentro de la imagen, se
%mete en un vector kernel
%3) Si todos los elementos del kernel son 0 se deja el elemento
% sobre el que se está a 0
%4) Si alguno es distinto de 0, se pone ese elemento a 1
%______________________________________________________%

%1. Elementos de la imagen con valor 1


[f,c]=find(~img); %indices de los elementos 0
%-observese que se ha negado la matriz-
[nf,nc]=size(f); %número de elementos de la imagen que
%valen 0
[nfimg, ncimg]=size(img); %nº de filas y columnas de la imagen

eleker=(elemas-1)/2; %nº de elementos del kernel rodeando al


%centro.

%Para cada elemento de la imagen que vale 0


for i=1:nf
fi=f(i,1);%posición de la fila del elemento concreto
ci=c(i,1);%posición de la columna del elemento concreto

%2. Elementos que pertenecen al kernel


%factor de tamaño del kernel = elemas (si es de 5 x 5,
%elemas = 5)

%Incluir elementos que queden dentro de la matriz en el


%vector kernel
%En las filas:
% Menor valor aceptable para la primera fila = 1
% Máximo valor aceptable para la última fila = número de
%filas de la imagen
%En las columnas:
% Menor valor columna más a la izda = 1
% Mayor valor columna más a la dcha = número columnas de
%la imagen

%Se inicializan los valores para hallar los límites del


%kernel
kerfilini=fi-eleker; %1er elemento de la fila superior del
%kernel
kerfilfin=fi+eleker; %1er elemento de la fila inferior del
%kernel
254 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

kercolizq=ci-eleker; %1er elemento de la columna izquierda


%del kernel
kercoldch=ci+eleker; %1er elemento de la columna derecha
%del kernel

%Se hallan los limites del kernel (diferentes si el elemento


%está en un borde).
if kerfilini<1
kerfilini=1;
end
if kerfilfin>nfimg
kerfilfin=nfimg;
end
if kercolizq<1
kercolizq=1;
end
if kercoldch>ncimg
kercoldch=ncimg;
end

%Se seleccionan los elementos del kernel


kernel=img(kerfilini:kerfilfin,kercolizq:kercoldch);

%3. Si TODOS son 0 se deja su valor a 0 -en otro caso no se


% modifica y queda a 1.
%sp =
% 0 0 0
% 0 0 0
% 0 0 0
% ~any(any(sp))
%ans =
% 1
%any(any(sp))
%ans =
% 0

if any(any(kernel)), % se comprueban todas las filas y todas


% las columnas
imgdil(fi,ci)=1;
end %if all

end %for -se acaba con todos los elementos que son 1 en la
%imagen

2.5. abre.m
function imgape=abre(matori, elemas)
%imgdil=abre(matori, elemas);
%Realiza la apertura del primer plano de una imagen binaria
%utilizando una máscara
%impar (3x3, 5x5, 7x7, etc.).
%Se le pasa como parámetros:
% matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la imagen
% elemas= el factor de forma de la máscara (3 para un kernel de
% 3x3, 7 para 7x7, etc.)
PRÁCTICA 8: PROGRAMACIÓN DE OPERACIONES MORFOLÓGICAS (II): SOLUCIÓN 255

imgape=erosiona(matori,elemas);
imgape=dilata(imgape,elemas);

2.6. cierra.m
function imgape=cierra(matori, elemas)
%imgdil=cierra(matori, elemas);
%Realiza el cerramiento del primer plano de una imagen binaria
%utilizando una máscara
%impar (3x3, 5x5, 7x7, etc.).
%Se le pasa como parámetros:
%1) matori=el nombre de una imagen que ha de estar en el path
% -entre %comillas- o es la variable que contiene a la
% imagen
%2) elemas= el factor de forma de la máscara (3 para un
% kernel de 3x3, %7 para 7x7, etc.)

imgape=dilata(matori,elemas);
imgape=erosiona(imgape,elemas);
PRÁ CTICA 9. FILTROS PASO ALTO Y PASO BAJO (I)
SOBELL, PREWITT, ROBERTS, LAPLACIANA, MEDIA Y MEDIANA
(M-FILES: SOBELL.M, PREWITT.M, ROBERTS.M, LAPLACIANA.M, MEDIA.M, MEDIANA.M)

1. OBJETIVOS.
Comprender cómo se realizan algunas operaciones de filtrado.
Realizar las funciones de Matlab (m-files) que permitan aplicar a una imagen los
filtros paso alto y paso bajo indicados en el enunciado.

2. DETALLES.
En todas las funciones, la imagen que se le pasa puede ser o bien una variable
conteniendo la matriz de la imagen, o bien una cadena con el nombre de la imagen.
Realizar las siguientes funciones en Matlab:
sobell.m
Aplica los operadores sobell a una imagen. Se le puede indicar que
aplique únicamente el operador horizontal, el vertical o ambos.
Llamadas a la función:
A = sobell(imagen, ‘hor’);
A = sobell(imagen, ‘ver’);
A = sobell(imagen, ‘amb’);
Devuelve y se guarda en la variable “A” la imagen “imagen” tras
aplicarle el filtro sobell, únicamente horizontal: ‘hor’, únicamente
vertical ‘ver’, o ambos ‘amb’.
prewitt.m
Aplica los operadores prewitt a una imagen. Se le puede indicar que
aplique únicamente el operador horizontal, el vertical o ambos.
Llamadas a la función:
A = prewitt(imagen, ‘hor’);
A = prewitt (imagen, ‘ver’);
258 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

A = prewitt (imagen, ‘amb’);


Devuelve y se guarda en la variable “A” la imagen “imagen” tras
aplicarle el filtro prewitt, únicamente horizontal: ‘hor’, únicamente
vertical ‘ver’, o ambos ‘amb’.
laplaciana.m
Aplica el operador laplaciana a una imagen.
Llamada a la función:
A = laplaciana(imagen);
Devuelve y se guarda en la variable “A” la imagen “imagen” tras
aplicarle el filtro laplaciana.
media.m
Aplica el filtro de media a una imagen. Se le puede indicar el tamaño del
kernel (3, 5, 7, 9, ...)
Llamadas a la función:
A = media(imagen, 3);
A = media (imagen, 9);
A = media (imagen, 15);
Devuelve y se guarda en la variable “A” la imagen “imagen” tras
aplicarle el filtro de media, utilizando un kernel de tamaño 3, 9 y 15.
mediana.m
Aplica el filtro de mediana a una imagen. Se le puede indicar el tamaño
del kernel (3, 5, 7, 9, ...)
Llamadas a la función:
A = mediana(imagen, 3);
A = mediana (imagen, 9);
A = mediana (imagen, 15);
Devuelve y se guarda en la variable “A” la imagen “imagen” tras
aplicarle el filtro de mediana, utilizando un kernel de tamaño 3, 9 y 15.
PRÁ CTICA 10. FILTROS PASO ALTO Y PASO BAJO (II)
SOBELL, PREWITT, ROBERTS, LAPLACIANA, MEDIA Y MEDIANA
(M-FILES: SOBELL.M, PREWITT.M, ROBERTS.M, LAPLACIANA.M, MEDIA.M, MEDIANA.M).

1. OBJETIVOS.
Teclear y probar las siguientes funciones observando cómo están realizadas.
Aprender a utilizar las primitivas empleadas y comprender los resultados que su
uso produce.
Probarlas con diferentes imágenes y observar su funcionamiento.
Modificarlas –si se quiere- y plantear alternativas.

sobell.m
function imafil=sobell(imaori, modo)
% imafil=sobell(imaori, modo)
% Aplica a "imaori" el filtro sobell.
% Se indica, en el parametro modo, si se le aplica:
% 'hor': kernel horizontal
% 'ver': kernel vertical
% 'amb': kernel horizontal y vertical
%
% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS
% Se asigna la imagen a una variable, comprobando si se ha
% pasado un nombre o una matriz

if ischar(imaori)
try
img=imread(imaori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
260 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

else
img=imaori;
end

% ==================================================
% CONVOLUCION CON LOS KERNELS, SEGUN EL MODO ELEGIDO

% kernels
kerhor= [-1 -2 -1; 0 0 0; 1 2 1];
kerver= kerhor';
switch lower(modo)
case 'hor'
imafil=conv2(img,kerhor);
case 'ver'
imafil=conv2(img,kerver);
case 'amb'
imafil=conv2(img,kerhor)+conv2(img,kerver);
otherwise
disp('Modo desconocido')
end

prewitt.m
function imafil=prewitt(imaori, modo)
% imafil=prewitt(imaori, modo)
% Aplica a "imaori" el filtro prewitt.
% Se indica, en el parametro modo, si se le aplica:
% 'hor': kernel horizontal
% 'ver': kernel vertical
% 'amb': kernel horizontal y vertical
%
% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS
% Se asigna la imagen a una variable, comprobando si se ha
% pasado un nombre o una matriz

if ischar(imaori)
try
img=imread(imaori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=imaori;
end

% ==================================================
% CONVOLUCION CON LOS KERNELS, SEGUN EL MODO ELEGIDO
% kernels
kerhor= [-1 -1 -1; 0 0 0; 1 1 1];
PRÁCTICA 10: FILTROS PASO ALTO Y PASO BAJO (II) 261

kerver= kerhor';

switch lower(modo)
case 'hor'
imafil=conv2(img,kerhor);
case 'ver'
imafil=conv2(img,kerver);
case 'amb'
imafil=conv2(img,kerhor)+conv2(img,kerver);
otherwise
disp('Modo desconocido')
end

roberts.m
function imafil=roberts(imaori, modo)
% imafil=roberts(imaori, modo)
% Aplica a "imaori" el filtro roberts.
% Se indica, en el parametro modo, si se le aplica:
% 'hor': kernel horizontal
% 'ver': kernel vertical
% 'amb': kernel horizontal y vertical
%
% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS
% Se asigna la imagen a una variable, comprobando si se ha
% pasado un nombre o una matriz

if ischar(imaori)
try
img=imread(imaori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=imaori;
end

% ==================================================
% CONVOLUCION CON LOS KERNELS, SEGUN EL MODO ELEGIDO

% kernels
kerhor= [1 0; 0 -1];
kerver= [0 1; -1 0];
switch lower(modo)
case 'hor'
imafil=conv2(img,kerhor);
case 'ver'
imafil=conv2(img,kerver);
case 'amb'
imafil=conv2(img,kerhor)+conv2(img,kerver);
262 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

otherwise
disp('Modo desconocido')
end

laplaciana.m
function imafil=laplaciana(imaori)
% imafil=laplaciana(imaori, modo)
% Aplica a "imaori" el filtro laplaciana.
%
% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS
% Se asigna la imagen a una variable, comprobando si se ha
% pasado un nombre o una matriz

if ischar(imaori)
try
img=imread(imaori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=imaori;
end

kernel=[0 -1 0; -1 4 -1; 0 -1 0];

% Convolucion de la imagen con el kernel.


imafil=conv2(img,kernel);

media.m
function imgfil=media(matori,eleker)
% imgfil=media(matori, eleker)
% Aplica un filtro de media de una imagen utilizando un kernel
impar (3x3, 5x5, 7x7, etc.).
% Se le pasa como parámetros:
% 1) matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la imagen
% 2) eleker= el factor de forma de la máscara (3 para un kernel
% de 3x3, 7 para 7x7, etc.)

% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS

% Se asigna la imagen a una variable, comprobando si se ha


% pasado un nombre o una matriz

if ischar(matori)
try
PRÁCTICA 10: FILTROS PASO ALTO Y PASO BAJO (II) 263

img=imread(matori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=matori;
end

imgfil=img;

% Se comprueba que el número es impar


% if ~rem(elemas,2)
% 'es par'
% else
% 'es impar'
% end

if ~rem(eleker,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end
% Se obtiene el valor de gris mayor que aparece en la imagen
% y se convierte a doble precision
valmax=double(max(max(imgfil)));

% Se define el kernel
kernel=ones(eleker)/(valmax*eleker*eleker);

%Se realiza la convolucion


imgfil=conv2(img,kernel);

filtromediabucle.m
function imgfil=filtromediabucle(matori,eleker)
% imgfil=filtromediabucle(matori, eleker)
% Aplica un filtro de media de una imagen utilizando un kernel
% impar (3x3, 5x5, 7x7, etc.).
% Se le pasa como parámetros:
% 1) matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la imagen
% 2) eleker= el factor de forma de la máscara (3 para un kernel
& de 3x3, 7 para 7x7, etc.)

% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS

% Se asigna la imagen a una variable, comprobando si se ha


% pasado un nombre o una matriz

if ischar(matori)
try
264 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

img=imread(matori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=matori;
end

imgfil=img;

% Se comprueba que el número es impar


% if ~rem(elemas,2)
% 'es par'
% else
% 'es impar'
% end

if ~rem(eleker,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end

[nf, nc]=size(img); % nº de filas y columnas de la imagen

eleker=(eleker-1)/2; % tamaño del lado del kernel.

% Para cada elemento de la imagen


% - Se obtiene su contorno
% - Se comprueba que ese contorno esta dentro de la imagen
% - Se deja en ese valor la media del contorno

for fil=1:nf
for col=1:nc

% Se inicializan los valores para hallar los límites del


% contorno
posfilini=fil-eleker; % 1er elemento de la fila
% superior
posfilfin=fil+eleker; % 1er elemento de la fila
% inferior
poscolizq=col-eleker; % 1er elemento de la columna
% izquierda
poscoldch=col+eleker; % 1er elemento de la columna
% derecha

% Se comprueba y cambia las posiciones para los bordes


if posfilini <1
posfilini=1;
end
if posfilfin>nf
posfilfin=nf;
PRÁCTICA 10: FILTROS PASO ALTO Y PASO BAJO (II) 265

end
if poscolizq <1
poscolizq=1;
end
if poscoldch>nc
poscoldch=nc;
end
contorno=imgfil(posfilini:posfilfin,poscolizq:poscoldch);
imgfil(fil,col)=mean(mean(contorno));

end %columnas
end %filas

mediana.m
function imgfil=mediana(matori,eleker)
% imgfil=mediana(matori, eleker)
% Aplica un filtro de mediana de una imagen utilizando un kernel
% impar (3x3, 5x5, 7x7, etc.).
% Se le pasa como parámetros:
% 1) matori=el nombre de una imagen que ha de estar en el path
% -entre comillas- o es la variable que contiene a la imagen
% 2) eleker= el factor de forma de la máscara (3 para un kernel
% de 3x3, 7 para 7x7, etc.)

% (29-05-2001). KA.

% ====================================
% COMPROBACIÓN Y LECTURA DE DATOS

% Se asigna la imagen a una variable, comprobando si se ha


% pasado un nombre o una matriz

if ischar(matori)
try
img=imread(matori);
catch
errordlg('La imagen no se encuentra en el path.
Introduzca otro nombre de imagen',...
'Error al leer la imagen');
end
else
img=matori;
end
%Se pasa a doble precision
imgfil=double(img);

% Se comprueba que el número es impar


% if ~rem(elemas,2)
% 'es par'
% else
% 'es impar'
% end
266 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

if ~rem(eleker,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end

[nf, nc]=size(img); % nº de filas y columnas de la imagen

eleker=(eleker-1)/2; % tamaño del lado del kernel.

% Para cada elemento de la imagen


% - Se obtiene su contorno
% - Se comprueba que ese contorno esta dentro de la imagen
% - Se deja en ese valor la mediana del contorno

for fil=1:nf
for col=1:nc

% Se inicializan los valores para hallar los límites del


% contorno
posfilini=fil-eleker; % 1er elemento de la fila
% superior
posfilfin=fil+eleker; % 1er elemento de la fila
% inferior
poscolizq=col-eleker; % 1er elemento de la columna
% izquierda
poscoldch=col+eleker; % 1er elemento de la columna
% derecha

% Se comprueba y cambia las posiciones para los bordes


if posfilini <1
posfilini=1;
end
if posfilfin>nf
posfilfin=nf;
end
if poscolizq <1
poscolizq=1;
end
if poscoldch>nc
poscoldch=nc;
end
contorno=imgfil(posfilini:posfilfin,poscolizq:poscoldch);
imgfil(fil,col)=median(median(contorno));

end %columnas
end %filas

% Se convierte en uint8 para poder visualizarla posteriormente


imgfil=uint8(round(imgfil));
PRÁ CTICA 11. SEGMENTACIÓN Y DESCRIPCIÓN (I)
1. OBJETIVOS.
Objetivo general.
La segmentación es una operación (o conjunto de operaciones) que permite dividir los
objetos que se encuentran en una imagen. Se obtiene una imagen etiquetada que permite
diferenciar unos objetos de otros y del fondo. En esta práctica se realizarán cuatro
funciones en Matlab que permitirán obtener una imagen binaria de una célula y
devolverán un conjunto de medidas que describen a este objeto.
Objetivos particulares.
Cuando finalice la práctica el alumno será capaz de:
1. Realizar un estiramiento del histograma.
2. Detectar los bordes de un objeto.
3. Utilizar elementos estructurantes para dilatar una imagen en las direcciones que
sean de interés.
4. Rellenar agujeros interiores.
5. Eliminar objetos conectados con el borde.
6. Suavizar el aspecto de una imagen.
7. Obtener y visualizar el perímetro de un objeto.
8. Obtener el número de regiones que tiene una imagen.
9. Eliminar las regiones menores de un determinado tamaño.
10. Obtener propiedades de una región.

2. DETALLES: FUNCIONES A REALIZAR.


2.1. Función “segmentacion”.
Realizar una función que segmente la imagen cell.tif. Devolverá dos imágenes. Una de
ellas será la imagen binaria suavizada y la otra la imagen original con el perímetro de la
célula resaltado.
268 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

function [binsua, imaconper]=segmentacion


% Segmenta la imagen cell.tif y devuelve dos
parametros:
% - binsua: imagen binaria suavizada
% - imaconper: imagen original con el perimetro
resaltado
% [binsua, imaconper]=segmentacion

Para llegar a este resultado, la función irá realizando las operaciones que se indican a
continuación. Se recomienda el siguiente procedimiento de funcionamiento:
• Crear una nueva función llamada segmentacion.
• Ir leyendo y realizando los pasos que se detallan a continuación. Probar su
funcionamiento y opciones en la línea de comandos. Elegir las opciones que se
consideren más apropiadas para la función segmentacion.
• Copiar o pegar las sentencias elegidas en la función segmentación creada.
• Ir comentando cada paso en la función segmentacion.

2.1.1. Leer y visualizar la imagen ‘cell.tif’.


Lea la imagen cell.tif y almacenela en una variable llamada imaori. La imagen ‘cell.tif’
se encuentra en “…\MatlabR12\toolbox\images\imdemos”.
• Utilice imread para leerla. También puede hacerlo con abreimagen.
• Visualice la imagen en una figura nueva.
• Pongale a la figura anterior el título ‘Imagen original’.

2.1.2. Compruebe que el rango dinámico es el máximo disponible.


El rango dinámico es el número de niveles de gris que utiliza una imagen. Para que sea
el máximo disponible, ha de cubrir todo el rango estático, que es de 0 a 255 o, para
imágenes tipo double, de 0 a 1. Obtenga una nueva imagen, imaest, ajustando su
histograma:
PRÁCTICA 11: SEGMENTACIÓN Y DESCRIPCIÓN (I) 269

Utilice imadjust para ajustar el rango.


• Déjelo con los valores por defecto. Observe el histograma.

• Utilice los valores máximo y mínimo de salida. Calcule, para la imagen


original, sus valores mínimos y máximos de nivel de gris. Conviértalos en
double y páselos al intervalo [0 1]. Utilice estos valores con imadjust.
• Pruebe tres valores distintos de gamma. Uno menor de la unidad (ej.: 0.8), otro
mayor de la unidad (ej.: 1.2) y el último igual a la unidad (1).
• Utilice stretchlim para obtener los valores mínimo y máximo de nivel de gris
de la imagen original. Utilice imadjust con strechlim.

2.1.3. Detección de los bordes de los objetos.


Para obtener los bordes de los objetos de la imagen, puede
utilizarse filtros paso alto. La función edge de Matlab
permite aplicar varios filtros diferentes.
Lea en la ayuda cuál es la sintaxis y opciones de edge.
Utilice el filtro Sobel.
Observe que devuelve una imagen en blanco y negro.
Puede pasársele como parámetro el valor de
umbralización. Para obtener este valor podría observe el
histograma de la imagen. Otra opción es utilizar la función
graythresh.
o Introduzca en una nueva variable, llamada
imabor, la imagen procedente de aplicarle un
sobel a imaest. Visualice el resultado.
o Visualice el resultado de la misma operación
pasandole a edge el valor de umbralización.
Utilice para ello graythresh. Hágalo con tres
valores diferentes de umbral multiplicando en
cada caso el valor que devuelve graythresh por 0.1, 0.2 y 0.11.
o Calcule imabor utilizando en este caso el método de canny. Observe el
resultado que se produce utilizando como umbral 0.2 y 0.3.
o Cree una función, llamada bordes, que devuelva una imagen tras aplicarle un
filtro de edge. Se le pasan como parámetros la imagen original, el tipo de filtro
que se desea aplicar, el valor por el que se multiplica el umbral obtenido con
graythresh, y un cuarto parámetro que indica si se ha de visualizar (vale
cualquier cosa) o no (vale 0). Si la imagen está es RGB la convierte a escala de
grises.
imabor = bordes(imaori, ‘sobel’, 0.11, 1)
270 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

2.1.4. Elementos estructurantes y dilatación.


Como los bordes de la imagen no quedan cerrados, pueden rellenarse con un elemento
estructurante. Puede utilizarse la funcion "strel" para crear elementos estructurantes con
forma de linea, para después dilatar la imagen utilizando esos elementos.
Lea en la ayuda cuál es la sintaxis y opciones de strel.
Como el Sobel es un filtro direccional, se usarán dos elementos estructurantes con
forma de línea, de tres elementos y en direcciones 90 y 0 grados.
o Cree los dos elementos estructurantes indicados en el párrafo anterior.
Llámelos ele90 y ele0.
o Utilizando imdilate y los elementos estructurantes anteriores, dilate la imagen
imabor. Componga ambos elementos estructurales en un array para que la
dilatación se realice con ambos elementos, de forma secuencial ([ele90 ele0]).
o Almacene en la variable bindil el resultado y visualícela.

2.1.5. Relleno de agujeros interiores.


En la imagen dilatada aparecen agujeros interiores. Utilice la función imfill para
rellenarlos. Lea la ayuda de esta función.
o Observe que puede emplearse de forma interactiva. Pruébela.
o Almacene en una variable llamada binrel la nueva imagen procedente de
rellenar los agujeros de la imagen bindil. Utilice para ello la opción ‘holes’.

2.1.6. Eliminación de objetos cortados en el borde.


Pueden eliminarse los objetos que están cortados en los bordes de la imagen. Lea la
ayuda de la función imclearborder.
o Obtenga una nueva imagen sin el objeto del borde y almacénela en binnobor.
Utilice para ello imclearborder con conectividad 4.

2.1.7. Suavizado de aristas.


Para que el objeto tenga un aspecto más natural se puede suavizar el objeto. Una
posibilidad sería aplicándole un filtro paso bajo. Otra, consiste en erosionar el objeto.
o Obtenga una nueva imagen tras erosionar el objeto y almacénela en binsua.
Utilice un elemento estructurante con forma de diamante y erosione la imagen
dos veces. Visualice la imagen suavizada.

2.1.8. Visualización del perímetro.


Utilice bwperim para obtener el perímetro del objeto.
PRÁCTICA 11: SEGMENTACIÓN Y DESCRIPCIÓN (I) 271

o Almacene la imagen obtenida con bwperim en la variable imaper. Multiplique


imaper por 255 y añadale el resultado a imaori. Almacene este resultado en
imaconper y visualícelo.

2.2. Función “numpixreg”.


Dada una imagen binaria, muestra en la línea de comando el número de regiones que
tiene y el número de píxeles que tiene cada región.

>> numpixreg(imabin)

NumeroRegiones =

El numero de regiones es 5

NumeroPixeles =

El numero de pixeles de la region 1 es 1


El numero de pixeles de la region 2 es 3440
El numero de pixeles de la region 3 es 1
El numero de pixeles de la region 4 es 1
El numero de pixeles de la region 5 es 1

Funciones útiles:
bwlabel, regionprops, sprintf, size, for

2.3. Función “prop”


Muestra en la ventana de comandos las propiedades de las regiones mayores de un
número de píxeles dado (pixmin). Se detalla a continuación los parámetros de entrada y
salida:
% Dados los siguientes argumentos:
% imabin: imagen binaria (con, probablemente, varias
% regiones)
% pixmin: Se conservan las regiones que tengan como minimo
% pixmin pixeles.
% con: conectividad (para eliminar regiones y crear una
% imagen etiquetada. Los valores tipicos son 4 y 8.
% descri: propiedades que se desea obtener. Un string que
% puede contener uno de los posibles parametros de
272 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

% "regionprops": 'basic', 'all', o cualquier


% propiedad ('Area', etc.)
% Devuelve:
% imareg: la imagen binaria conteniendo solo regiones
% con mas de pixmin pixeles.
% numreg: numero de regiones de esta imagen.
% S: propiedades de las regiones (= q regionprops).

Resultado de la ejecución de la función:

>> [imareg,numreg,S]=prop(imabin,2,4,'all');

S =

Area: 3440
Centroid: [99.4735 52.7727]
BoundingBox: [54.5000 10.5000 91 83]
SubarrayIdx: {[1x83 double] [1x91 double]}
MajorAxisLength: 107.9658
MinorAxisLength: 41.5796
Eccentricity: 0.9229
Orientation: 41.6770
ConvexHull: [29x2 double]
ConvexImage: [83x91 uint8]
ConvexArea: 3880
Image: [83x91 uint8]
FilledImage: [83x91 uint8]
FilledArea: 3440
EulerNumber: 1
Extrema: [8x2 double]
EquivDiameter: 66.1811
Solidity: 0.8866
Extent: 0.4554
PixelIdxList: [3440x1 double]
PixelList: [3440x2 double]

Para realizarla puede tener en cuenta las siguientes consideraciones:

2.3.1. Reducir el ruido de una imagen.


Es posible que queden algunos píxeles dispersos en blanco que no pertenecen a la
célula. Para eliminarlos puede utilizarse un filtro paso bajo.
Lea la ayuda proporcionada para medfilt2 y utilice esta función.
Observe la utilidad de filter2 e indique cómo podría utilizarse.
Utilice bwareaopen con la misma finalidad

2.3.2. Propiedades de una región.


Lea la ayuda proporcionada para regionprops y observe su utilización.
Tenga en cuenta la posibilidad de utilizar bwlabel.
PRÁCTICA 11: SEGMENTACIÓN Y DESCRIPCIÓN (I) 273

2.3.3. Colorear una imagen


Puede obtenerse imágenes binarias donde cada
uno de los objetos tenga un color diferente.
Considere la posibilidad de utilizar label2rgb
PRÁ CTICA 12. SEGMENTACIÓN Y DESCRIPCIÓN (II)
1. OBJETIVOS.
El objetivo de esta sesión consiste en:
Estudiar los m-files a continuación presentados.
Enterder cómo funcionan (comprende el algoritmo general y buscar en la ayuda el
funcionamiento de las primitivas que no se conozcan).
Comprobar su funcionamiento utilizando diferentes imágenes.
Modificar las funciones –si se quiere- y plantear alternativas.

2. DETALLES: FUNCIONES A REALIZAR.


2.1. Función segmentacion.
function [binsua, imaconper]=segmentacion
% [binsua, imaconper]=segmentacion
% Segmenta la imagen cell.tif y devuelve dos parametros:
% - binsua: imagen binaria suavizada
% - imaconper: imagen original con el perimetro resaltado

% KK-3-03

% (1) Lee la imagen original y la muestra en una figura

imaori=imread('cell.tif');
figure, imshow(imaori), title('Imagen original');

%_______________________________________________________________

% (2) Alargamiento del histograma


% Mediante la funcion "imadjust" se estira el histograma de la
% imagen para incrementar al maximo el contraste

% Se comprueba que el rango dinamico no es el maximo


276 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

if or(max(max(imaori))< 255,min(min(imaori))>0)
% Si la imagen no ocupa todo el rango estatico ...,
% se estira el histograma
figure, imhist(imaori);
imaest=imadjust(imaori,stretchlim(imaori),[]);
figure, imshow(imaest), title('Imagen con estiramiento del
histograma');
figure, imhist(imaest)
else
% Si no hace falta estirar
figure, imshow(imaori), title('Imagen sin necesidad de
estiramiento');

end

%_______________________________________________________________

% (3) Detectando bordes en la imagen


% Utilizando un filtrado paso alto, se detectan los bordes.
% Mediante la funcion "edge", se aplica un filtro Sobel

% Si la imagen esta en color real, se pasa a escala de grises

imabor=bordes(imaest,'sobel',0.1,1);

%_______________________________________________________________

% (4) Rellenando lineas


% Como los bordes de la imagen no quedan cerrados,
% pueden rellenarse con un elemento estructurante.
% Puede utilizarse la funcion "strel" para crear
% elementos estructurantes con forma de linea,
% para despues dilatar la imagen utilizando esos elementos.

ele90=strel('line',3,90);
ele0=strel('line',3,0);

% Dilatacion

bindil=imdilate(imabor, [ele90 ele0]);


figure, imshow(bindil), title('Imagen dilatada');
%_______________________________________________________________
% (5) Relleno de agujeros interiores
% Se rellenan los agujeros utilizando "imfill".

binrel=IMFILL(bindil, 'holes');
figure, imshow(binrel), title('Huecos rellenos');

%_______________________________________________________________

% (6) Eliminacion de ruido en el borde


% Utilizando la funcion "imclearborder" se eliminan los pixeles
% conectados, eligiendo 4 como valor de conectividad
PRÁCTICA 12: SEGMENTACIÓN Y DESCRIPCIÓN (II) 277

binnobor=imclearborder(binrel, 4);
figure, imshow(binrel), title('Bordes limpios');

%_______________________________________________________________

% (7) Suavizar el objeto


% Para que tenga un aspecto mas natural,
% se suaviza el objeto erosionandolo dos veces,
% utilizando un elemento estructural con forma de diamante.

eleD=strel('diamond',1);
binsua=imerode(binnobor,eleD);
binsua=imerode(binsua,eleD);
figure, imshow(binsua), title('Imagen suavizada segmentada');

% (8) Visualizar el perimetro

imaper=bwperim(binsua);
imaconper=imadd(imaori,immultiply(imaper,255));
figure, imshow(imaconper), title('Imagen original con perimetro
marcado');

2.2. Función bordes.


function imabor=bordes(imaori,tipofil, coefic, v)
% imabor=bordes(imaori,tipofil, coefic)
% imaori: imagen original
% tipofil: uno de los tipos de filtro que soporta "edge"
% coefic: el coeficiente por el que se multiplica el umbral
% v: si vale 0 no se visualiza la imagen obtenida.
% en otro caso se visualiza en una nueva figura.

% KK-3-03

% Si la imagen esta en color real, se pasa a escala de grises


if isrgb(imaori),
imaori=rgb2gray(imaori);
imabor=edge(imaori,tipofil, (graythresh(imaori) * coefic));
else
imabor=edge(imaori,tipofil, (graythresh(imaori) * coefic));
end

if v
titulo=['Bordes con ' tipofil ' y ' num2str(coefic)];
figure,imshow(imabor), title(titulo);
end

2.3. Función numpixreg.

function numpixreg(imabin)
% numpixreg(imabin)
% Dada una imagen binaria, muestra en la linea de comandos
% el numero de pixeles de cada region

% KK-3-03
278 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁ CTICAS CON MATLAB

% Numero de regiones en la imagen


[L, num]=bwlabel(imabin,4);
% Tamaño (area = numero de pixeles) de cada region
S = regionprops(L, 'Area');
% El numero de regiones son
NumeroRegiones=sprintf('El numero de regiones es %d',num);
% Para ver el numero de pixeles de cada region:
[f,c]=size(S);
for i=1:f
NumeroPixeles(i,:)=sprintf('El numero de pixeles de la
region %d es %10.0f',i,S(i).Area);
end
NumeroRegiones
NumeroPixeles

2.4. Función prop.


function [imareg,numreg,S]=prop(imabin,pixmin,con,descri)
% [imareg,numreg,S]=prop(imabin,pixmin,con,descri)
% Dados los siguientes argumentos:
% imabin: imagen binaria (con, probablemente, varias
% regiones)
% pixmin: Se conservan las regiones que tengan como minimo
% pixmin pixeles.
% con: conectividad (para eliminar regiones y crear una
% imagen etiquetada. Los valores tipicos son 4 y
% 8.
% descri: propiedades que se desea obtener. Un string que
% puede contener uno de los posibles parametros de
% "regionprops": 'basic', 'all', o cualquier
% propiedad ('Area', etc.)
% Devuelve:
% imareg: la imagen binaria conteniendo solo regiones con
% mas de pixmin pixeles.
% numreg: numero de regiones de esta imagen.
% S: propiedades de las regiones (= q regionprops).

% KK-3-03

% Se eliminan los objetos con menos de "pixmin" pixeles


imareg = bwareaopen(imabin,pixmin,con);

% Se obtiene el numero de regiones de la imagen


[L, numreg]=bwlabel(imareg,con);

% Propiedades de las regiones de la imagen


S = regionprops(L, descri)

% Imagen coloreada
imacol=label2rgb(L,jet,'c', 'shuffle');
imshow(imacol), title('Imagen coloreada');
BIBLIOGRAFÍA
1. BIBLIOGRAFÍA BÁSICA.
R. C. González y R. E. Woods. Tratamiento Digital de Imágenes. Addison-Wesley
/Diaz de Santos, 1996.
Libro fundamental. En él se encuentran explicados
muchos de los conceptos básicos y también de los
relacionados con el procesamiento automático de
imágenes. Contiene una buena descripción de los
modelos de color (más amplia que la realizada en
la asignatura), apartados relacionados con la
digitalización y los sistemas básicos de captación,
temas relacionados con algunas de las operaciones
sobre imágenes incluidas en el programa y la
práctica totalidad de los aspectos que se explican
relacionados con el procesamiento automático de
imágenes. En el año 2001 apareció una edición
mejorada y ampliada, pero la traducción al
castellano no está aún disponible.

A. de la Escalera. Visión por Computador. Fundamentos y métodos. Prentice Hall,


2001.
Aunque orientado a la visión por computador este
libro recorre y explica de forma clara y completa
las distintas etapas fundamentales del
procesamiento de imágenes. Con bastantes fotos y
ejemplos y algunos apartados muy bien
explicados.

C. Pajares, J. M. de la Cruz. Visión por Computador. Ra-Ma, 2001.


Muy completo. De sus más de 700 páginas dedica
más de la mitad a operaciones clásicas de
procesamiento digital de imágenes, como las
estudiadas en el curso. Desde nuestro punto de
vista, destaca por la exhaustiva recopilación de
técnicas y algoritmos. También es encomiable la
labor de los autores al presentar un apartado, al
final de cada capítulo, con numerosas y
actualizadas referencias bibliográficas. Resulta
también interesante para aproximarse a la visión
por computador.
282 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

J. González. Visión por Computador. Paraninfo, 2000.


Al igual que el libro de Pajares y de la Cruz,
dedica la mitad de sus páginas a conceptos básicos
de procesamiento digital de imágenes. No tan
extenso como el anterior pero con capítulos muy
claros y bien elaborados. Puede servir para ampliar
o mejorar conceptos vistos en la asignatura.
También sirve para estudiar temas relacionados
con la visión.

C. Wayne and B. J. Shepherd. Graphics File Formats: Reference and Guide. Manning
Publications Co., 1995
Excelente libro que contiene una buena
descripción de la mayoría de formatos gráficos
utilizados en la actualidad. Además de la
referencia de los formatos donde se explica el
número de bytes dedicados a los datos, la cabecera
y el resto de información almacenada con cada
formato, contiene una clara revisión de las técnicas
de compresión y de los algoritmos principales
utilizados por estas técnicas. Se puede utilizar para
seguir y ampliar el capítulo de “Compresión” y
como base para realizar trabajos.

S. Harrington. Computer Graphics. A programming Approach. McGraw-Hill


International Editions. 1988.
Texto que permite cubrir y ampliar los temas que
se imparten relacionados con gráficos. Incluye
explicaciones sobre las primitivas gráficas en 2 y 3
dimensiones, transformaciones, superficies
ocultas, líneas, etc., acompañadas de un gran
número de algoritmos, muchos de ellos
programados en C.
BIBLIOGRAFÍA 283

2. BIBLIOGRAFÍA COMPLEMENTARIA.
A. Domingo. Tratamiento Digital de Imágenes. Ediciones Anaya Multimedia, S. A.,
1993.
Libro sencillo que realiza una introducción al
tratamiento digital de imágenes. Puede servir para
seguir de forma correcta la Unidad Temática II:
Preprocesamiento. Proporciona además algoritmos
y código C que pueden ser utilizados por el
alumno para afianzar conceptos o realizar algunas
prácticas.

J. R. Parker. Algorithms for Image Processing and Computer Vision. John Wiley &
Sons, 1996
Una buena fuente para extraer material para los
trabajos y para estudiar con detalle algunos temas
actuales relacionados con el Procesamiento de
Imágenes. Tiene una orientación práctica
incorporando el código de los algoritmos en C++.
Trata temas de texturas, restauración, wavelets,
reconocimiento de símbolos y caracteres, etc.

G. X. Ritter and J. N. Wilson. Handbook of Computer Vision Algorithms in Image


Algebra. Lewis Publishers, Inc., Second Edition, 2000.
En la misma línea que el texto de Parker,
proporciona descripciones claras de aspectos
concretos del procesamiento de imágenes. Se
centra básicamente en las operaciones y
transformaciones utilizadas en la visión artificial
abordando técnicas de realce de imágenes,
umbralización y detección de bordes, para
centrarse en el aspecto morfológico de la imagen
(adelgazamiento y skeletonización,
transformaciones morfológicas, reconocimiento de
patrones y detección de formas). Los autores
proporcionan también una librería en C++ para
trabajar con imágenes a la que llaman “The Image
Algebra C++ Library”.
284 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB

J.C. Russ. The Image Processing Handbook. Fourth Edition. CRC, 2002
Completo manual que sirve como libro de consulta
y también como fuente para trabajos. Presenta un
capítulo dedicado íntegramente al procesamiento
de imágenes binarias y dos a la realización de
medidas en las imágenes, el primero de ellos
medidas globales y el segundo medidas de
características específicas.

W. K. Pratt. Digital Image Processing. John Wiley & Sons Inc. 2001.
Un clásico. Amplio en sus contenidos y serio en su
tratamiento. Destaca por la fundamentación
matemática que presenta para los conceptos
explicados. Es interesante tenerlo presente y
consultarlo durante el estudio. En esta tercera
edición se explica la arquitectura PIKS y se
presentan diversos ejercicios resueltos con este
software de procesamiento de imágenes.

K. R. Castleman. Digital Image Processing. Prentice Hall, 1995.


Una referencia completa sobre la mayoría de los
conceptos básicos y relacionados con el
procesamiento de imágenes vistos en la asignatura.
Se pueden encontrar capítulos sobre la
digitalización y visualización, las operaciones de
punto, algebraicas y geométricas, relacionados con
la transformada de Fourier y el diseño de filtros y
con el reconocimiento de patrones y el tratamiento
de imágenes en 3D. Incorpora también un glosario
de términos y varios apéndices con aspectos
matemáticos.

F. Torres, J. Pomares, P. Gil, S. T. Puente y R. Aracil. Robots y Sistemas Sensoriales.


Prentice Hall, 2002.
Libro dedicado a la robótica que presenta una
buena descripción de los sistemas sensoriales entre
los que incluye los sensores ópticos. Dedica unas
100 páginas a la visión artificial y a la visión
estéreo, explicando a lo largo de ellas, de forma
clara y concisa los principales conceptos
relacionados con preprocesamiento, detección,
segmentación y descripción. Útil para ampliar
conceptos presentados en el curso así como
material para la realización de trabajos.
BIBLIOGRAFÍA 285

3. BIBLIOGRAFÍA AUXILIAR.
P.S. Heckbert. Graphics Gems. AP. Professinal, 1994.
R. Brinkman. The Art and Science of Digital Compositing. Morgan Kaufmann
Publishers, 1999.
D. Kelly. Digital Compositing in Depth. Butterworth Heinemann, 2001.
D. Ablan. Inside Lightwave 7. New Riders, 2002.
J. Birn, Técnicas de iluminación y render. Anaya, 2001.
M. Petrou and P. Bosgogianni. Image processing: the fundamentals. Addison Wesley /
Diaz de Santos. 1999.
R. Crane. A Simplified Approach to Image Processing: Classical and Modern
Techniques in C (Hewlett-Packard Professional Books). Prentice Hall, 1996.
R. Jain, R. Kasturi, B. G. Schunck. Machine Vision. McGraw-Hill, Inc., New York,
1995.
C. H. Chen, L. F. Pau, P. S. P. Wang (eds.). Handbook of Pattern Recognition &
Computer Vision. World Scientific, Singapore, 1993.
D. Maravall. Reconocimiento de Formas y Visión Artificial. Ed. RA-MA, 1993.
M. Sonka, V. Hlavac y R. Boyle. Image Processing, Analysis and Machine Vision.
Chapman & Hall Computing, London, 1993 (2ª Edición)
D. Vernon. Machine Vision. Automated Visual Inspection and Robot Vision. Prentice
Hall, New York, 1991.
E. R. Davies. Machine Vision: Theory, Algorithms, Practicalities. Academic Press,
London, 1990.
A. Rosenfeld and A. C. Kak. Digital Picture Processing. Academic Press, Inc. 1982
R. O. Duda, P. E. Hart. Pattern Classification and Scene Analysis. John Wiley & Sons,
New York, 1973.
L. F. Escudero. Reconocimiento de Patrones. Ed. Paraninfo, Madrid, 1977.
R. C. Gonzalez, M. G. Thomason. Syntactic Pattern Recognition. An Introduction.
Addison-Wesley Pub. Co., Reading, Mass., 1978.
Nevatia, R. Machine Perception. Prentice-Hall, Englewood Cliffs, N. J., 1982.
T. Pavlidis. Structural Pattern Recognition. Springer Verlag, Berlin, 1977.
T. Pavlidis. Algorithms for Graphics and Image Processing. Springer Verlag, Berlin,
1982. o bien en Computer Science Press, Rockville, Md., 1982
A. Rosenfeld, A. C. Kak. Digital Picture Processing. (2ª edición, 2 vols.), Academic
Press, New York, 1982.

View publication stats

Potrebbero piacerti anche