Showing posts with label graficación por computadora. Show all posts
Showing posts with label graficación por computadora. Show all posts

Thursday, September 13, 2012

Más sobre semitonos



El 14 de marzo de este año, hablé de un programa que escribí de semitonos. Basado en lo que en realidad es la ditherización, logré hacer que mi programa filtrara una imagen de manera que pudiese ser desplegada como si tuviese menos colores, o tonos de gris. Sin embargo, la ditherización es un tema que ha sido más que usado, particularmente por la industria editorial.

El problema surge cuando uno despliega una imagen  (blanco & negro o color), en un dispositivo que da una resolución determinada (digamos, unos 1800x1200 pixeles, con 16 millones de colores). Evidentemente si quiero que dicha imagen pase a ser impresa a un dispositivo que sólo despliega los valores blanco y negro, debo hacer algo para representar los tonos de gris que simplemente no tengo. Esto es lo que se llaman semitonos y la idea es combinar puntos blancos con negros para formar el punto de un gris determinado. Cabe decir que no estamos mezclando -digamos- pigmento blanco con negro, sino que ponemos un punto negro sobre fondo blanco. Para que dé el tono correcto, una idea fue poner una imagen de un punto grande, negro, un circulote pues, sobre un cuadro blanco de 270 pixeles cuadrados. Fui reduciendo de 30 en 30 pixeles y acomodaba el resultado en el mismo cuadrado blanco de 270 pixeles. Así, hasta lograr hacer un punto de 30x03 pixeles. Acto seguido creé un cuadro blanco sin punto negro en el centro. Logré así 10 imágenes que representan un tono de gris, y el ojo humano es quien no dará esos tonos que en realidad no existen.


(el cuadro blanco representa un cuadrado de 270x270 pixeles sin punto negro)

Una vez hecho esto, procedí como en otros casos:

  1. 1. Cargué una imagen a memoria
  2. 2. La pasé a tonos de grises (si es de color)
  3. 3. Cuadriculo la imagen
  4. 4. Tomo un cuadro de la región, calculo el gris promedio y pongo alguno de los puntos de las imágenes de los semitonos. Estas imágenes son 10, las cuales van, desde muy oscuro a muy claro. Si el tono de gris está en un valor que va de 0 a 255, entonces tenemos que por cada cuadro de un tono de gris, este debe caer en un intervalo que va de 25 en 25 tonos de gris.
  5. 5. Una vez seleccionado la imagen del semitono, sigo con la siguiente región y repito el paso 4
  6. 6. Al terminar con la imagen, con otro programa construyo la imagen generada por el programa de semitonos.


He aquí un ejemplo hecho con Lenna, la imagen que por tradición se usa en la ciencia del procesamiento de imágenes. Más información sobre esta mujer y de dónde salió la imagen, puede verse en el enlace que puse al principio de este artículo.

Imagen original:

Imagen procesada: 

He aquí parte de la imagen aumentada:

Esta es la tecnica que se usó por muchos años en los periódicos, los cuales tenían una resolución de salida mucho más pobre que la mayoría de la resolución que las fotografías podían dar.

A quien le interese este programa, que es completamente gratuito, pídamelo por correo a morsa@la-morsa.com.

Wednesday, March 14, 2012

Un estudio informal de los semitonos



Introducción

El tramado, o dithering, de acuerdo a la inefable Wikipedia, es una técnica usada en computación gráfica para crear la ilusión de profundidad de color en imágenes con una paleta de colores limitada (reducción de color). En una imagen tramada, los colores no disponibles en la paleta se aproximan por una difusión de píxeles de color dentro de la gama de colores disponibles. El ojo humano percibe la difusión como una mezcla de los colores dentro de ésta (ver percepción del color). El tramado es análoga a la técnica denominada semitonos utilizada en impresión. Las imágenes tramadas, en particular las que tienen relativamente pocos colores, a menudo se distinguen por un grado de granulosidad característico o por un aspecto moteado.

