2009-08-11 15 views
11

¿Qué es un buen algoritmo para crear imágenes de semitonos (como this)? Una búsqueda rápida en Google arroja un montón de documentos sobre el tema, pero es difícil juzgar cuáles son buenos, eficientes, etc. ¿Hay alguna mejor opción para hacer este tipo de cosas?Algoritmo para hacer imágenes de semitonos?

+0

hay algo más a su pregunta que le gustaría contestado? ¿Más detalles? – NoMoreZealots

Respuesta

16
  • Filtre a la resolución que quiere los "puntos" separados por.
  • Obtenga la intensidad promedio del grupo de píxeles en esa área.
  • Dibuje el punto de manera que la superficie área del punto sea igual al porcentaje desde blanco a negro de la intensidad promedio .

Piense en los grupos de píxeles como una cuadrícula hexagonal. Use una función de círculo para decidir qué píxeles van al grupo. Puede ajustar la superposición de los círculos para ajustar el negro/saturación de la salida. Esto está diseñado para resultados de alta resolución, como imprimir. Si está haciendo esto para mostrar en la pantalla como un efecto visual, asegúrese de utilizar una rutina de dibujo circular antialias para compensar la baja resolución de la pantalla. (En comparación con la impresión, incluso HD no es tan alta.)

Si está haciendo esto porque le gusta el efecto, es genial. Pero si solo desea oscilar hasta una imagen en blanco y negro, considere usar un tramado "Floyd-Steinberg". Proporciona resultados de alta calidad y distribuye el error en toda la imagen. http://en.wikipedia.org/wiki/Floyd-Steinberg_dithering

+0

http://en.wikipedia.org/wiki/Dither – kenny

+0

Tienen un buen ejemplo de "floyd-stienberg". Me ha dado los mejores resultados en el pasado. – NoMoreZealots

+0

El algoritmo "dibujar el punto" que se describe aquí logra el efecto de "punto negro solamente" en la página web de ejemplo citada. Pero construir una pantalla y ajustar la forma de los puntos para el efecto "solo punto negro" será más rápido en el tiempo de ejecución. –

0

La forma más sencilla de hacer esto, es ir píxel por píxel y el uso de la aleatoriedad: para cada píxel, la probabilidad de coloración de nuevo = oscuridad del color original.

Eso le puede dar un algoritmo de tramado de dos líneas. No va a verse tan bien como Floyd-Steinberg (porque ese mantiene un registro de los errores), o tan artístico como el "mosaico y luego coloque discos en cada azulejo para que esa fracción de negro = oscuridad promedio en el mosaico original", pero funciona bastante bien en la práctica.

+0

Esto resulta en algo donde la densidad de salida appoxima el nivel de gris de entrada, pero no logra la apariencia de punto agrupado del ejemplo específico citado. –

+0

Medio de semitono (para citar wikipedia) "Semitono es la técnica reprográfica que simula imágenes de tonos continuos mediante el uso de puntos, que varían en tamaño o espaciado". La muestra que mostró varía de tamaño, la mía varía el espaciado. Ambos medios tonos de liebre, aunque ciertamente no voy a pretender que el mío se ve tan bien como el ejemplo: como se dijo, el valor de esta respuesta es que es extremadamente simple de implementar. – redtuna

+0

liebre -> son (uy, perdón por el error tipográfico! Desearía poder editar mis comentarios) – redtuna

4

Halftoning es muy eficiente.

Semitono de un solo nivel: Entrada: Pixeles de su imagen; "pantalla" preconstruida que contiene valores de umbral. En tiempo de ejecución: para cada canal de color, para cada píxel, seleccione un valor de umbral (indexe en el módulo de matriz de umbral las dimensiones de la matriz). Una comparación entre el píxel y el umbral determina si el valor de salida está activado o desactivado.

También se generaliza a la producción de varios niveles, mediante el uso de varias pantallas.

La parte interesante es la construcción de las pantallas (matrices de umbral). Hay muchas variaciones: punto agrupado (AM), estocástico (FM), muchas variaciones e híbridos, incluido el ruido azul y el ruido verde (AM/FM). Y generalmente desea una pantalla diferente para cada canal de color. Las pantallas de puntos agrupadas tradicionales colocan sus puntos en cuadrículas rectangulares que se pueden describir por su frecuencia (baja frecuencia = puntos grandes) y ángulo (típicamente 15 ° para Cyan, 75 ° para Magenta, 90 ° para Amarillo y 45 ° para Negro) .

Si desea experimentar, el mapa de bits de Photoshop con método de pantalla de semitonos (vea esto tutorial) tiene un generador de pantalla interno y mostrará una imagen en escala de grises en un mapa de bits como su ejemplo.

Los métodos de interpolación sugeridos por otros implican un mayor cálculo por píxel y la salida no se parece a su ejemplo de semitono apantallado por puntos agrupados.

+1

Ejemplo animado: http://www.openprocessing.org/visuals/?visualID=911 – biziclop

1

Existen muchas implementaciones de algoritmos de código abierto para crear imágenes de medios tonos. Puedes echar un vistazo a los códigos fuente. A continuación se presentan algunas implementaciones desarrolladas en Java usando Marvin Image Processing Framework.

imagen de entrada:
enter image description here

Difusión de errores (source):
enter image description here

Rylanders (source):
enter image description here

tramado (source):
enter image description here

Círculos (source):
enter image description here

Cuestiones relacionadas