Práctica 7 - Unican.es

Anuncio
PRÁCTICA - VII
INTRODUCCIÓN AL PROCESADO DIGITAL DE IMÁGENES
NOTA: Lo primero que debe hacerse al llegar al laboratorio es conectar el PC, si no está ya conectado,
para que se inicie el WINDOWS 98. Si aparece una ventana de login hacer clic en el botón Cancelar.
1- OBJETIVO Y FUNDAMENTO TEÓRICO
Podemos decir de manera sencilla que digitalizar una imagen consiste en reducir a
números la información bidimensional que contiene. Por una parte, se discretizan las
posiciones o coordenadas bidimensionales, de manera que aunque la función imagen venga
inicialmente descrita como una función de punto continua, su registro y manipulación se
realizan de forma discreta (matricial), como una función que toma valores en un conjunto
finito de puntos llamados píxeles. Por otra parte, la digitalización implica la expresión
numérica de la información contenida en cada punto, digitalización propiamente dicha. Para
una imagen en blanco y negro esto supone que la intensidad de cada píxel se expresa con un
número. Frecuentemente, este número se registra con 8 bits, lo que permite 28 = 256 niveles
de gris (más de los que es capaz de distinguir el ojo humano).
La digitalización permite, por ejemplo, el envío de imágenes mediante un código
binario, la alteración artificial del brillo o el contraste, y otras manipulaciones como
transformadas, filtrado, etc., para conseguir fines muy variados como la mejora de la calidad
de imagen, el reconocimiento de objetos, la cuenta de objetos, la identificación automatizada
de formas, etc.
En esta práctica vamos a captar imágenes mediante una cámara CCD que nos
permitirá almacenar la imagen en el ordenador como un fichero de datos en un formato
especial. Utilizaremos un programa de tratamiento de imágenes para leer el fichero y operar
sobre la imagen digitalizada.
• El primer objetivo de la práctica es familiarizarse con algunas de las operaciones
básicas, lo que haremos en el apartado 3 de puesta a punto del sistema, de modo que podamos
utilizarlas en el apartado siguiente.
• El segundo objetivo es utilizar el procesado digital para las siguientes funciones, que
se irán desarrollando en el apartado 4:
A) Comprobar la homogeneidad de una fuente extensa aparentemente uniforme. Se trata de
una pantalla difusora iluminada por detrás mediante tubos fluorescentes. A simple vista la
iluminación parece homogénea. Sin embargo, si i) se identifica un mínimo en esa imagen y
se resta a toda ella como valor constante y ii) se identifica posteriormente un máximo
multiplicándose toda la imagen por un valor que lleva ese máximo hasta el “fondo de escala”
de grises, habremos conseguido una nueva imagen en la que se han resaltado las pequeñas
variaciones de iluminación que pudiera haber.
B) Contar elementos iguales dentro e la imagen (un conjunto de discos opacos sobre un fondo
luminoso más o menos uniforme). Al colocar un objeto opaco sobre la pantalla la imagen de
ésta aparecerá oscura donde se encuentre la imagen del objeto. En consecuencia, la suma de
intensidades sobre la pantalla disminuirá. Restando los valores totales para ambas situaciones
obtenemos un valor numérico para la sombra de un objeto. Al colocar varios de estos objetos,
y repetir la resta, ésta será un múltiplo aproximado del valor correspondiente a un objeto.
Dicho entero es el número de objetos.
C) Detectar un movimiento y medir su magnitud. Si se toma una imagen de un grupo de
objetos colocados al azar, y se compara con la imagen resultante de haber movido alguno de
ellos, podemos conocer cuál de estos objetos se ha movido y la magnitud relativa de este
movimiento.
2-MATERIAL
• Cámara CCD + Objetivo fotográfico.
• PC de control.
• Monitor Auxiliar.
• Brazo de ampliadora.
• Fuente extensa (fluorescente+difusor).
• Objetos auxiliares
(discos, monedas, clips, etc).
Fig. 1 Esquema del montaje
de toma de imágenes sobre
una superficie luminosa.
3- PUESTA A PUNTO DE LA INSTALACIÓN
En esta sección debemos conseguir en primer lugar que funcione el sistema de captura
de imágenes y en segundo lugar conocer algunas de las funciones de manipulación de imagen
que nos pueden resultar necesarias después.
Antes de nada debemos comprobar que los elementos están conectados, incluida la
cámara. Debemos encender la lámpara fluorescente.
Podemos extender la imagen al monitor auxiliar (en propiedades/configuración) si no
lo está. Se recomienda guardar las imágenes más interesantes generadas en este apartado.
CÓMO TOMAR UNA IMAGEN Y GUARDARLA EN UN FICHERO:
1) Iniciamos el programa de captura y análisis de imágenes ImageJ haciendo clic en el
icono del escritorio.
2) Para ver la imagen de la cámara en tiempo real: En el menú Plugins tomamos la
opción Input/Output y selecionamos Twain6. Entonces aparece un cuadro de
dispositivos de origen y se selecciona la cámara uEye. Al hacerlo aparecerá un menú
de la cámara y una imagen en tiempo real, que se oculta y se muestra con los botones
Hide(/Show) Preview.
3) Para ajustar el enfoque: Situamos un objeto auxiliar en la base de la ampliadora.
Actuamos en el enfoque del objetivo de la cámara hasta ver una imagen nítida en la
pantalla del ordenador.
4) Para obtener una imagen fija hacemos Still image (para volver a tiempo real el mismo
boton indicará Live.
5) Para archivar una imagen primero pulsaremos Scan y después la guardaremos (Save
as) en formato tiff con el nombre escogido, por ejemplo “imagen_0” y sucesivas (se
puede crear una carpeta en el escritorio con el nombre del grupo de prácticas y guardar
ahí las imágenes). La imagen se guarda por defecto en un formato de color (RGB).
CÓMO OBTENER EL HISTOGRAMA DE UNA IMAGEN:
El histograma de una imagen es un gráfico de barras donde los 256 niveles de gris se
distribuyen en intervalos iguales (barras) indicando cuántos píxeles hay en la imagen con el
nivel de gris dentro de cada intervalo.
1) Para abrir el fichero de una imagen: ir al menú File/Open… (también se puede
arrastrar el fichero sobre la barra superior de la ventana de ImageJ).
2) En el menú Image hacemos Type>8-bit para convertir la imagen del formato de color
(RGB color) al formato de niveles de gris (monocromo 8-bit). Los niveles de gris van
de 0 (negro) a 255 (blanco).
3) Para obtener el histograma: Estando activa la ventana de la imagen, ir a
Analyze/Histogram (o pulsar ctrl-H).
4) En la ventana del histograma aparece en número de píxeles de la imagen (Count), los
valores máximo, mínimo, medio y modal de la intensidad (Max, Min, Mean y Mode).
COMPARACIÓN DE DOS IMÁGENES:
Vamos a comparar ahora los histogramas correspondientes a dos imágenes de la misma
escena una enfocada y otra desenfocada.
1) Tomar la imagen enfocada de un objeto auxiliar y guardarla, por ejemplo como
“imagen_0” (Para ello ajustar el enfoque en tiempo real, luego detener, capturar y
guardar la imagen según lo explicado).
2) Tomar la imagen desenfocada del objeto auxiliar y guardarla en “imagen_1” (Es decir,
volver a tiempo real, desenfocar la imagen girando el objetivo y observando sobre la
pantalla la pérdida de nitidez en los contornos; Después capturar la imagen).
3) Convertir los dos ficheros a 8-bit (File/Open…; Type>8-bit).
4) Obtener los dos histogramas.
Si el objeto auxiliar era de alto contraste (sólo tonos blancos y negros), en el primer
histograma las barras se concentran en los niveles correspondientes al cero (negro) y a cierto
valor máximo para nuestra imagen (blanco). En el segundo histograma veremos niveles
intermedios de gris, ya que el desenfoque ha hecho aparecer niveles de gris en puntos que
antes eran totalmente claros o bien totalmente oscuros. Si el objeto inicial presentaba otra
distribución de tonos, puedes observar otras variaciones en el histograma, explicables siempre
como efectos del desenfoque.
Vamos a hacer una operación de resta entre las imágenes que hemos adquirido:
5) Hacemos: Process/Image Calculator… En la ventana que se abre rellenaremos lo
siguiente, image1: imagen_0, operation: subtract, image2: imagen_1, y marcaremos la
casilla Create New Window. Hacer clic en OK y el resultado aparecerá en una ventana
nueva. (También podemos hacer la resta al revés: la desenfocada – la enfocada, que
resultará ligeramente diferente).
Al ser ambas imágenes muy parecidas, el resultado es una imagen con bajas intensidades. Los
valores más importantes aparecerán donde las diferencias entre las imágenes eran mayores.
En este caso será en los contornos, nítidos en imagen_0 y borrosos en imagen_1.
(Lógicamente aparecen valores negativos, a los que automáticamente el sistema asigna el
valor 0. Según sea el orden de la resta, estos valores quedarán en distintos lugares).
Podemos probar a sumar las dos imágenes resta, y obtendremos una imagen con sus máximos
de intensidad en los contornos.
REALZADO DEL CONTRASTE:
Vamos a realzar el contraste de la imagen desenfocada “imagen_1”. Esto lo podemos
conseguir haciendo que los niveles de gris de la imagen, que se encuentran en el intervalo
[Min, Max], pasen a ocupar todo el intervalo posible [0, 255].
1) Primero observamos los valores de intensidad de la imagen en la ventana del
Histograma: Count, Min, Max, Mean.
2) Count es el número de píxeles de la imagen y Mean el valor medio de la intensidad.
Por tanto Count*Mean es la intensidad total en la imagen. Anotamos este valor Si.
3) Anotamos también el valor Min de intensidad mínima encontrada. Queremos que los
niveles de gris que contiene nuestra imagen, que se encuentran en el intervalo [Min,
Max], pasen a encontrarse en el intervalo [0, 255]. Eso lo conseguimos en dos pasos.
4) El primer paso es restar el valor Min a toda la imagen. Hacemos
Process/Math/Subtract…, y en la casilla Value ponemos el valor de Min. (Si Min=0 no
necesitamos este paso). La resta se va a notar en el histograma, ya que lógicamente
arrancará de cero. Ejecutamos de nuevo Analyze/Measure (o Ctrl+M) para comprobar
que Min=0 y ver el nuevo valor de Max.
5) Ahora damos el segundo paso para reescalar el intervalo. Hacemos el cociente (256 /
Max), llamémosle C. (Si por ejemplo Max era 70, C=256/70=3.65). Ahora
multiplicamos toda la imagen por ese valor: Process/Math/Multiply…, y en la casilla
Value ponemos el valor de C. El resultado es la misma imagen pero con mayor
contraste.
6) Para conocer la nueva intensidad total, volvemos a hacer Analyze/Measure (o
Ctrl+M). Si la resta de Min en el paso 4 fue pequeña, el valor de Mean es el inicial
multiplicado por C.
4- MÉTODO OPERATIVO
A. Homogeneidad de una fuente extensa:
A1. Comprobar que la cámara está enfocada sobre la fuente luminosa (colocando un
objeto auxiliar que luego retiramos) y tomar una imagen y guardarla en un fichero (por
ejemplo, “fondo_0”).
A2. Abrir con ImageJ la imagen y convertirla a 8-bit (File/Open…; Type>8-bit).
A3. Obtener el histograma de la imagen, que tendrá un pico muy pronunciado en una
cierta intensidad. Analyze/Histogram (o pulsar ctrl-H).
A4. Realzar el contraste de la imagen siguiendo el procedimiento del apartado anterior.
A5. Vemos el aspecto final y comprobamos si se aprecia alguna forma en la distribución
de luz de la fuente, resultado que contrastaremos con el profesor de prácticas.
B. Cuenta de objetos:
B1.- Se parte de una imagen enfocada de la pantalla luminosa, que guardamos en un
fichero (por ejemplo “fondo”). Abrir con ImageJ la imagen y convertirla a 8-bit
(File/Open…; Type>8-bit).
B2.- Anotamos la suma de intensidades asociada a esta imagen I0: Analyze/Measure (o
Ctrl+M). De la ventana Results, Count*Mean es la intensidad total en la imagen. (Para las
operaciones posteriores bastaría el valor de Mean porque Count es igual en todas las
imágenes).
B3.- Colocamos un pequeño disco opaco (moneda) sobre la pantalla, y tomamos una
nueva imagen, que guardamos en “disco_1”. Operamos igual que con la imagen anterior
(no olvidar convertir a 8-bit) y anotamos la suma de intensidades asociada a esta imagen,
I1.
B4.- Colocamos un número arbitrario de discos N y capturamos una nueva imagen, que
guardamos en “disco_N”. Operamos igual que con las imágenes anteriores y anotamos la
suma de intensidades asociada a esta imagen, IN:
B5.- Si la sensibilidad de la cámara se mantuviese constante de imagen a imagen
(independiente de la cantidad de luz en la imagen), el número de discos podría obtenerse
haciendo la operación (I0-IN)/(I0-I1), que lógicamente daría un valor aproximadamente
entero (en otras palabras, el oscurecimiento producido por N discos sería N veces el
oscurecimiento producido por 1 disco). Sin embargo, la sensibilidad de la cámara cambia
adaptándose a la iluminación presente. Podemos comprobarlo al observar que la citada
operación no sólo no produce el número entero deseado sino que puede producir valores
absurdos (incluso negativos).
B6.- Para solucionar este problema transformaremos las imágenes “fondo”, “disco_1” y
“disco_N” en binarias, es decir, las transformaremos en imágenes que contengan sólo los
valores mínimo y máximo de intensidad: 0 ó 255.
Para binarizar la imagen “fondo” basta multiplicarla por un número C, tal que el
resultado sea mayor que 255 para todos los píxeles. Al superar esa cifra el valor de la
intensidad asignado a ese píxel será 255. En la duda podemos tomar C=300 y ya está.
Para binarizar las imágenes de “disco_1” y “disco_N”, daremos los dos pasos de
aumento de contraste pero para contraste máximo, es decir: 1) Restaremos a toda la
imagen un valor de intensidad intermedio entre la parte del disco y la parte del fondo (este
valor lo podemos obtener paseando el ratón por la imagen o observando los dos picos
principales del histograma de grises). Esta operación asigna el valor 0 a los puntos del
disco, y también reduce algo los del fondo, pero no me importa. 2) Seguidamente
multiplicaremos toda la imagen por una constante suficientemente alta para que los puntos
del fondo pasen a valer el máximo, 255. Como antes, en la duda puedes tomar cualquier
valor >255, por ejemplo 300. Comprueba que has obtenido las imágenes saturadas y
guárdalas.
B7.- Con las imágenes saturadas ya podemos realizar la operación: N = (I0-IN)/(I0-I1).
Este número será el número de objetos puestos sobre la mesa. Dicho número será tanto
más aproximado a un entero cuanto más homogéneo sea el tamaño de los objetos.
C. Movimiento de objetos:
C1.- Se distribuyen los objetos aleatoriamente sobre la pantalla luminosa y se captura una
imagen, que guardamos en “mov_0”. Abrir con ImageJ la imagen y convertirla a 8-bit
(File/Open…; Type>8-bit).
C2.- Avisamos al profesor de prácticas, que desplazará ligeramente alguno de los objetos.
C3.- Se captura una nueva imagen, que se guarda en “mov_1”. Abrir la imagen y
convertirla a 8-bit (File/Open…; Type>8-bit).
C4.- Para comparar las dos imágenes las restamos, como queremos guardar el resultado en
un fichero distinto hacemos: Process/Image Calculator…, en la ventana que se abre
rellenar lo siguiente, image1: “mov_0”, operation: “subtract”, image2: “mov_1”, y marcar
la casilla Create New Window. Hacer clic en OK y el resultado aparecerá en una ventana
nueva.
Obtendremos cero en todos los puntos que sigan igual de luminosidad, y valores
distintos en aquellos puntos que hayan reducido o aumentado su luminosidad (al
desplazarse un objeto, tapó la fuente en ciertos puntos y la destapó en otros).
5- CUESTIONES
1.- ¿Qué es el contraste?
2.- En el apartado 4A) ¿cómo se consigue que una fuente extensa sea homogénea? ¿Crees que
se ha logrado en el caso que has analizado?
3.- (Apartado 4B) ¿Crees que con este método podríamos detectar automáticamente el hecho
de que dos objetos están solapando (uno montado parcialmente sobre otro)?
4.- (Apartado 4B) ¿Valdría este método para objetos diferentes? ¿En qué casos podría servir?
5.- En el apartado 4C) ¿Sabrías decir cuál ha sido la magnitud aproximada de los
desplazamientos detectados? ¿Con qué precisión puedes dar este valor?
6.- En el apartado 4C ¿Cómo medirías velocidades con un método similar?
Descargar