Esta situación se observa comúnmente cuando usamos diferentes tipos de dispositivos. Por ejemplo, podemos tener una imagen a color, pero la impresora solamente soporta tonos de gris. Y peor aún, ésta puede soportar solamente dos tonos: hay tinta o no hay tinta en cada punto de la imagen. De hecho, los periódicos por muchos años usaron este proceso de dithering, el cual simula más de un color acomodando en un tramado, en una malla, dos colores, como por ejemplo, en la siguiente imagen:

Figura 1

Obsérvese que con sólo dos colores, rojo y azul, podemos obtener algunos tonos del magenta. Muchos libros y revistas se hacen utilizando solamente dos tintas y sin embargo, dan la impresión de imprimir con muchos más colores. Solamente acercándonos lo suficiente a la impresión, podremos ver el efecto,  parecido al que se muestra en la figura 1.

Con esto en mente, decidimos analizar algunos de los sistemas que ditherizan, valga la expresión una imagen.

Hallamos en

http://www.visgraf.impa.br/Courses/ip00/proj/Dithering1/floyd_steinberg_dithering.html

algunos de los algoritmos más comunes para desarrollar esta técnica. Veámoslos:

Dithering promedio

Esta técnica usa solamente dos niveles de medios tonos para la imagen a producir. Consiste en elegir cierto nivel de gris y tomar éste como un umbral. Entonces se toma cada pixel de la imagen a procesar. Si el valor de cada pixel es mayore que el umbral definido, entonces cuantizamos a un valor de uno (por ejemplo, todo blanco), y sino, cuantizamos a cero (todo negro. He aquí un ejemplo de cómo queda al procesar una imagen de esta manera:

Figura 2

Este método es muy simple de implementar, pero tiene sus desventajas: el contorno de la cuantización es muy perceptible. Cabe señalar que antes de realizar el proceso, es importante pasar a tonos de gris la imagen, para mejores resultados.

Dithering al azar

El siguiente tramado, o dithering, es del azar. En este caso el resultado de este procesamiento no es aceptable para ninguna cuestión de calidad fotográfica. Funciona de manera muy simple: para cada punto de la imagen, se genera un valor de 0 a 255 y si el valor generado es mayor que el valor de cada pizel, se pone un punto blanco, sino se pone uno negro. Esto genera imágenes que parecen tener ruido o “nieve”, como cuando hay interferencia en la televisión.

Cabe decir que aunque la idea de generar números al azar pretende pensar en números verdaderamente al azar, la imagen no tendría artefactos, o ruido. Sin embargo, como los algoritmos para generar números aleatorios son seudoaleatorios, los artefactos salen a relucir de pronto.

He aquí un ejemplo de la salida de esta técnica:


 Figura 3


Dithering ordenado

Otra posibilidad es hacer este trabajo usando una matriz de números, de la siguiente manera: Expresemos un patrón como puntos ordenados de la siguiente manera:

8  3  4
6  1  2
7  5  9

Podemos usar esos valores como el umbral. Si el valor de un pixel (escalado en el rango 0-9), es menor que el número que le corresponde dentro de la celda de la matriz, entonces se pinta un punto negro, en caso contrario se pone un punto blanco. Este proceso, conocido como dither ordenado es el que normalmente usan muchos periódicos (antes de que empezaran a imprimir a color).

Bayer ha mostrado que las para matrices cuyo orden son potencias de dos, hay un patrón óptimo de puntos dispersados, los cuales son el resultado del ruido en la más alta frecuencia. Se pueden tener matrices de 2x2, 3x3 y 4x4, por ejemplo:

4  1
2  3

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

El método de Bayer es muy común. Los artefactos son su mayor inconveniente. El usar la matriz ordenada no es buena idea en imágenes que antes vengan ya ditherizadas.

He aquí un ejemplo de este proceso:

 Figura 4

A quien le interese este software, escríbame a morsa@la-morsa.com y a vuelta de correo lo tendrá de forma gratuita. Cabe decir la imagen usada corresponde a Lenna, una modelo de Playboy (1972), cuya imagen ha sido usada ya como el estándar en estudios de procesamiento de imágenes, dithering, semitonos, etc. La historia completa sobre Lenna, aquí (*)

_____
(*) Lenna, o Lena, es el nombre de una imagen de 512x512 pixeles que se usa actualmente en pruebas estándar de graficación por computadora y proceso digital de imágenes. La foto corresponde a Lena Södferberg, una modelo sueca, fotografiada por Dwight Hooker.

La historia de la imagen fue narrada en la lista de distribución del IEEE Professional Communication Society en mayo de 2001, en un artículo de Jamie Hutchinson: "Alexander Sawchuk cree que fue en junio o julio de 1973 que, mientras era profesor ayudante de ingeniería eléctrica en el Instituto de tratamiento de señal e imágenes de la Universidad del Sur de California, con un estudiante y el jefe del laboratorio, estaban buscando apresuradamente en el laboratorio una buena imagen para escanear para un artículo de conferencia de un colega. Estaban cansados de sus imágenes de prueba habituales, cosas aburridas que databan de los años 1960 y basadas en estándares audiovisuales. Querían algo sorprendente para asegurar un buen contraste, y quería que hubiese un rostro humano. En ese momento, alguien llegó con el último Playboy. Los ingenieros arrancaron el tercio superior del póster central para poder envolverlo alrededor del tambor de su escáner Muirhead, que habían equipado con convertidores analógico a digital (uno para cada canal de color: rojo, verde y azul) y un minicomputador Hewlett Packard 2100. El Muirhead tenía una resolución fija de 100 líneas por pulgada y los ingenieros deseaban una imagen de 512 × 512, así que limitaron la imagen a 5'12 pulgadas de altura, cortando para ello la fotografía a la altura de los hombros de la modelo".

Lenna no fue la primera imagen de una revista Playboy en ser usada para ilustrar algoritmos de procesamiento de imágenes. Lawrence G. Roberts usó una imagen del Playboy de 1960 con permiso y atribución, en su tesis del MIT en 1961 sobre tramado de imágenes.


En 1988, fue entrevistada por una publicación informática sueca y se felicitó por lo que había ocurrido con su imagen. Aquél fue el momento en que supo por primera vez del uso de su imagen en el mundo de la informática.


PostScriptum

He aquí más información sobre Lenna. Se incluye la foto original de Playboy y Lenna cómo se ve hoy día. Entre aquí.

Friday, February 24, 2012

Una pregunta a la que aún no tengo respuesta


Las pantallas gráficas ya vienen en todas las resoluciones habidas y por haber, 320x200 pixeles, 640x480, 1024x768 etc. y evidentemente en la medida que avanza el hardware y se tienen tarjetas gráficas más poderosas, más pequeños son los puntos en la pantalla y mejores son las imágenes que podemos desplegar.


En el curso que estoy dando, en la Facultad de Ciencias, sobre graficación por computadora, empezamos por las "primitivas", es decir, las funciones básicas que debe tener todo sistema gráfico. La primitiva más primitiva valga la expresión, más fundamental, es el pixel, el equivalente al punto en una gráfica en papel. En la computadora tenemos un limitado número de pixeles en la pantalla, que son cuadrados a todo esto, y que por su reducido tamaño ya el ojo humano no puede distinguir que se trata de un cuadrito minúsculo para cada pixel.

Otras primitivas son línea (sucesión de puntos, de pixeles, pues), círculos, elipses, rectángulos, moverse a un punto en la pantalla sin pintar, etc. Esto es lo primero que todo estudiante de este curso debe saber. Pero he aquí que pensando en las líneas, llegué a la conclusión que si consideramos que un punto en términos conceptuales no tiene siquiera tamaño, entonces una línea es una sucesión infinita de puntos. Si esto es cierto, mi pregunta es ¿por qué podemos dibujar en papel una línea, que supuestamente es una sucesión infinita de puntos y hacerlo en tiempo finito? 

Me huele que esto se parece al problema de Aquiles y la tortuga, pero no estoy seguro. ¿Alguna idea?