Exercise in Texture Synthesis
This exercise deals with texture synthesis. This means that when we are given an
image of a texture, we would like to synthesize a new image in the same size or
bigger than the original image. The new texture should be similar to the original
For example, given the texture
A 'good' algorithm would synthesize as a result.
One would say that these textures look alike. However, checking carefully would
reveal that some parts in the new texture were 'copied' from the original texture. Some
even appear more than once in the new texture – there are repeating patterns.
However, these repetitions are minor and don't create visible artifacts.
This exercise deals with a specific type of textures. These textures are non-stochastic
where texture elements can be separated 'easily'. For the rest of the exercise we shall
call these elements "textons". A texton is a fundamental microstructure in an image.
The following images present such textures and some 2 – 4 example textons ( out of
Notice that two textons in an image may be similar (like two green olives) or different
(a red olive compared to a big green olive). Sometimes a texton may be approximated
from another texton by only means of translation, rotation, and scaling (like two
eggs). In other times there is a great shape difference (two rocks). Textons may also
This exercise is divided to three parts:
In this part the goal is to have an algorithm that extract textons from a given image.
After extracting the textons, the algorithm should cluster the textons to sets such that
similar textons should be included in the same set.
Your algorithm should decide how many sets should be. It is up to you to decide and
implement how to cluster the textons. You also choose the textons shape. The key
challenges in this part is to extract the textons accurately and finding a good method
for the separation to clusters.
The input is a color image of a texture. The output should be images of discriminative
representatives of each set.
Since textons may be different in several criteria there is no 'right' solution. Explain
the results you received in the documentation of your work.
In this part the goal is to synthesize new textures using the textons you have extracted
in the first part. The input for your algorithm is a texture image and the height and
width of the new texture to be synthesized. The output should be a new synthesized
texture. To do this, your algorithm should place uniform randomly chosen textons
(from the sets you extracted in the first part) in uniform randomly chosen locations.
You may notice in your results of part 1 that textons can’t be separated perfectly and
that some textons include parts of others (overlapping). So, when using these textons
in the new image, seams or other artifacts may occur. The key challenge in this part is
to synthesize correctly such that no artifact is visible. This can be achieved by either
smoothing overlapping parts or by a clever positioning of the textons.
Synthesizing by uniform randomly placing textons is nice. However in many cases,
this is not the true spread of the textons. For example, observe these textures:
The textons here creates much more interesting patterns than uniform spread on the
In this part the goal is to synthesize textures like the above.
Observe some real world texture examples – oil stains, peeling paint, rust spots,
mould and more are excellent examples of phenomena that creates interesting
Build a model that is able to generate interesting patterns like the above.
An example for such a (not quite right) model:
One could say that everything in the world spread like a Gaussian function. So, when
given a set of textons, she could spread them using a 2D Gaussian probability around
a randomly chosen center. For one set of textons this imply a 4 parameters model – 2
paremeters for the x,y location of the center and 2 for the Gaussian probability
function. For two sets of textons the model has 8 parameters, for three 12 parameters
and so on.
This is only an example. The models don’t have to deal only with probability
functions. Spreading textons may also involve procedural methods. It’s up to you to
In this part you should implement an algorithm that synthesizes textures using the
model you have devised. The input for the algorithm is the same as in part2 +
parameters that are required by your model. The output is a synthesized texture
image. You should try to recreate the images above using your algorithm.
When you document this part, explain the parameters of the model and the
parameters’ meanings. Document the parameters values that you used to recreate the
images above and other examples.
Texture Particles /
Jean-Michel Dischler, Karl Maritaud, Bruno Lévy, Djamchid Ghazanfarpour
Computer Graphics Forum (Eurographics) 2002
Visual learning by integrating descriptive and generative methods (2001) /
by Cheng-en Guo, Song-chun Zhu, Yingnian Wu
Proc. of Int’l Conf. on Computer Vision
Textons, Contours and Regions: Cue Integration in Image Segmentation /
Jitendra Malik, Serge Belongie, Jianbo Shi and Thomas Leung
IEE International Conference on Computer Vision 1999
The last paper gives a different definition for textons. However, it shows useful
methods to extract textons.
You may find more sources in Google, or in papers that cites/are cited by the above.
You should submit the assignment till
What to submit?
You should submit a CD or a diskette with:
• Documentation - Describing your work in a document. Describe your
algorithm and explain the challenges you encountered, how you managed to
overcome them and why you have chosen to use your methods. Analyse your
algorithm results – what kind of textures provides the best results and why. On
the other hand, why your algorithm fails in other cases. If you have ideas for
improving your algorithm, write them down, even if you haven’t implemented
them. Do not print your documentation.
• Include your email address in the document so we can hand you others work
for scoring (see the grading section )
• Examples & Results - Provide the examples you have used to test your
algorithm and the results. Provide good examples for each part of the work.
You probably find that your algorithm doesn’t succeed in every case. Provide
examples in which your algorithm fails. Try to run your algorithm on
• Source code & executables – Provide your source code. If your code needs to
compile (written in C, C++ etc.) then provide the executables. In any case,
provide usage notes in the documentation. The usage should be simple and
• Submission is done in pairs.
• You may implement the exercise in any language you wish (i.e. C, C++, Java,
Matlab, Python etc.) under Windows or Linux.
• You may use any library that extends (i.e. for image handling, math operations
etc.) the language of your choice. Don’t invent the wheel! If a library you use
requires an installation of files or packages please note it in the
• Provide interesting example images and results. Your grades will greatly
depend on these.
• You may find some texture examples you can use on the course site.
• Be creative. Creativity will be rewarded.
Your grade will be based on:
• Your results – Visual results are the most important part in computer graphics.
Providing good results will grant good grades. Show many results and provide
your own examples.
• Students scoring – Each student will have to grade some other works results.
Scoring correctly the other works (matching to the T.A scores) is part of the
final grade. In this way your judgment of others work is also checked.
• Documentation – You should provide a clear explanation of your work.
• Creativity – Creativity is a bonus and can be achieved in many ways.
For further questions contact Amir Rosenberger (firstname.lastname@example.org)