View project on GitHub


a C++ library for texture generation

Implemented Algorithms


Implementation of the image quilting process presented in 1

quilting quilting quilting quilting

Wang Tiles

Implementation of the wang tile texture generation method presented in 2

wang tiles wang generation

Bi-Layer Textures

Implementaion of the method presented in 3. Global implementation can be tested, but also 4 independant important step of the algorithm, as described below.


Executable for Linux, Mac & Windows are downloadable

Noise Filter

This filtering method creates homogeneous areas based on noise. It uses a local spectra descriptor coupled with a Joint Bilateral filter. The Local spectra descriptor (T loc) is a spectra of a small neighborhood around the pixel. By comparing this local descriptor, we can determine if two patches belong to the same noise or not. In this way, the filtering will be guided by the spatial distance, and by the spectral distance. If two pixel have a close local spectra, their will be blended.


Noise KMean

This clustering method extract areas based on noise. The method proceed to a kmean clustering using the local spectra descriptor as distance. Clusters in this high dimension domain will be the masks.



Extract the noise(PSD) from the different areas determined by the masks using AutoCorrelation constrainted on the content, to only pick up pixel which belong to the mask, discarding the missing informations. Then synthesis a noise layer using 4 for each extracted PSD.


Biscale noise patch exchange:

This is a modified version of the mono-scale On-the-Fly Multi-Scale Infinite Texturing from Example 5, without complex color transfers and texture fetches. It consists in Wang tiles, in which patch contents are randomly exchanged. Allowing for contents to be rotated (by angle θ ∈ {π/4, π/2, 3π/4, π}) and scaled (0.5 ≤ λ ≤ 1), and applying turbulence.

If used in Bi-Layer textures context, structure layer + synchronized maks will be synthesised using this method then Noise layer will be added.

Texton Analysis

Analysis part of Texton Noise 6. Generates all possible sizes of texton for a given input.

Graphcut textures

The GCTexture class implements the patch-based graphcut texture synthesis method described in 7, using the Maxflow library 8. It provides the three selection methods proposed in the paper (random placement, entire patch matching and sub-patch matching) as well as the possibility to refine synthesis results based on cut errors. The implementation of the FFT-based acceleration of SSD evaluation is not available for now. Graphcut texture synthesis combines optimal patch placement and computation of optimal cuts of arbitrary shape, which yields high-quality results for a large class of textures (stochastic to structured).


The PatchMatch code is adapted from the “minimal unoptimized example of PatchMatch” by Barnes et al. 9 10. PatchMatch is an efficient algorithm for matching small patches between an input and an output texture, that alternates coherent and random searches.


Implementation of the approach proposed in 5 for infinite texturing. The idea is to cut a given periodic tile into a set of patches, for which alternative contents are seeked among all other possible locations over the tile.

During synthesis, alternative contents are then randomly picked in order to ensure a high degree of variety, while keeping memory consumption very low with respect to other state-of-the-art tiling methods (eg. Wang tiling).

SLIC Superpixels

An implementation of SLIC superpixel 11 method is included in ASTex core under the form of an filter. A usage example can be found in the Test directory

Saliency Filters

An implementation of saliency map computation based on 12 is included in ASTex core under the form of a filter. A usage example can be found in the Test directory.

Periodic plus smooth

An implementation of Periodic plus smooth image decomposition 13



  1. Efros, Alexei A. and Freeman, William T. Image Quilting for Texture Synthesis and Transfer, SIGGRAPH ‘01 

  2. Michael F. Cohen, Jonathan Shade, Stefan Hiller, Oliver Deussen, Wang Tiles for image and texture generation,ACM SIGGRAPH 2003 

  3. Guingo, Geoffrey and Sauvage, Basile and Dischler, Jean-Michel and Cani, Marie-Paule, Bi-Layer Textures: A Model for Synthesis and Deformation of Composite Textures, Comput. Graph. Forum, July 2017, url 

  4. Bruno Galerne, Yann Gousseau, Jean-Michel Morel, Random Phase Textures: Theory and Synthesis, IEEE Transactions on Image Processing ( Volume: 20, Issue: 1, Jan. 2011 ) DOI: 10.1109/TIP.2010.2052822 url 

  5. K. Vanhoey, B. Sauvage, F. Larue, J-M. Dischler. On-the-Fly Multi-Scale Infinite Texturing from Example, Siggraph Asia, Hong Kong, ACM Siggraph (Eds.), ACM Siggraph Asia 2013 Papers, Volume 32, n° 6, novembre 2013, doi:10.1145/2508363.2508383, Oral, Long url  2

  6. Galerne, B. and Leclaire, A. and Moisan, L. Texton Noise, Computer Graphics Forum 2017, url 

  7. Vivek Kwatra, Arno Schödl, Irfan Essa, Greg Turk, and Aaron Bobick. Graphcut textures: image and video synthesis using graph cuts. ACM Trans. Graph. (Proc. SIGGRAPH 2003), 22(3):277-286, 2003. DOI: 

  8. Maxflow library, Vladimir Kolmogorov, WebSite 

  9. C. Barnes, E. Shechtman, A. Finkelstein, and D. B. Goldman. PatchMatch: A Randomized Correspondence Algorithm for Structural Image Editing. ACM Transactions on Graphics (Proc. SIGGRAPH), 28(3), 2009. 

  10. Minimal unoptimized example of PatchMatch, C. Barnes, url 

  11. Radhakrishna Achanta, Appu Shaji, Kevin Smith, Aurelien Lucchi, Pascal Fua, and Sabine Süsstrunk, SLIC Superpixels Compared to State-of-the-art Superpixel Methods, IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 34, num. 11, p. 2274 - 2282, May 2012. url 

  12. Krahenbuhl, Philipp,Saliency Filters: Contrast Based Filtering for Salient Region Detection, Proceedings of the 2012 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), url 

  13. Lionel Moisan Periodic Plus Smooth Image Decomposition, Journal of Mathematical Imaging and Vision, February 2011, Volume 39, Issue 2, pp 161–179 url