Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Octima Tutor
Octima Tutor
Resumen
Este artı́culo presenta los formatos y herramientas para el manejo de imágenes que usaremos
en el curso Tratamiento de Imágenes por Computadora. Las funciones y ejemplos presentados son
para Octave y han sido probados con la versión 2.1 bajo Linux, junto con las rutinas en el paquete
imag io octave.zip
1. Formatos de imagen
1.1. PNM
Este formato incluye los formatos de imagen PPM, PGM y PBM. Se utilizan para almacenar
imágenes color RGB, imágenes en escala de gris e imágenes blanco-negro respectivamente. Para cada
uno de los tres formatos hay una versión binaria y otra ASCII. En el primer caso la imagen se codifica
como una secuencia de bits y en el segundo se codifica en un archivo de texto donde se listan los valores
numéricos de cada pixel. Los archivos de PNM pueden se identificados automáticamente por un código
mágico (P[1-6]) en la cabecera de fichero (primera linea).
PBM (Portable BitMap). Almacena imágenes monocromáticas. En el formato binario se usa un
bit para cada pixel y en el ASCII cada pixel se representa con 0 o 1.
Ejemplos de encabezado PBM ASCII:
P1
#Ejemplo PBM
24 12
0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0 0 1 1 1 1 0
....
PGM (Portable GrayMap). Soporta imágenes en escala de gris. Cada pixel se representa con un
byte (P5) o con su valor en ASCII (P2).
Ejemplos de encabezado PGM ASCII:
P2
24 7
15
0 3 0 0 0 0 0 7 0 0 0 0 0 11 0 0 0 0 0 15 0 0 15 0 0
....
PPM(Portable PixMap). Almacena imágenes color RGB. Se usa un byte (P6) o un número (P3)
para el valor de cada componente (rojo, verde, azul) de cada pixel. Los valores de cada pixel se
codifican intercalando las tres componentes:
1
1.2 PNG
1.2. PNG
Su nombre significa Portable Network Graphics. Formato libre diseñado para aplicaciones en
Internet. Los datos de la imagen son almacenados usando un algoritmo de compresión sin pérdida
y con muy buenos rendimientos para una gran variedad de tipos de imágenes.
El formato PNG fue desarrollado originalmente como sustituto de otro formato más viejo y con
menos funcionalidades como es el GIF, cuando en 1995 una empresa patento este popular formato y
anuncio que los programas que implementara este formato deberı́an pagar una tasa por su uso. Sin
embargo el nuevo formato resultante superó ampliamente las capacidades de GIF ası́ como sus posibles
aplicaciones (ver http://www.libpng.org/)
1.3. JPG
Su nombre deriva de Joint Picture Format. Es un formato que usa un algoritmo para compresión
de imágenes con pérdida.
Básicamente la compresión consiste en dividir la imagen en bloques (tı́picamente 8 × 8), hacer una
transformada coseno discreta de los datos en cada bloque, seguida por la selección de los coeficientes
más significativos y la codificación de esto usando compresión estadı́stica sin perdida.
Esta diseñada para obtener buenos rendimientos (calidad/tamaño) con imágenes naturales (fotos)
y sin demasiadas transiciones abruptas (ver http://www.jpeg.org/)
Ejemplo:
> cd ~
> install -d lib/octave/image
> mv imag_io_octave.zip lib/octave; cd lib/octave
> unzip imag_io_octave.zip; mv imafinal/* image/
> rmdir imafinal
Por último se debe modificar la variable de ambiente LOADPATH en Octave para que incluya el
camino a estos nuevos archivos .m . Esto se puede hacer ejecutando en octave el comando:
LOADPATH = [ LOADPATH , "$HOME/lib/octave/image:"];
o copiando esa linea en el archivo de configuracion /.octaverc.
2
En el caso de una imagen RGB (isPpm=1) si la imagen es de tamaño N × M obtendremos en Im
una matriz con N filas y 3 × M cuyas columnas corresponden a los valores de rojo, verde y azul
de manera intercalada.
readpng: Lee una imagen con formato PNG (necesita ImageMagick).
readjpg: Lee una imagen con formato JPG (necesita ImageMagick).
splitppm: descompone una matriz cuyas columnas contiene los valores intercalados de rojo, verde
y azul en las 3 matrices Red, Green y Azul.
[Red Green Blue] = splitppm(Im)
• Im - matriz Octave con valore RGB intercalados por columnas (tipo PPM).
• Red - componente de rojo.
• Green - componente de verde.
• Azul - componente de azul.
map=colormap ( cmap ): Instala cmap como nuevo mapa de colores. El colormap cmap debe ser
una matriz de N filas por 3 columnas(R,G,B), siendo N el número de colores en el mapa. En
cada fila se guarda un color con sus valores de intensidad de rojo, verde y azul respectivamente;
codificados por un número entre 0 y 1.
Si se ejecuta colormap ("default") esta función reinicializa al mapa de colores por defecto, que
un mapa en escala de grises con 64 colores.
La función devuelve el nuevo mapa de colores instalado.
cmap=gray(N)): Construye un mapa de colores en escala de grises con el numero de niveles
especificado (N).
cmap=ocean(N)): Construye un mapa de colores con N entradas en tonalidades acuáticas
(variaciones de azules).
cmap=hot(N)): Construye un mapa de colores con N entradas en tonalidades calientes (variaciones
de rojo y amarillo). Es una modificación de la función ocean agregada a Octave por docentes del
curso(1 ).
cmap=hsv(N)): Construye un mapa de colores con N entradas que varı́an sobre los colores
saturados del arco-iris comenzando y terminando en rojo. Agregada a Octave por docentes del
curso (1 ).
image( Im, Zoom): despliega la matriz como una imagen color usando el colormap actual. Los
elementos de la matriz imagen IM deben ser valores entre 1 y la longitud del colormap. Los
valores que estén por debajo de 1 o por encima del número de entradas en el mapa de colores N
se truncan a estos valores antes de desplegar la imagen.
La variable opcional Zoom permite especificar una escala de zoom antes de mostrar la imagen.
Su valor por defecto es 1.
imagesc( Im, Zoom):
Totalmente análoga a la función image solo que en este caso se aplica un cambio de escala a los
valores en la matriz Im de modo que sus valores caen en todo el rango del mapa de colores actual.
(N − 1) ¡ ¢
Imsc = 1 + ∗ Im − min(Im)
(max(Im) − min(Im))
1
Las funciones hot y hsv se definen en los archivos .m que se encuentran en la página del curso dentro de mapascolor.tgz.
Estos archivos deben copiarse en el mismo directorio donde se puso imag io octave.zip
3
3.2 Funciones para desplegar imágenes color RGB
4
Im = mergeppm(R, G, B)
◦ Im - matriz con los valores RGB entrelazados (en estilo PPM).
◦ R,G,B - 3 matrices iguales con las componentes rojo, verde y azul de la imagen.
Ejemplo: Leer una image color RGB, intercambiar sus componentes y salvarla con otro nombre.
[Im,isPpm, mval]=readpnm("lupin.ppm");
[R,G,B]=splitppm(Im); # separamos en componentes
clear Im;
Ima=mergeppm(B,R,G); # rearmamos intercambiando (BRG) los colores con mergeppm
disp("Finalmente la escribimos al disco como salad.ppm con los nuevos colores!")
writeppm(’salad.ppm’, Ima, 0); # Escribimos al disco con los nuevos colores!"
disp("Abra la imagen con ImageMagick, GImp, Photoshop o lo que sea");