- Image Quilting
-
Image Quilting («quiltear imágenes» en inglés, nombre y técnica inspirada en la técnica de realización de colchas de retazos o patchwork) es una técnica de síntesis de textura. Es decir, se la usa para crear imágenes de textura similares a una imagen de prueba.
La técnica fue inventada por Alexeis A. Efros y William T. Freeman quienes la presentaban en 2001.[1]
Contenido
Técnica
Image Quilting imita a la técnica manual patchwork para crear un quilt. Crea un imagen parche por parche o — como se dice en términos informáticos — baldosa por baldosa (tile by tile en inglés), siguiendo la regla: «Busca la baldosa que se adapta lo mejor con las que ya has añadido y córtala de manera que se identifique bien con el diseño de sus vecinos.»
Formalmente se realiza usando tres parámetros:
- El tamaño de la imagen nueva (output size) define altura (height) y ancho (width) de la imagen nueva. En general se utiliza el mismo valor para ambos parámetros, es decir la imagen nueva va a ser cuadrada.
- El tamaño de baldosa (tile size) define altura y ancho de una baldosa sola. En general aquí también sólo se usa un parámetro así que las baldosas son cuadradas.
- El ancho del borde (edge size) define el tamaño del área en donde dos baldosas se solapan. En esta área el algoritmo busca un corte óptimo de manera que el diseño se continúe sin fisuras visibles.
Con la imagen de prueba como entrada y estos parámetros, el algoritmo ejecuta tres pasos:
- Inicialización: Crea una imagen nueva del tamaño deseado por el usuario. Elige aleatoriamente parte de la imagen de prueba del tamaño de una baldosa y la copia y pega en una esquina de la nueva imagen.
- Búsqueda de baldosas acoplables: Para cada baldosa siguiente busca en el imagen de prueba candidatos que vengan bien con las baldosas vecinas. Para ello se pones dos baldosas, una encima de la otra, de manera que se solapen al borde y se comparan sus diseños en esta área. Se agregan los mejores candidatos en una lista de candidatos.
- Quiltear: De la lista de candidatos aleatoriamente elige una baldosa y se pega en la nueva imagen.
Algoritmo
// Sintetiza una textura nueva de dimensiones (OutputSize x OutputSize) de la // imagen de prueba SampleImage usando los parámetros TileSize y EdgeSize. ImageQuilting( SampleImage, TileSize, EdgeSize, OutputSize) { OutputImage = new Image(OutputSize, OutputSize); // 1. Inizialización: rand_x := random(1, SampleImage.Width - TileSize); rand_y := random(1, SampleImage.Height - TileSize); Copy-paste tile (rand_x, rand_y, rand_x+TileSize-1, rand_y+TileSize-1) from SampleImage to position (1, 1) in the OutputImage; // 2. Busca: for y := 1 to SampleImage.Height step (TileSize-EdgeSize); { for x := 1 to SampleImage.Width step (TileSize-EdgeSize); { if not x == 1 and y == 1 { CurrentTile := OutputImage(x, y, x+TileSize-1, y+TileSize-1); vector Matches := FindBestMatches(SampleImage, CurrentTile); rand_pos := random(1, Matches.Size); tile := SampleImage(Matches[rand_pos], Matches[rand_pos], Matches[rand_pos]+TileSize-1, Matches[rand_pos]+TileSize-1); NewTile := SampleImage(rectangle); } } } }
Bibliografía
- ↑ Alexeis A. Efros, William T. Freeman (2001). «Image Quilting for Texture Synthesis and Transfer.». Proceedings of SIGGRAPH '01, Los Angeles, California - (-). -.
Enlaces externos
- La página web de Alexeis A. Efros y William T. Freeman ofrece ejemplos para mostrar la calidad de la técnica, el artículo está en formato PDF. Otros materiales también están disponibles.
Wikimedia foundation. 2010.