Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
net/publication/229828279
CITATION READS
1 2,081
4 authors, including:
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
All content following this page was uploaded by Enrique Alegre on 28 May 2014.
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
© UNIVERSIDAD DE LEÓN
Secretariado de Publicaciones y Medios Audiovisuales
Los Autores
ISBN: 84-9773-052-6
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
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
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.
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.
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:
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
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
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
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
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.
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
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.
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.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.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.
Valores de entrada
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:
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.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.
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
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.
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
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.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.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)
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.
Vp Vp
t t
T T
v v
Vp Vp
t t
T T
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.
c.c.
ONDA PERIÓDICA
f1 = 500 Hz
f2 = 1000 Hz
2 ms
f3 = 1500 Hz
fn = n(500 Hz)
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.
∞
F-1{F(ω)} = f(x) = ∫ F (ω ) ∗ e j2πωx dω es la transformada inversa
−∞
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
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).
• 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.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.
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:
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
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.
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
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
Ecualización
Ampliación del
contraste
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.
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
- = + 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:
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
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
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.
EJEMPLOS:
Dilatación
Erosión
OPERACIONES MORFOLÓGICAS 93
Cerramiento Apertura
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.
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
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
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.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
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
∂f
Gx ∂z
∇f = =
∂f
Gy
∂y
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)
∂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
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 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
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.
Umbral
Brillo
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
;
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 .
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.
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
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.
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
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.
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.
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
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
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.
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
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
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.
patrón
Imagen Extracción de
Preprocesamiento Segmentación Clasificador
digital características
CLASE
FASE DE FUNCIONAMIENTO
FASE DE DISEÑO
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.
Iris setosa
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
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
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
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
Frontera de decisión
X2
µ2
A X1
µ1
∑ (t k * q k )
σ ( D, Q ) = k
∑ (t k ) 2 * ∑ (q k ) 2
k k
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
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
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.
patrón
Imagen Reconocimiento Análisis
Preprocesamiento Segmentación
digital de primitivas sintáctico
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.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
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.
(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
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
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).
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
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)
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.
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
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.
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
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
230
190 20
255
170
120
60
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
clara oscura
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
Para obtener:
L11 L12 L13 L14
L21 L22 L23 L24
L31 L32 L33 L34
L41 L42 L43 L44
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
180 PROCESAMIENTO DIGITAL DE IMAGEN: FUNDAMENTOS Y PRÁCTICAS CON MATLAB
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
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∞.
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
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
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
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
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
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
=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
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
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
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.
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
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
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
A) R1 B) R2
C) R3 D) O1
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
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.
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
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.
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 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
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.
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
Linear filtering.
convmtx2 - Compute 2-D convolution matrix.
fspecial - Create predefined filters.
imfilter - Filter 2-D and N-D images.
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
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).
Array operations.
circshift - Shift array circularly.
padarray - Pad array.
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
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.
('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
('E:\OProgram\Matlab12\toolbox\images\imdemos\*.tif;*.jpg;*.bmp'
,...
'Selecciona una imagen');
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.
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.
for i=1:256,
indices=find(A==(i-1));
numele=size(indices);
nvec(i)=numele(1);
end % for
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
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.
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”
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
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
('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
% --------------------------------------------------------------
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
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.
% --------------------------------------------------------------
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.
% 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.
function hgsalir()
% hgsalir();
% Cuadro diálogo avisa guardar antes de salir o cierra la
% aplicación
% (12-04-2001). KA.
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.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.
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.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
imgero=img;
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:
if kercoldch>ncimg
kercoldch=ncimg;
end
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
imgdil=img;
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:
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
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
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
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;
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);
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
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;
if ~rem(eleker,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end
for fil=1:nf
for col=1:nc
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
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);
if ~rem(eleker,2)
errordlg('El tamaño del kernel NO es un número impar',
'Error de tamaño de kernel');
return
end
for fil=1:nf
for col=1:nc
end %columnas
end %filas
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.
>> numpixreg(imabin)
NumeroRegiones =
El numero de regiones es 5
NumeroPixeles =
Funciones útiles:
bwlabel, regionprops, sprintf, size, for
>> [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]
% KK-3-03
imaori=imread('cell.tif');
figure, imshow(imaori), title('Imagen original');
%_______________________________________________________________
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
%_______________________________________________________________
imabor=bordes(imaest,'sobel',0.1,1);
%_______________________________________________________________
ele90=strel('line',3,90);
ele0=strel('line',3,0);
% Dilatacion
binrel=IMFILL(bindil, 'holes');
figure, imshow(binrel), title('Huecos rellenos');
%_______________________________________________________________
binnobor=imclearborder(binrel, 4);
figure, imshow(binrel), title('Bordes limpios');
%_______________________________________________________________
eleD=strel('diamond',1);
binsua=imerode(binnobor,eleD);
binsua=imerode(binsua,eleD);
figure, imshow(binsua), title('Imagen suavizada segmentada');
imaper=bwperim(binsua);
imaconper=imadd(imaori,immultiply(imaper,255));
figure, imshow(imaconper), title('Imagen original con perimetro
marcado');
% KK-3-03
if v
titulo=['Bordes con ' tipofil ' y ' num2str(coefic)];
figure,imshow(imabor), title(titulo);
end
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
% KK-3-03
% 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.
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.
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.
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.
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.