Moldoveanu Georgiana Tst Ro 2019 [611403]

1
Cuprins

Summary ………………………….. ………………………….. ………………………….. ………………………….. ………………….. 3
1 The current study ………………………….. ………………………….. ………………………….. ………………………….. …3
1.1 Textures ………………………….. ………………………….. ………………………….. ………………………….. ……….. 3
1.2 The development of texture synthesis ………………………….. ………………………….. ………………………. 3
1.3 The algorithm of Alexei Efros and William Freeman ………………………….. ………………………….. ……. 4
2 Theoretical foundation ………………………….. ………………………….. ………………………….. ……………………… 4
2.1 Classification of textures ………………………….. ………………………….. ………………………….. …………….. 4
2.2 Texture synthesis ………………………….. ………………………….. ………………………….. ……………………….. 5
2.3 Constraints in regard to patch selection ………………………….. ………………………….. ……………………. 5
2.4 The transfer of the texture ………………………….. ………………………….. ………………………….. ………….. 5
3 Implementation of the chosen solution ………………………….. ………………………….. ………………………….. .6
3.1 The first stage of the synthesis ………………………….. ………………………….. ………………………….. …….. 6
3.2 Step 2 of the synthe sis ………………………….. ………………………….. ………………………….. ……………….. 6
3.3 Step 3 of the synthesis ………………………….. ………………………….. ………………………….. ……………….. 7
3.4 Methods for calculating the degree of similarity between patches ………………………….. …………… 7
4 Experimental results ………………………….. ………………………….. ………………………….. …………………………. 8
Planificarea activității ………………………….. ………………………….. ………………………….. ………………………….. . 11
1 Stadiul actual ………………………….. ………………………….. ………………………….. ………………………….. ……….. 12
1.1 Pixelii și textura ………………………….. ………………………….. ………………………….. ………………………….. 12
1.2 Problematica lucrării ………………………….. ………………………….. ………………………….. …………………… 12
1.3 Evoluția sintezei de textură ………………………….. ………………………….. ………………………….. ………….. 13
1.4 Algoritmul Efros -Freeman ………………………….. ………………………….. ………………………….. ……………. 14
2 Fundamentare teoretică ………………………….. ………………………….. ………………………….. ……………….. 16
2.1 Textura ………………………….. ………………………….. ………………………….. ………………………….. …………. 16
2.1.1 introducere ………………………….. ………………………….. ………………………….. ………………………….. 16
2.1.2 Percepția texturii umane ………………………….. ………………………….. ………………………….. ……….. 18
2.1.3 Arta digitală ………………………….. ………………………….. ………………………….. …………………………. 18
2.2 Sintezea de textură ………………………….. ………………………….. ………………………….. ……………………… 19
2.2.1 Sintezea de textură și aplicații ale acesteia ………………………….. ………………………….. …………… 19
2.2.2 Constrângeri în alegerea blocurilor de pixeli ………………………….. ………………………….. ………… 20
2.2.3 Metode pentru calcularea gradului de asemănare înt re blocuri ………………………….. ………….. 20
2.3 Algoritmi pentru realizarea sintezei de textură ………………………….. ………………………….. …………… 21

2
2.3.1 Prima etapă a sintezei de textură ………………………….. ………………………….. ………………………… 22
2.3.2 A doua etapă a sintezei de textură ………………………….. ………………………….. ………………………. 22
2.3.3 Etapa a treia a sintezei de textură ………………………….. ………………………….. ……………………….. 24
2.4 Transferul de textură ………………………….. ………………………….. ………………………….. …………………… 27
3 Implementarea soluției adoptate ………………………….. ………………………….. ………………………….. ……. 29
3.1 Prima etapă ………………………….. ………………………….. ………………………….. ………………………….. …… 29
3.2 A doua etapă ………………………….. ………………………….. ………………………….. ………………………….. …. 30
3.2.1 Completarea primei linii ………………………….. ………………………….. ………………………….. ………… 30
3.2.2 Completarea primei coloane ………………………….. ………………………….. ………………………….. ….. 32
3.2.3 Completarea zonei centrale ………………………….. ………………………….. ………………………….. …… 33
3.3 A treia etapă ………………………….. ………………………….. ………………………….. …………………………. 35
3.3.1 Completarea primei linii ………………………….. ………………………….. ………………………….. ………… 35
3.3.2 Completarea primei coloane ………………………….. ………………………….. ………………………….. ….. 37
3.3.3 Completarea zonei din mijloc ………………………….. ………………………….. ………………………….. …. 39
3.4 Transfer de textură ………………………….. ………………………….. ………………………….. ……………………… 40
3.5 Tr atarea excepțiilor care apar în procesul de sinteză ………………………….. ………………………….. …… 41
3.5.1 Etapa a doua ………………………….. ………………………….. ………………………….. ………………………… 41
3.5.2 Etapa a treia ………………………….. ………………………….. ………………………….. ………………………… 46
3.6 Recompunere și afișare imagini finale ………………………….. ………………………….. ……………………….. 46
4 Rezultate experimentale ………………………….. ………………………….. ………………………….. ……………….. 47
5 Concluzii ………………………….. ………………………….. ………………………….. ………………………….. …………. 57

3
Summary
1 The current study
1.1 Textures
The thesis in question presents the synthesis and transfer of textures. These topics are often
encountered in the processing of images, video games, digital painting, and also in computer
graphics. It is known that a digital image is represented by pixels. The y represent points like
small squares consecutively located on the screen of any monitor. Pixels are representative for
the basic blocks of an image or a digital display being conceived using geometric coordinates.
With the help of many textures collected from real life, we can display or create new textures.
Textures are represented as the surfaces of visible objects. They can not be described
through a clear definition. The texture is composed of images, that distinguish themselves by
repeated patterns. The texture can be understood as a function describing the spatial variation of
pixel intensities. The texture can be defined by all of its spatial properties, periodic or not, which
belong to a phenomenon that takes place in the plane of the image. It ca n be identified both
among natural and artificial objects. Some examples of textures can be wood, skin, various
materials, plants. The texture encompasses the surface features and the appearance of an object,
its shape, layout, dimensions and, last but no t least, its proportions.
The aim of texture synthesis is to be able to reproduce, using a sample, a new texture that
looks different from a pixel stand point.The starting point is represented by the idea that from the
content of a texture, an image with larger dimensions than the ones framing the original texture
can be created. Nowadays, there are many ways through which textures syntethisis can be made.
Pixel -based or patch -based methods can be used. Patches are fragments of the image that fit
multiple pixels together, ensuring better mobility in the process of creating the image. The
methods that put the base stones in this filed used pixels. But as time progressed, it has been
determined that these methods involve a long processing time and also a low speed. Patch -based
methods increase considerably the processing time, having some advantages over the traditional
methods.
1.2 The development of texture synthesis
The field of research that deals with texture synthesis has flourished over the past tw o
decades leading to the development of many techniques for this particular method. The texture
synthesis can be divided into three categories. The first category includes the synthesis of the
procedural texture, the second one the texture synthesis based on a sample and the last one
represented by the texture synthesis based on images. The procedural texture is created with the
help of a mathematical description, at the expense of some data which are stored directly, or in
other words with the help of an a lgorithm. Using these textures there can be modeled
representations of the surface or volume belonging to natural elements such as marble, metal,
wood. An advantage of this method is the low cost.
Segmentation is one of the fundamental processes that can a ffect the overall performance of
an automated image analysis system. The segmentation of images based on texture is an area of
intense research in recent years, with many algorithms being developed to address this issue.
Methods can be categorized into: region -based methods, line -based methods, or a combination of
the two.
Techniques aimed at image -based modeling help with the creation of geometrical images which
are interesting from a visual point of view. The problem that arises in this context is the p oor
quality of the textures.

4
1.3 The algorithm of Alexei Efros and William Freeman
Texture synthesis is basically used to make a new image using patches extracted from an
input image. There have been developed many algorithms designed to address this topi c. The
most interesting approach regarding this subject is by far the one belonging to Alexei Efros and
William Freeman. The two have developed an algorithm, that is actually named after them,
which performes the synthesis in a nonparametric manner. Their synthesis algorithm consists of
three stages. Each of them complements the previous one. The results differ significantly from
one stage to the next and improvements can be observed. All steps involve the existence of two
images, an input image, the textur e from which the patches are extracted, and an empty image in
which they are going to be inserted. In addition to these stages, which focuses on texture
synthesis, the texture transfer has been pursued as well. This method also extends to the third
stage o f texture synthesis, bringing specific aspects into what the implementation implies. In this
way, some images can be assigned textures other than their original ones, resulting in a new
visual appearance.
2 Theoretical foundation
2.1 Classification of textures
We can imagine textures in the form of temporal indices relating to the properties of certain
surfaces, to scenic depths, to surface orientations etc. The information is used effectively by each
person's visual system in order fo r a scene to be interpreted by performing a segmentation and an
effective texture discrimination. Several researches revealed that the human vision perceives the
texture so that objects can be identified and scenes understood. If we relate to the digital v ision,
we can see that many studies refer to the simulation of human perception of the textures with the
help of computing technologies and mathematical representations of textures so that
segmentation, classification and texture processing are facilitated . The visual system performs a
local spatial frequency analysis on retinal images that can be simulated using a computational
system with the help of a set of filters. In this context, mathematical models that use the
perception of human texture, based on filters, have been discovered.
A texture can be matte or glossy, hard or soft, smooth or rough, coarse or fine. There are
many criteria that textures can be sorted by. Otherwise they may be visual or tactile. Tactile
involves the immediate tangible sensati on of a surface, while the visual ones leave visual
impressions, characteristic for textures, on the human observer, being closely related to the
spatial variations of stimuli such as color, orientation, and intensity encountered in an image.
Textures may fall into several categories. Firstly, they can be natural and artificial. The natural
ones capture elements that can be noticed in everyday life. They can illustrate both elements
found in nature such as sand, sky, water, and phenomena like lightning, rai n, snow. Virtually
they have great diversity and complexity. This determines their classification into regular
textures and stochastic textures.
Regular textures are characterized by small, easily identifiable, regular elements, organized
in the form of pe riodic patterns. Stochastic textures are characterized by the presence of poorly
visible elements, the patterns being quite random.Another classification of textures can be made
according to their homogeneity. We can encounter homogeneous textures, the one s that contain
repeating and ideal structures, producing idealized patterns. Also, there may be weak
homogeneous textures involving local spatial variation of texture elements not leading to precise
repetitions as they should. Finally, non -homogeneous text ures can be remarked as being
characterized by the absence of repeating spatial patterns.

5
Textures can be both 2D and 3D. 3D textures attract an increased interest in the study of
materials having a three -dimensional structure. These types of textures involve quite high costs,
which prevent their use in certain situations. This leads to the preference of 2D textures. As a
matter of fact, these are also used to cover 3D objects, thus helping to build them.
2.2 Texture synthesis
In the case of te xture synthesis conducted on images there are three classes
– texture synthesis by analysis
– pixel based texture synthesis
– patch -based texture synthesis
The present paper implements the latest idea focusing on the size of the patch.
The first of these m ethods is based on texture modeling through statistical constraints. There can
be found a case in which the synthesis is constricted due to the use of the histogram, the
responses belonging to the filter, in this way being done at different scales and orie ntations.
The second alternative involves working with pixels and one of these methods is the
nonparametric Markov chain synthesis algorithm. This is based on ordering pixel values and
then synthesizing a new pixel from a nonparametric representation. T his function was derived
from samples of the input texture by the means of a Gaussian blending model. There have been
made some improvements due to a local recovery algorithm which deals with capturing the
visual features of a texture. The model has recor ded good performances with the ability to
synthesize complex textures.
The third variant was viewed as an improvement compared to the previous version, which
implied excessive calculations when considering the structure of the texture. This time the
workin g time is reduced by increasing the speed of the algorithm.
2.3 Constraints in regard to patch selection
Block sampling is a natural extension of pixel -based methods, it greatly improves texture
synthesis time by using image blocks as units of synthesis. T he first stage of the algorithm
involves the extraction of a first patch randomly. It has to abide some constraints so that the
desired result can be achieved. First of all, it must have a rectangular or square shape. If this
condition is not met, there is a deficiency in delineation of its contour, and some problems will
arise especially regarding future overlaps that will take place. Overlays are parts delimited from
the extracted patches having all the same dimension values. Another problem that requires
special attention related to proper choice of the extracted patch sizes is that of the input image
content. Depending on the texture type, referring to what the image represents, the patches may
be smaller or bigger.
2.4 The transfer of the texture
The t exture transfer stage involves the presence of two images. The first image is called the
source image while the second is called target image. This stage also uses maps of these images.
They are obtained by applying a Gaussian filter to each image, the eff ect being to blur the
details. Basically, this filter eliminates the high frequencies within the image and it is controlled
by the standard deviation value of the Gaussian distribution. In this case the sums of the square
differences imply the presence of a lot more terms. It is also relevant the correspondences of the
chose n overlaps, that have the same coordinates within the image maps. Also, this time, the
insertion of the first block involves the random extraction of 10% of the patches from the source
image. Based on the minimum distance between their pixels and the block located in the same

6
position on the target image map, it will be determined the nearby piece that is going to be
inserted. The filling out of the other blocks are done in the same man ner also taking into account
the specifications that resulted from the third stage of the texture synthesis. The process must go
through the whole image. This step was implemented using two iterations. As the number of
iterations increases, the transfer of the texture gets finer. Within each iteration, the size of the
patch is divided by 3. The texture transfer essentially involves the reconstruction of a texture.
3 Implementation of the chosen solution
3.1 The first stage of the synthesis
The first stage starts by randomly selecting a patch to be inserted into the output image. The
size of this block is important, as it depends on the content of the texture illustrated. If it contains
small details then the patch must be large enough to fit them so t hat the final result is as large as
the input texture. If the texture is without details, then the surrounding area may have a variable
length, without the texture being damaged. The next patch is drawn out randomly and is inserted
next to the other. This stage does not impose any restrictions. Blocks are randomly drawn out
and stacked one by one in the output image. The results obtained are not very satisfactory, with
the possibility that two adjacent regions do not resemble each other.

Figure 1. Overlay between two patches
3.2 Step 2 of the synthesis
The second stage brings with it visual improvements. This imposes a number of restrictions.
In addition to the size of the patch, it involves reading the image in three directions. Each such
scroll brings with it a kind of overlap between the patches. The reading of the first row implies a
vertical overlay. A horizontal overlap occurs when passing the first column, and finally a L –
shaped overlay occurs in the middle area. Now a parameter is used to c ount the output image
size, counting the amount of patches found on a line/column .

Figure 2. Vertical overlay Figure 3. Horizontal overlay Figure 4. L -shaped overlay

7
After randomly removing a patch and pasting it to the first position, the random extraction of
10% candidate patches occurs. At this stage the blocks are to be overlaid.The overlaying value
represents 1/6 of the full size of a patch. Overlays of randomly drawn blocks are compared to
the overlaying of the completed patch and de termine the minimum distance between their
pixels. This is done by calculating the sum of the square differences. The pixel for which the
lowest value of the distance is recorded is to be completed. Similarly, the entire line is being
scrolled, and a sp ecial case aimed at completing the last patch within the image. If there is not
enough space to insert an entire block, only the required portion, calculated based on a
dimension whose dimension occurs within the dimensioning that takes place, is drawn. For the
first column, the reasoning is similar, only that this time the overlapping is horizontal and there
is present the exception from the final. For the central area, L -shaped overlays are determined
based on the concatenation of the horizontal overla y with the vertical overlay. And this time the
image overlays with the already patched patch portion where the candidate patch is to be
inserted. In the final image, patches are inserted but not entirely, and overlaying is removed.
The end result brings significant improvements in the transitions that take place between
neighbors.
3.3 Step 3 of the synthesis
The third step is largely based on the same reasoning, but this time, the calculation of a
optimally chosen path that separates the patches is pres ent. The overlaying pieces are delineated
based on a path that must be computed using algorithms. This determines the value of the
minimum error between two consecutive blocks. This is also done for the crossings that take
place in the first column only that this time the calculation of the average path undergoes some
changes. The central area involves determining firstly a vertical path followed by a horizontal
one individually for each patch to be extracted. The image obtained in the end is much bett er
synthesized, since the joints between the patches are made with a much higher accuracy. If the
parameters involved are chosen correctly, the result is not visually traversed by the processing
that occurred.

Figure 5. Determination of the
path for vertical overlapping Figure 6. Determination of the
path for horizontal
overlapping Figure 7. Determination of L –
shaped overlap path
3.4 Methods for calculating the degree of similarity between patches
There are three methods used to calculate th e degree of similarity between patches:
• the Euclidian distance
• the square differences
• the normalized cross -correlation
The Euclidean distance is the resulted distance between two points, expressed in cartesian
coordinates. Practically it returns the length value of the segment that links the two points.

8
The sum of the square differences is one of the dimensions based on the pixel difference
between the two portions of the image that are going to be compared. This process calculates the
difference betw een regions, which is performed individually for each pixel, resulting in a new
matrix filled with new values. This is raised to square, and then the sum of the elements on each
of the lines is made, then the sum of the elements on each column, thus reachi ng a single value.
This method determines the measure of similarity.
The value of normalized intercorelation is always chosen as a measure of resemblance
because of the robustness it offers. Its computation is instead more complex because makes a
compariso n with the determiniatation of the size which was previously presented.
4 Experimental results
All stages of the project are implemented within an interface developed with GUIDE. This
allows the individual testing of each step, parameter settings ensuring a good mobility for the
user. The interface has “P ush Buttons ” which provide the acces to each of the steps, “P op-up
Menu ” through which the values can be changed for the purpose of testing multiple situations.
There are also “ Text Buttons ” which indica te the functions of each part of the interface. Also the
“Axis" elements help display the images as they are chosen by the user in order to be checked.
The entire code is integrated into the interface thorugh the “C allback ” fuctions coresponding to
each bu tton. The results are obtained by modifying several parameters.

Figure 7. Project interface
The following ilustrates the results of the three stages of the synthesis applied over a texture,
in which we can observe the differences that occur when the valu es for the parameters are kept
from one stage to the other. The texture transfer results will also be included.

9

Figure 8. Results of Stage 1 Texture Synthesis

Figure 9. Stage 2 Results of the texture synthesis

10

Figure 10. Step 3 Results of the texture synthesis

Figure 11. Results of the texture transfer

11
Planificarea activității

12
1 Stadiul actual
1.1 Pixelii și t extura
Este cunoscut faptul că o imagine în format digital este reprezentată prin intermediul
pixelilor. Ei reprezintă puncte asemenea unor pătrate mici poziționate consecutiv pe ecranul unui
monitor. Aceștia sunt considerați a fi blocurile de bază ale unei imagi ni sau a le unei afișări
digitale fiind realizați utilizând coordonate geometrice. În raport cu monitorul de afișare și placa
grafică, dimensiunea, cantitatea și culoarea combinației de pixeli sunt variabile măsurându -se în
termeni de rezoluție ai afișajulu i. Fiecare dintre pixeli prezintă o adresă logică unică, dispunând
de o dimensiune pe 8 biți sau mai mult în cadrul dispozitivelor pentru afișare de vârf.
Pixelii sunt unit ățile care prezintă capacitatea de a proiecta milioane de culori diferite.
Pixelii unei imagini în format digital reprezintă valori RGB, trei numere reprezentate pe câte opt
biți. Fiecare dintre pixeli are aceeași dimensiune, pixelul fiind de fapt porțiunea colorată dintre
liniile grilei, întrucât imaginea este reprezentată prin intermediul unor linii și ale unor coloane.
[1]
Prin dispunerea lor într -o imagine, pixelii pot alc ătui o textură. Aceasta poate descrie o
sprafață culeasă din realitate și este redată pe un calculator reproducând bucăți din suprafețe
diverse. Ea nu conține obiecte explicite. Texturile pot fi reprezentate at ât 2D c ât și 3D. În cazul
texturilor 3D se pornește de la structura tridimensională a obiectelor propriu -zise care este mai
apoi îmbrăcată folosind texturile 2D.
Texturile 2D sunt privite asemenea unor elemente care schimbă aspectul unor obiecte sau
imagini, oferind informații despre aranjamentul intensit ăților sau culorilor respectivelor regiuni.
Textura este o caracteristic ă foarte importantă a unei imagini digitale. O suprafață texturată din
cadrul unei imagini este caracterizată printr -o distribuție spațială neun iformă a intensit ăților
imaginii. Sinteza texturilor apare în contextul în care se pune problema realizării unei imagini de
mari dimensiuni pornind de la o imagine a cărei dimesnsiune este considerabil mai mică. Practic
dintr -un eșantion de intrare se cree ază imaginea nouă care este asem ănătoare din punct de vedere
vizual cu intrarea, nefiind o copie a acesteia. La început modelele relativ ad -hoc bazate pe
câmpuri aleatoare Markov au stat la baza algoritmilor de sinteză de succes ai texturii. [1]
1.2 Problem atica lucrării
Conținutul lucrării abordează problema sintezei de textură, subiect des întâlnit în prelucrarea
imaginilor, pictură digitală, jocuri video și în domeniul graficii pe calculator care de altfel
aparține domeniilor de cercetare nou dezvoltate. Totodată abordează și problematica transferului
de textură asupra unor imagini, acțiune ce constă în redarea unei imagin i având o textură preluată
din altă imagine. Sinteza își are scopul în cadrul realizării și prelucrării conținutului digital
facilitând buna creare și dezvoltarea acestuia.
Algoritmul Efros -Freeman care urmează să fie dezvoltat în cadrul conținutului lucrării
reprezintă una dintre abordările celebre din cadrul acestui subiect , generând texturi noi într -o
manieră neparametrică, fiind preluate noi valori din exemplul de intrare. Practic dintr -o mostră
de textură provenită din imaginea de intrare se generează imagini noi care la nivel perceptiv sunt
echivalente cu intrarea. Această metodă se bazează pe blocu ri fiind una dintre meto dele
neparametrice. Prin intermediul ei se calculează o imagine de ieșire prin blocurile preluate din
cadrul eșantionului de intrare. Noutatea și lucrul care aduce îmbun ătățiri considerabile este
reprezentat ă prin tehnica de îmbinare cu ajutorul căreia se reușește reducerea semnificativă a
efectului vizual produs prin intermediu l tranzi ției dintre blocuri. În această lucrare se vor detalia
algoritmii de sintez ă de textură de asemenea fiind inclus și algoritmul tehnicii se transfer de
textură. Dacă vrem să vedem dezavantajele oferite de acest algoritm se poate afirma că

13
sintetizorul nu reușește păstrarea structurilor oferite de exemplar fară ca utilizatorul s ă specifice
informații suplimentare referitoare la caracteristici. Acest tip de sinteză este mai indicat în
captarea și păstrarea unor mode le structurale. Metoda impune algoritmi relativ lenți în ceea ce
privește aranjarea și îmb inarea patch -urilor.[ 2]
1.3 Evoluția sintez ei de textură
Pentru obținerea sintezei de textură exist ă desigur mai multe metode care au ajuns să fie
implementate în decursul mai multor ani de cercetare. Acestea sunt : sintez ă de textură bazată pe
pixeli , caz în care textura este descrisă de statisticile privitoare la nivelul intensit ăților prezente
sau de c el al distribuției nivelelor de gri , sintez ă de textură bazată pe patch -uri și sintez ă de
textur ă bazată pe trăsături locale. Recent au fost dezvoltate metode non -parametrice de
eșantionare pentru obținerea unei sinteze de textură realizată cât mai rapid. Metodele acestea
sunt legate de analiza non -parametrică în statistici, lucru care permite analiza datelor în lipsa
unei cunoașteri clare a distribuției ce stă la baza acestora.
Originile sintezei de textur ă stau sub semnul lui Kris Popat [3], încă din an ul 1993. El a
dezvoltat un model de probabilitate bazat pe clustere, având ca destina ție sinteza , comprimarea și
clasificarea texturii. Acest algoritm poate fi etichetat asemeni unui algoritm de sinteză a lan țului
Markov neparametric. Scopul acestui mecanism este de a ordona pixelii iar mai apoi de a
sintetiza un nou pixel din cadrul unei reprezentări nonparametrice a func ției de probabilitate
condi ționată derivată din e șantioane ale texturii de intrare. A fost propusă folosirea e șantionării
stochasti ce a func ției de probabilitate condi ționată în vederea comprimării ei cu ajutorul unui set
de nuclee gaussi ene. În acest fel acest tip de comprimare permite căutarea rapidă totodată
limitând ordinea vecinătății care poate fi modelată cu success. Defectul a cestui algoritm era
reprezentat de cauzalitate. În contextu l în care pixelii din trecut deviază mult prea departe fa ță de
aceia din imaginea de intrare, acest algoritm nu mai funcționează în parametri normali astfel c ă
putem concluziona prin a spune c ă sinteza realizată prin intermediul acestei metode se rezum ă
doar la suprafețele mari.[3]
David Heeger și James Bergen [4], doi ani mai târziu dezvoltă sinteza de textură bazată pe
piramide. Practic se pornește de la o imagine de intrare digitizată și de la u na cu zgomot, de
obicei tipul de zgomot fiind alb uniform. Acest algoritm intervine asupra zgomotului f ăcându-l
să pară asemenea texturii de intrare, utilizând descompunerea în piramide și informațiile
conținute în histogramele celor două imagini. Se folosesc două tipuri de piramide, cea
direcționa lă și cea Laplaciană. Piramida Laplaciană se obține utilizând două operații de bază și
anume reducerea si extinderea funcționării.
Prima dintre acestea folosește un filtru trece -jos și apoi subeșantioane avân d un factor de doi
pentru fiecare dimensiune. Cealaltă operație, de extindere are la bază completarea cu zerouri
corespunzătoare liniilor și respectiv coloanelor eliminate în cadrul pasului anterior aplicând mai
apoi același filtru trece -jos. Se ajunge în acest fel la un nivel al piramidei format din două
imagini, o imagine filtrată trece sus și o imagine de trecere joasă. În final se ajunge la o
multitudine de imagini de sub -bandă piramidală, ele având mărimi diferite datorită operațiilor de
subeșantionar e. Un lucru cunoscut este acela că imaginile mai mici corespund benzilor mai mici
de frecvență. Esențial este că întotdeauna imaginea originală se poate recupera din reprezentarea
piramidală prin inversarea operațiilor. [4]
Cât despre piramida direcționa lă, aceasta este folosită în cadrul sintezei texturilor
anizotropice, impunând descompunerea imaginii după mai multe benzi de frecvență. Mai apoi
fiecare bandă de frecvență urmează a fi împărțită intr -un set de benzi. Numărul pixelilor este cu
mult mai mare decât cel al imaginii de intrare. Evitarea aliasing -ului reprezintă o situație critică
întrucât această metodă, la care se face referire, tratează fiecare sub -bandă în mod independent.
Piramida se auto -inversează, filtrele de pe partea de sinteză rămâ n aceleași ca și cele de pe partea
de analiză asigurându -se astfel reconstrucția. În acest fel calculul este unul eficient . [4]

14
Metodele au continuat a fi descoperite și demonstrate din dorința de a se obține rezultate cu o
mai mare ușurință. Ca urmare în anul 1999 Alexei Efros și William Freeman [3] au reinterpretat
studiul lui Popat [3]. Aceștia au pornit de la inițializarea unei texturi sintetice prin intermediul
unei secțiuni din imaginea model poziționat ă în mod arbitrar, acest lucru schimbând doar or dinea
în care pixelii au fost sintetizați. De asemnea a fost cazul unei abordări secvențiale neparametrice
a tipului de lanț Markov propus de Popat, întampinându -se probleme inerente în ceea ce privește
stabilitatea. [3]
În anul 2001 Lin Liang [5] dezvoltă un algoritm menit să compenseze minusurile pe care cel
prezentat anterior le presupune. Acesta reușește să realizeze sinteza texturii în timp real av ând la
bază tot blocurile , asemeni algoritmului Efros -Freeman. Lucrarea evidențiază în mod clar
dezavantajele pe care lanțul neparametric Markov le impune. Soluția pe care acesta o aduce este
cea de a copia p atch-ul întreg în locul copierii indviduale a pixelilor, lucru care conduce c ătre o
creștere semnificativă a vitezei din timpul sintezei de textu ră. Se folosește de cuantificarea
vectorială structurată pe arbore. Acest algoritm funcționează bine raportându -ne la o mare
varietate de texturi implicând o variație de la regulat la stochastic. Eșantionarea patch -urilor se
realizează în raport cu o estim are non -parametrică a funcției locale de densitate condiționată,
fiind astfel evitate caracteristicile de neconcordanță dintre limitele patch -urilor. [5]
Tot in 2001 Michael Ashiknmin [6] abordează subiectul sintezei texturilor naturale. Aici se
întâlnește prima soluție reală a mecanismului care necesit ă foarte mult timp, acela de căutare
exhaustivă a celui mai apropiat vecin, împiedicându -se pierderea calit ății. Această metodă
asigură o creștere a calit ății sintezei și totodat ă a vitezei acesteia. Ashiknmi n propune o nouă
modalitate de determinare a măsurii celui mai apropiat vecin, alta în afara celei de distanță
Manhatten sau Euclid iană întrucât este de părere că acestea nu ar fi cele mai eficiente pentru a
testa similitudinea perceptuală. [6]
În același an Alexei Efros și William Freeman [3] revin asupra problemei tratată anterior și
aduc îmbunatațiri algoritmului dezvoltat într -o primă etapă. Aceștia realizează un pas în avans
întrucât introduc în datele problemei ideea de îmbinare a patch -urilor . În detrimentul amestecului
dintre marginile patch -urilor care se suprapun cu un filtru, aceștia aduc sugestia tăierii și
îmbinării patch -urilor de -a lungul unei linii care impune ca diferența între valorile pixelilor să fie
minimă , etapă abordată și dezvoltată de asemenea în cadrul lucrării de față. [3]
În anul 2003 Andrew Nealen și Marc Alexa [7] dezvoltă sinteza hibridă a texturii.
Algoritmul utilizează patch -uri adaptive pentru a realiza umplerea unei laturi. Suprafețel e sunt
alese în funcție de eroarea de frontieră. Aceast a trebuie să aibă valoare minimă putând fi
calculată rapid prin intermediul transformatei Fourier rapide. Marginile care se suprapun peste
valoarea unui anumit prag manifestă neconcordanțe astfel că ac estea sunt resintetizate. În cazul
utilizării unor patch -ui de mari dimensiuni se constată îmbun ătățirea structurii globale. Se pune
problema existenței unor erori rămase în regiunile suprapuse dar și acestea sunt eliminate prin
utilizarea operatorilor mor fologici. Ei se ocupă de asigurarea unor vecini corespunzători,
suficient de valabili adică lipsiți de erori, pentru fiecare dintre pixeli. [7]
1.4 Algoritmul Efros -Freeman
Algoritmul Efros -Freeman [3] se traduce prin existența a trei etape pentru partea de sinteză a
texturii. Fiecare dintre acestea realizează sinteza asupra unei imagini doar că ele sunt de fapt
consecutive. Etapa urmatoare practic păstrează datele din etapa precedentă venind cu o
îmbun ătățire astfel încat imaginea să nu tr ădeze nicio urm ă de prelucrare, patch -urile fiind intr -o
continuitate. De altfel algoritmii care se bazează pe vecinătate realizează crearea unei noi texturi
determinată de aranjarea texturilor de intrare într -un mod c oerent. Spre deosebire de aceștia,
algoritmii care au la bază constrângeri statistice modelează textura implicând considerațiile
perceptuale și statistice, acest lucru realizându -se în două etape denumite după cum urmează
etapa de analiză și etapa de sinte ză.

15
Lucrare de față abordează de asemenea problema transferului de textură. Practic se pornește
de la două imagini, una dintre acestea este imagine sursă iar cealaltă este numită imagine țintă.
Acest algoritm extinde ultima etap ă din partea de sinteză a t exturii aducând cu sine lucrurile
specifice. Pentru a se putea realiza transferul texturii este necesară sinteza unei imagini prin
intermediul pixelilor imaginii sursă. Rezultatul trebuie să aibă aspectul pe care îl are textura
sursă . Totuși pentru o privire la nivel global acesta trebuie să arate ca și imaginea țintă. Practic
din două imagini trebuie să ob ținem una prin intermediul suprapunerii dintre cele dou ă după
reguli dictate de algoritm. Cea care este suprapusă reprezintă imagine a sursă întrucât din ea
urmează a fi extrase patch -uile ce urmează a fi inserate. Imaginea de la baz ă este numită imagine
țintă, fiind relevantă intrucât la o privire de ansamblu ea trebuie să iasă în eviden ță din punct de
vedere vizual.
De asemenea partea de tr ansfer de textură se poate realiza între dou ă imagini, acest lucru
impicând faptul c ă imaginea țintă este completată în intregime cu informații din imaginea
destinație . Totuși există și varianta în care doar anumite obiecte din imagine primesc o nouă
textu ră, acest lucru nefiind dezvoltat pe larg în lucrarea de faț ă. Acest gen de acțiune vizează
utilizarea unei măști cu ajutorul c ăreia să poată fi identificat direct obiectul a cărei textură trebuie
transferată. În decursul timpului s -au dezvoltat mai mulți algoritmi pentru partea de transfer de
textură aceștia fiind capabili de a produce efecte de stilizare impresionantă.
1.5 Transferul de textură
Trasferul de textură reprezintă o problemă clasică în domeniul graficii de calculator și în cel
al viziunii computerizate. Alex J. Champandard [8] a propus modelul ,,Neural Doodle ”. Acestă
tehnică ține de transformarea măzgăliturilor pictate de utilizator în lucrări de artă plastică prin
intermediul unor e șantioane utilizate. Când acestă metodă se aplică unor imagini cu structuri
complexe, anumite elemente vizuale care aparțin imaginii de stil sunt adesea transferate pe
zonele care nu au relevanță din perspectiva semantică a conținutului imagin ii. Dacă se do rește
obținerea unor rezultate îmbucurătoare atunci utilizatorii trebuie să fie atenți la compoziția și
selecția imaginii de stil întrucât culorile sau texturile de fundal pot crea neplăceri în ceea ce
privește rezultatele obținute în urma transferului de textură, cu precădere în cazul portretelor.
Recent, Ming HsuanYang [9] a reușit să facă transferul efectului de text ce asigură migrarea
efectului din cadrul unei imagini de text stilizată la o imagine de text simplu. În ciuda acestor
lucruri abordările existente par a fi izolate una în raport cu cealaltă din cauz a existenței unor
scenarii d e utilizare specifice. Aspectul comun împărtășit este accela că utilizatorii ar trebui să
poată transfera textura în orice zonă a imaginii sursă. Aaron Hertzman [3] a dezvoltat o soluție
mai generală având denumirea de ,,Image Analogy ”. Totuși din cauza lipsei orientării necesare a
distribuției sructurale, aceasta suferă disloca rea texturii interioare neputând fi păstrate structurile
locale care au o înaltă frecvență. Pictura prin caracteristic ă pune la dispozi ția utilizatorului
utilizarea liniei și a conturului pentru ghidarea transferului texturilor. Acest lucru prezintă
îmbun ătățiri datorate trasării caracteristicilor liniei și a caracteristicilor de zonă , prin utilizarea
pensulei și a instrumentului de umplere separat.
Acești algoritmi au suferit modificări în decursul timpului ei ajungând să fie combinați în
sprijinul obținerii unor rezultate intermediare. Astfel de algoritmi sun t utilizați astăzi în dif erite
programe având ca scop prelucrarea conținutului imag inilor utilizate . Câteva dintre aplicațiile
prezente la momentul actual și care servesc ca obiect de studiu sunt A adobe Illustrator , Adobe
Photoshop , Gimp și lista poate continua. Prin intermediul acestor programe utilizatorii pot jongla
cu imaginile realizând o mult itudine de acțiuni asupra lor.

16
2 Fundamentare teoretică
2.1 Textura
2.1.1 introducere
O textură poate fi considerată ca fiind orice suprafață a oricărui obiect vizibil. Texturile pot
fi identificate atât în cadrul obiectelor naturale cât și în cadrul celor artif iciale cum sunt cele din
Figura 2. Ele pot fi și asemenea acelora ca pielea, lemnul, plantele, diversele materiale. În mare
putem afirma c ă o textură face referire la caracteristicile de suprafață și la aspectul unui obiect ,
conferit de form a, dimensiunea , dispunerea, densitatea și proporția p ărților sale. Putem descrie o
textură ca fiind dură sau netedă, tare sau moale, mată s au lucioasă, grosiră sau fină, etc. Putem
împărți text urile în două categorii : texturi vizuale și tactile. Cele tactile fac referire la senzația
tangibilă imediată a unei suprafețe. Texturile vizuale reliefează impresia vizuală pe care texturile
reușesc să o creeze observatorului uman, legate fiind de variațiile spațiale locale ale stimulilor
simpli cum ar fi orientarea, culoarea și intensitatea din cadrul unei imagini.
Făcând referire la texturi le naturale , câteva exemple de acest fel fiind ilustrate în Figura 1 ,
acestea indică elemente ce pot fi observate în viața de zi cu zi . Ele pot i nclude atât elemente din
natură cum ar fi apa, cerul, nisipul sau pot încadra fenomene precum ploaia, fulgerele. Cu alte
cuvinte aceste texturi dispun de o ma re diversitate și complexitate astfel că pot fi clasificate într –
o primă ordine în: texturi regulate și texturi stochastice. Trecerea de la regulat la stochastic se
poate observa în Figura 3. Texturile regulate sunt caracterizate prin elemente mici, regulate, ușor
de identificat organizate sub forma unor modele periodice . Texturi le stochastice se
caracteriz ează prin prezența unor elemente slab vizibile, modelele fiind destul de aleatoare .
Texturile de acest gen pot f i observate în Figura 4 .
În continuare vor fi ilustrate câteva imagini care prezintă texturi pentru a putea percepe mai
bine diferențele din punct de vedere vizual care stau între diferitele tipuri dintre ele.

Figura 1. Texturi naturale [10]

17
Figura 2. Texturi artificiale regulate [10]

Figura 3. T recerea de la texturi regulate la texturi stochastice [11]

Figura 4. Texturi stochastice [10]

Figura 5. Texturi slab -omogene [10]

O altă clasificare a texturilor se poate realiza în funcție de gradul de omogenitate al acestora.
Putem întâlni texturi omogene, acele texturi ce conțin structuri care se repetă, ideale, producând
modele idealizate. De asemenea pot exista texturi slab -omog ene care implică variația spațială

18
locală a elementelor de textură neconducând la repetitivități precise așa cum ar trebui . Texturile
slab-omogene se pot observa în Figura 5. În final pot fi remarcate și texturile neomogene ele
fiind caracterizate prin absența repetării unor modele spațiale .
Se consideră că omogenitatea spațială reprezintă una dintre cele mai importante proprietăți
ale unei texturi dacă nu chiar cea mai importantă. Dacă ne gândim din punc t de vedere statistic
această proprietate se traduce prin staționaritate statistică, adică prin faptul că anumite statistici
ale semnalelor fiecărei suprafețe de textură prezintă aceleași valori. Auto -similitudinea este
automat subînțeleasă dacă ne gândim la această proprietate. Practic prin intermediul acelorași
statistici ale semnalelor sunt reprezentate modele cu diferite măriri unele dintre ele chiar diferite.
Non-omogenitatea locală poate de asemenea a fi întâlnită în cadrul texturilor. Acest lucru se
traduce prin pornirea de la o omogenitate destul de strictă intr -o oarecare proporție pe o anumită
regiune din imagine. Dacă am considera o imagine care ilustrează o mulțime de frunze, ne putem
imagina faptul că fiecare dintre acestea prezintă diferențe în comparație cu celelalte dar la o
privire de ansamblu se constată că ele manifestă o uniformitate spațială și totodata omogenitate
globală. [10]
2.1.2 Percepția texturii u man e
Ne putem imagina texturile sub forma unor indicii temporale referitoare la proprietățile
anumitor suprafețe, la adâncimile scenice, la orientările spre suprafață, etc. Informațiile sunt
utilizate în mod eficient de către sistemul vizual al fiec ărei persoane pentru ca o scenă să poată fi
interpretată efectuându -se o segmentare și o discriminare eficientă a texturii. În urma mai multor
cercetări s -a putut constata că viziunea umană percepe textura astfel încât cu ajutorul acesteia se
pot identifica obiectele iar scenele pot fi înțelese. Neuroștiința și psihofizica rep rezintă
disciplinele care implic ă textura în cadrul proceselor neuronale care contribuie la perceperea
vizuală intervenind în procesul segregării și înțelegerii mecanismelor de detectare a texturilor.
[10]
Dacă ne raportăm la viziunea digitală, putem constata că numeroasele studii se referă la
simularea perceperii texturii umane cu ajutorul tehnologiilor de calcul și a reprezentărilor
matematice corespunzătoare texturilor astfel încât segmentarea, clasificar ea și prelucrarea
texturilor să fie facilitată. Cercetările au demonstrat că sistemul vizual realizează o analiză a
frecvenței spațiale locale pe imagini retinale care pot fi simulate cu ajutorul unui sistem
computațional folosindu -se de o un set de filtre . Astfel s -au descoperit modele matematice care
realizează percepția texturii umane, bazate pe filtre. În acest context James Bergen [1 2] susține
că o textură poate fi descompusă în mai multe imagini de sub -bandă cu ajutorul unui set de filtre
liniare poz iționate la scale și orientări diferite. Fiecare dintre imaginile sub -bandă implică
anumite caracteristici ale texturii. Se poate constata astfel că o textură este descrisă cu ajutorul
unei distribuții empirice a mărimii răspunsurilor filtrului. Teoria tex turilor a reușit să conducă la
o abordare structurală care se ocupă de extragerea primitivelor de textură similar trasăturilor
locale necesare descrierii texturii. Astfel în decursul timpului au rezultat metode care descompun
o textură cu ajutorul filtrelo r și reușesc să extindă analiza texturii în domeniul frecvențelo r.[12]
2.1.3 Arta digitală
Arta digitală este o modalitate de realizare a picturilor în format digital concepută pentru a
reda culorile , formele, texturile și alte caracteristici într-un mod cât mai apropiat realității. Astfel
sunt create ilustrații digitale cu ajutorul unui software de pictură care utilizează pensule
asemănătoare picturii tradiționale. În anul 1990 a luat naștere arta picturii digitale cu ajutorul
aplicării tehnologiei computerizate. Arta digitală este utilizată pentru acoperirea suprafețelor in
format 2D, 3D și 4D atât în publicitate cât și în film, jocuri pe calculator, reviste și de asemenea
cărți. Această metodă a fost îmbrățișată întrucât dispun e de flexibilitatea modificării și anulării

19
anumitor operațiuni. Aduce după ea costuri destul de sc ăzute, oferă posibilitate stocării unor
rezultate intermediare și chiar a vizualizării unor rezultate mai vechi care au fost obținute.
În această tehnică se pune mult accent asupra pensulei utilizate în cadrul realizării picturii,
aceasta reușind să contureze practic într -o variantă cât mai naturală ilustrațiile.
Acțiunea instrumentelor reale este înlocuit ă de linii de cod corespunzătoare. El dezvoltă
câteva tehnici cu ajutorul cărora face ca pixelii să semene cu acuarela. El produce efectul de
estompare astfel încât mai multe scene să poată fi combinate . [12] Legătura dintre această
tehnică și subiectul luc rarii este aceea că prin intermediul unor astfel de instrumente pot fi
reproduse texturi cu o foarte bună preciezie. Ele sunt create cu scopul de a acoperi anumite
suprafețe. Pot fi folosite și ca texturi 2D având ca scop acoperirea unor obiecte tridimens ionale.
Texturile 3D atrag după ele un interes crescut cu precădere în ceea ce privește studiul
materialelor având o structură tridimensională. Acest gen de texturi implică anumite costuri
destul de mari fapt ce împiedică utilizarea lor în anumite probleme . Dacă există structuri ilustrate
în 3D pentru care resursele financiare nu sunt suficiente se recurge la înregstrarea acestora în 2D.
În aceste condiții în care o structur ă 2D trebuie să aibă capacitatea de a permite întelegerea
iformațiilor pe care forma tul tridimensional îl implică, are ca scop îmbunătațirea în țelegerii
realității fizice a materialului. Acest lucru stârnește curiozitate în ceea ce privește textura 2D.
2.2 Sintezea de textură
2.2.1 Sinteze a de textură și aplicații ale acesteia
Domeniul abordat, al sintezei de textură este dinamic implicând existența unor aplicații
pentru compresia imaginii, extrapolarea acesteia, tehnici de inpaiting fiind de asemenea prezent
și în alte domenii cum ar fi cel al editării video sau în descrierea geometr ică a unei suprafețe. În
decursul timpului au existat numeroase tehnici de sinteză ele fiind de obicei 2D. Acestea vor
trebui adaptate modelării structurilor care prezintă caracteristica volumului asemenea celor
obținute prin intermediul tehnicilor imagistice 3D. Alte domenii în care sinteza texturilor
activează sunt acelea ale imagisticii medicale, ale imagisticii seismice, în tomografie și de
asemenea în știința materialelor. Acestea sunt doar cateva dintre exemple.
În cadrul sintezei de texturi realizate a supra imaginilor sunt inregistrate trei clase:
– sinteza de textura prin analiza
– sinteza de txturi bazata pe pixeli
– sinteza de texturi bazata pe blocuri
Lucrarea de fata implemeteaza ultima idee accentul cazand pe dimensiunea blocurilor.
Prima dintre metodele de aici are la bază modelarea texturii prin intermediul constrangerilor
statistice. O nouă textură este sintetizată în așa fel încât se impune utilizarea unui set de
constrângeri statistice ale unei imagini de intrare asupra imaginii de ie șire. Se poate intâlni cazul
în care sinteza este constrânsă din cauza utilizării histogramei răspunsurilor aparținând filtrului,
în acest fel fiind realizată la scări și orientări diferite.
A doua variant ă presupune lucrul cu pixeli metoda fiind reprezentată de algoritmul de
sinteza a lanțului Markov neparametric. Aceasta se bazeaza pe ordonarea valorilor pixelilor iar
mai apoi sintetizarea unui nou pixel din cadrul unei reprezentări nonparametrice. Func ția aceasta
a derivat din eșantioane ale tex turii de intrare prin intermediul unui model de amestec Gaussian.
Au fost aduse îmbun ătățiri datorate unui algoritm de refacere local ă acesta ocupându -se de
captarea caracteristicilor vizuale care apar țin unei texturi. Modelul a înregistrat performan țe bun e
reușind să sintetizeze texturi complexe.
A treia variant ă a fost privita ca o îmbun ătățire în compara ție cu varianta precedent ă. Aceea
presupunea calcule în exces atunci c ând se avea în vedere structura texturii. De aceast ă dată se
reduce timpul de luc ru cresc ând viteza de parcurgere a algoritmului.

20
2.2.2 Constrângeri în alegerea blocurilor de pixeli
În ceea ce privește procesarea digitală a imaginilor potrivirile dintre blocuri constituie o
etapă în vederea determinării locației sub -imaginii în interiorul unei alte imagini. Ceea ce numim
sub-imagine, practic șablonul are de cele mai multe ori o asemănare cu o parte a imaginii. Acest
șablon poate prezenta aceeași dimensiune, culo ri sau forme, el putând de asemenea s ă fie și
difer it. Acest procedeu de potrivire dintre șabloane este utilizat în mod frecvent în cadrul
înregistrării imaginilor și al recunoașterii obiectelor.
Eșantionarea blocurilor reprezintă o extensie firească a m etodelor care se bazează pe pixeli,
ea îmbunătățește considerabil timpul de sinteză al texturii prin utilizarea blocurilor de imagini în
calitate de unități ale sintezei. Prima dintre etapele algoritmului presupune mai înt âi extragerea
primului patch în mo d aleator. Acesta trebuie să respecte c âteva constrângeri astfel încât să se
poată obține rezultatul dorit. În primul rând trebuie să aibă o formă dreptunghiulară sau p ătrată.
Dacă această condiție nu este respectată se ajunge la o deficiență în ceea ce p rivește
delimitarea conturului său și în mod special apar probleme în ceea ce privește vi itoarele
suprapuneri ce vor avea loc. Suprapunerile sunt părți delimitate din patch -urile extrase având
toate aceleași valori ale dimensiunilor. O altă problemă care i mplică o aten ție special ă în ceea ce
privește alegerea corespunzătoare a dimensiunilor patch -urilor extrase este aceea a conținutului
imaginii de intrare. În funcție de tipul texturii, referindu -ne în acest caz la imaginea pe care
aceasta o reprezint ă, blocurile pot avea dimensiuni mai mici sau mai mari.
Dacă textura este una cu multe detalii acestea fiind reprezentate de asemenea la o scală mică
atunci este de preferat ca dimensiunea suprafeței să fie mică. Astfel informația cuprinsă în
fiecare dintre blocu ri va fi una relevantă în cadrul sinezei, accentul punându -se pe detaliile care
urmează a fi reproduse în imaginea de ieșire. În acest mod rezultatul final din punct de vedere
vizual va fi unul compact, între blocur i putându -se stabi li o continuitate și o conexiune
cromatică. Dacă imaginea de intrare are detalii afișate într-o dimensiune mai mare atunci blocul
trebuie ales de dimensiuni mai mari astfel încât elementele de conținut să se poată îmbina în
cadrul reprezentării finale.
2.2.3 Metode pentru calcularea gradului de asemănare între blocuri
2.2.3.1 Distanța Euclidiană
Calcularea acestei distanțe e ste importantă în ceea ce privește găsirea blocului imediat
următor . Ea se aplică asupra suprafețelor de suprapunere a blocului completat și reaspectiv a
celui candidat. Distanța Euclidiană reprezintă distanța dintre două puncte obținută în coordonate
carteziene. Practic ea returnează valoarea lungimii segmentului de drea ptă care unește cele două
puncte. Dacă luăm în considerare două puncte din spațiul euclidian n -dimensional, 𝑎 și 𝑏 având
𝑎=(𝑎1, 𝑎2,… 𝑎𝑛) iar 𝑏=(𝑏1,𝑏2,… 𝑏𝑛) rezultă că distanța de la punctul 𝑎 la punctul 𝑏 sau de
la punctul 𝑏 la punctul 𝑎 este dată ca rezultat al apicării ecuației (1).
𝑑(𝑎,𝑏)=𝑑(𝑏,𝑎)=√(𝑎1−𝑏1)2+(𝑎12−𝑏2)2+⋯+(𝑎𝑛−𝑏𝑛)2=√∑(𝑎𝑖−𝑏𝑖)2𝑛
𝑖=1 (1)
2.2.3.2 Suma diferențelor patrate (SSD)
Suma diferențelor p ătrate (SSD – Sum of Squared Differences ) reprezintă una dintre
mărimile care are la bază diferența dintre pixeli i a două matrici care urmează a fi comparate.
Acest procedeu calculează diferența dintre regiuni, operație realizată în mod individual pentru
fiecare pixel, rezultând astfel o nouă matrice completată cu noi valori. Aceasta este ridicată la
patrat și după aceea se realizează suma elementelor de pe fiecare linie, ulterior suma elementelor

21
de pe fiecare coloan ă, ajungând astfel la o singură valoare. Prin această metodă se determină
măsura similarității. Punctul de potrivire se poate determina prin luarea în considerare a
localizării valorii minime în cadrul matricei imaginii. În mod obișnuit suma diferențelor pătrate
se folosește așa cum arată formula numărul 2.

∬ (𝑆𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 −𝑆𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 )2
𝐴 (2)

Dacă această ecuație este discretizată atunci forma ei va fi cea ilustrata in formula cu
numărul 3.

În acest caz 𝑀 reprezintă dimensiunea liniilor din cadrul suprapunerilor, cele două având
aceleași dimensiuni, iar 𝑁 reprezintă dimensiunea coloanelor.
2.2.3.3 Intercorelația normalizată (NCC – Normalized Cross Correlation)
În locul calculării sumei diferențelor pătra te se poate considera ca alternativă determinarea
valorii intercorelației normalizate. Aceasta este utilizată ca măsură de asemănare din cauza
robusteții pe care o oferă. Calculul acesteia este în schimb mai complex făcând o comparație cu
determinarea mări mii anterior prezentată. El implică numeroase operații de multiplicare, divizare
și rădăcină pătrată. Costul acesta este derivat din cadrul inegalit ății lui Cauchy Schwarz.
Raportându -ne la un punct de vedere tehnic NCC găsește punctul de corespondență din tre șablon
și imagine prin căutarea locației valorii maxime în cadrul matricei imaginii. Această valoare
poate fi exprimată cu ajutorul ecuației ( 4). [14]

𝑁𝐶𝐶 (𝑢,𝑣)=∬ 𝑓(𝑥,𝑦)∗𝑔(𝑥+𝑢, 𝑦+𝑢)𝑑𝑥𝑑𝑦𝐴
[∬ 𝑓2
𝐴(𝑥,𝑦) 𝑑𝑥 𝑑𝑦∗∬ 𝑔2
𝐴(𝑥+𝑢,𝑦+𝑣) 𝑑𝑥 𝑑𝑦]1/2 (4)

Convertind ecuația în format digital obținem ecuația ( 5):

În acest caz u și v reprezintă variabilele de deplasare a componentelor de -a lungul axelor 𝑥 și
𝑦. Termenul de la numărător constituie o intercorelație între imagine și șablon. Corelația nu
poate fi utilizată drept măsură a gradului de asemănare, întrucât aceasta produc e rezultate
potrivite pentru șablon, astfel că termenul de la numitor este folosit drept corelație normalizată
cu potrivirea corectă însușită. Totuși termenul fiind constant nu modifică ecuația în vreun fel și
prin urmare nu este folosit în cazul acesteia. [14], [15], [16]
2.3 Algoritmi pentru realizarea sintezei de textură
În continuare va fi abordată metoda bazată pe blocuri extrase în mod aleator din imaginea de
intare, acestea urmând a fi inserate în cea de ieșire în baza restricțiilor pe care fiecare dintre
metodele abordate le aduce cu sine. 𝑆𝑆𝐷 (𝑖,𝑗)=∑∑(𝑆𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 (𝑖,𝑗)−𝑆𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 (𝑖,𝑗))2𝑁
𝑗=0𝑀
𝑖=0 (3)
𝑁𝐶𝐶 (𝑢,𝑣)=∑ ∑[𝑓(𝑖,𝑗)∗𝑔(𝑢+𝑖,𝑣+𝑗)] 𝑖,𝑗 𝜖 𝐴
[∑ ∑𝑔2(𝑢+𝑖,𝑣+𝑖)] 𝑖,𝑗 𝜖 𝐴1/2 (5)

22
2.3.1 Prima etapă a sintezei de textură
În acest ă etapă se urmărește extragerea aleato are a unor patch -uri de dimensiune aleasă
arbitrar ținând cont de câteva constrângeri , ce urmează a fi inserate în i maginea de ieșire. Se
consideră o imagine de intrare, imaginea originală și o alta imagine de ieșire, cea care urmează a
fi sintetizată . Practic este vorba despre imaginea care urmează sa fie încărcată cu blocurile
extrase . Un bloc are în componență valori cunoscute ale pixelilor. Aceste suprafețe sunt alese
mai mult sau mai puțin asem ănător în contextul în care ele sunt selectate aleator . Acestea se
completează la rând prin al ăturare neținând cont de nicio altă restricție. Rezultatul acest ei prime
etape nu este tocmai cel mai bun, întrucât îmbinările dintre blocuri pot fi sesizate.

Figura 6. Alipirea blocurilor pentru etapa 1

În Figura 6 este ilustrată modalitatea de lipire a suprafețelor în cadrul imaginii de ieșire. Se
poate astfel observa că sunt pur simplu lipite unul langă celălalt.
2.3.2 A doua etapă a sintezei de textură
În cea de -a doua etapă se ține cont de suprapunerile amintite mai sus. Abia aici ele intervin și
au rol de creș tere a șanselor ca patch -ul imediat urm ător unuia deja completat să se asemene cu
acesta într -o proporție cât mai mare. De această dată imaginea de ieșire se parcurge pe trei
direcții, ele fiind reprezentate de prima linie, prima coloan ă și porțiunea din mijloc. Fiecare
dintre aceste parcurgeri aduce cu sine un anumit tip de suprapunere. Pentru prima linie va exista
o suprapunere vertical ă între patch -uri, pentru prima coloana va exista o suprapunere orizontală ,
iar pentru a treia porțiune și anume cea din mijloc va exista o suprapunere în forma de ,,L’’.
Acestea pot fi o bservate în Figura 7, Figura 8 și Figura 9 . Toate cazurile se tratează în mod
individual astfel încât rezultatul sa fie cel dorit.

Figura 7. Suprapunere verticală corespunzătoare primei linii (verde)

Figura 8. Suprapunere orizontală corespunzătoare primei coloane (vișiniu)

23

Figura 9. Suprapunere în formă de L corespunzătoare părții din mijloc (portocaliu )

Noțiunea de suprapunere definește o porțiune având o valoare de 1/6 din dimensiunea totală
a unui patch 𝐿, care urmează a fi extrasă din acesta. Dacă se consideră două blocuri consecutive,
suprapunerea definește porțiune a secționată din fiecare dintre ele . Etapa presupune de asemenea
extragerea aleatorie de suprafețe pe măsură ce se dorește co mpletarea imaginii. În Figura 10 este
ilustată modalitatea de inserare a vecinătăților pe prima linie. Se inserează doar L−1/6∗L din
lungimea totală a plasturelui la fiecare iterație.

Figura 10. Modalitatea de inserare a blocurilor pe prima linie ținând cont de suprapunere

Și de această dată dimensiunea blocului este importantă, întrucat aceasta diferă de la o
textură la alta determinând astfel o reconstrucție a imaginii inițiale într -o formă cât mai
asemănătoare imaginii de intrare. În funcție de dimensiunea patch -ului suprapunerea este mai
mică sau mai mare și de asemenea timpul de umplere a imaginii de ieșire este mai mare pentru
suprafețe mai mari și mai mic pentru suprafețe mai mici.

Figura 11. Modalitatea de inserare a blocurilor pe prima coloană ținând cont de suprapunere

În Figura 11 este ilustată modalitatea de inserare a vecinătăților pe prima coloană . Și aici se
poate observa că se inserează doar L−1/6∗L din lățimea blocului , cealaltă porțiune fiind
corespunzătoare suprapunerii. În Figura 12 se prezintă completarea suprafeței din m ijlocul
imaginii. Se poate remarca faptul că s e inserează doar L−1/6∗L din lungimea și lățimea totală
a blocului , la fiecare iterație. Este păstrat același raționament fiind determinată distanța minimă
corespunzătoare cel ei mai asemănăto are suprafețe .

24

Figura 1 2. Modalitatea de inserare a blocurilor în mijoc ținând cont de suprapunere

Într-o primă fază se extrage aleator doar un patch. Acesta urmează a fi adăugat în imagine a
de ieșire mai apoi extrăgându -se și cel de -al doilea. Aici în schimb se impun c âteva condiții.
Patch -ul imediat următor este ales dintr -un grup de 1/10 patch -uri care pot fi extrase în total în
mod aleator din imaginea de intrare. Practic din cele 1/10 blocuri ce urmează a fi comparate cu
primul se va alege unu l, cel m ai asem ănător. Acest lucru se realizează comparând pe rând
suprapunerile.
Pentru ca un patch să poată fi selectat din cadrul imaginii de intrare, trebuie calculată
distanța dintre regiunea de suprapunere a blocului vechi și regiunea de interes din toate blocurile
de intrare. Distanța minimă este calculată și se alege suprafața corespunzăto are valorii celei mai
mici. [14]
Astfel c ă se ajunge s ă se determine patch -ul cu suprapunerea cea mai asemanătoare patch –
ului deja existent, el urmând a fi mai apoi inserat pe poziția următoare. Concret se determină din
lista celor 10% blocuri extrase, ace a suprafață care are cea mai mic ă valoare a acestei dif erențe.
După ce s -a realizat acest pas, pe pozi ția urm ătoare se inserează patch -ul găsit dar nu oricum, ci
încep ând de la valoarea imediat urmatoare supapunerii. În felul acesta s e atașează doar o parte
din lungimea totală a bucății determinate. Parcurgerea imaginii de ieșire se face pe trei căi astfel
că fiecare atrage după sine o distanță diferită. În final se obține o imagine care pare mult mai
asemănătoare cu textura de intrare, plasturii fiind aleși astfel încât să semene între ei. De aceea ș i
unele tranziții dintre ace știa sunt insesizabile mai ales în ceea ce privește texturile cu un model
asimetric.
2.3.3 Etapa a treia a sintezei de textură
Etapa a treia și totodată ultima abordată în ceea ce privește sinteza texturilor vin e cu
îmbunăt ățiri semnificative la nivel vizual. Aceasta tratează problema îmbinărilor dintre blocuri .
Altfel spus vine cu îmbunatațiri reflectate pe porțiunea suprapunerii dintre oricare dou ă patch -uri
consecutive. De acest ă dată locul în care dou ă patch -uri intră în contact sunt ghidate în urma
trasării unui drum. Este vorba despre o cale care prezintă de o parte și de celalaltă bucăți din
patch -urile corespunzăto are. Pentru ca marginile vizibile să fie reduse se caută o reducere
minimă pentru regi unile suprapuse prin utilizarea programării dinamice. Mai întâi se caută patch –
ul optim cu ajutorul găsirii valorii minime a sumei diferențelor pătrate . În Figura 13 se arată
calea optim aleasă pentru ca patch -ul următor să poată fi inserat.

25

Figura 13. Calea optimă dintre două patch -uri alăturate
2.3.3.1 Calea minimă de eroare
Următorul pas este reprezentat de calcularea supraf eței de eroare dintre cele două patch -uri
de comparat și anume patch -ul completat și patch -ul candidat . În cele din urmă se c alculează
calea minimă de eroare din cadrul suprafeței de eroare care a fost depistată prin intermediul
algoritmului, ca fiind limita noului patch. Altfel spus pentru a obține vecinătatea finală se
combină 𝑃𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 și 𝑃𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 . Calea minimă a costului prin suprafața de eroare se poate
calcula după cum urmează. Dacă prin 𝑆𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 și prin 𝑆𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 ne raportăm la două blocuri
care se suprapun de -a lungul marginior lor , atunci suprafața de eroa re se poate determina cu
jutorul formul ei 6 și reprezintă suprafața de eroare.

𝑒=(𝑆𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 −𝑆𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 )2 (6)

Figura 14. Modalitatea de inserare a patch -urilor pe prima linie ținând cont de calea găsită

În Figura 14, Figura 15 și Figura 16 sunt ilustrate parcurgerile care vor avea loc pe prima
linie, pe prima coloană și în partea din mijloc. Se poate observa că patch -urile sunt îmbinate în
funcție de un drum ce se determină în cadrul programului, așa cum va fi explicat în continuare.
Acestea nu au o formă standard definită deoarece calea de urmat este ghidată prin intermediul
unor pixeli diferiți.

Figura 1 5. Modalitatea de inserare a patch -urilor pe prima coloană ținând cont de calea găsită

26

Figura 1 6. Modalitatea de inserare a patch -urilor în mijoc ținând cont de de calea găsită
2.3.3.2 Delimitarea erorii și conectarea blocurilor pe vertical , pe orizontal și pentru
suprafața din mijloc
Pentru determinarea erorii minime corespunzătoare primei linii se pleacă de la diferența a
două matrici completate cu valorile pixelilor din interiorul celor două suprapuneri. Prin
realizarea aces tui calcul se obține o nouă matrice cu noi valori notată c a și formula 7. [17]

𝑒𝑖𝑗=(𝑃𝑐𝑜𝑚𝑝𝑙𝑒𝑡𝑎𝑡 (𝑖,𝑗)−𝑃𝑐𝑎𝑛𝑑𝑖𝑑𝑎𝑡 (𝑖,𝑗))2 (7)

În continuare se urm ărește calcularea valorii pentru ,,E” denumită eroare cumulată .

𝐸𝑖𝑗={𝑒𝑖𝑗,𝑖=1
𝑒𝑖𝑗+𝑀𝑖𝑛 {𝐸𝑖−1,𝑗−1,𝐸𝑖−1,𝑗,𝐸𝑖−1,𝑗+1},𝑖>1 (8)

În acest caz 𝑖 și 𝑗 reprezintă indicii de parcurgere a dimensiunil or blocului , cu 𝑖 se parcurg liniile
iar cu 𝑗 se parcurg coloanele.

În Figura 17 este ilustrat un exemplu pentru determinarea valorii lui E.

Figura 17. Exemplu de calcul pentru valoarea lui 𝐸𝑖𝑗

Rezolvarea ecua țiilor de mai sus conduce la o nouă matrice de dimensiunea suprapunerilor
ce urmează s ă fie completată cu valorile nou obținute . Ulterior matricea conține valorile nou
calculate și se determină numărul minim de pe ultima linie. După ce această valoare a fost
determinată se urmărește găsirea elementelor care compun calea, adică drumul de separare dintre
blocuri . Astfel are loc parcurgerea de jos în sus a matricii nou formate și căutarea elementului

27
minim de pe fiecare linie. Ilustrez o posibilă cale g ăsită pentru suprapunerea verticală în Figura
18, iar pentru orizontală în Figura 19. [17]

Figura 1 8. Exemplu de determinare a căii de separare pe verticală

Diferența dintre suprafața verticală și cea orizontală este aceea că pentru prima amintită se
completează valorile din matricea E pe linii, iar cealaltă implică realizarea acestei operați uni pe
coloane . Calea d e asemenea în primul caz se caută de jos în sus iar în cazul suprapunerii
orizontale ace st drum se determină de la dreapta spre stânga.

Figura 1 9. Exemplu de determinare a căii de separare pe orizontală

Blocurile din mijlocul imaginii se folosesc de ambele abordări. Fiecare bloc realizează
calculele mai întâi pentru suprapunerea vertical ă urmân d ca mai apoi să abordeze după același
model suprapunerea orizontală.
În final are loc completarea suprafeței cu pixelii corespunzători din cele do uă regiuni care au
fost suprapuse. Până la întâlnirea drumului pixelii sunt luați din patch -ul completat iar după
nivelul drumului pixelii sunt lua ți din cadrul blocului candidat. [17]
2.4 Transferul de textură
Acest procedeu reprezintă un proces prin intermediul căruia textura unei imagini sursă este
transferată unei imagini considerată imagine țintă. Ceea ce rezultă este o imagine ce seamănă cu
imaginea țintă dar realizată cu ajutorul texturii din i magine a sursă. Toate proces ele de obținere a
texturii sunt realizate folosind algoritmul de sinteză de textură, întrucât se dorește și în acest caz
reconstrucția unei texturi. De data aceasta ne oprim asupra etapei cu numărul trei. Acum se
lucrează atât cu imaginea sursă reprezentată de imaginea color cât și cu harta imaginii. Cea din
urmă reprezintă imaginea pe nivele de gri estompată . Altfel spus detaliile din imagine sunt
atenuate. Ambele sunt implicate în cadrul procesului transferului de textură a imaginii folos ind
cele dou ă componente , sursa și harta. Extragerea a leatorie a patch -urilor are loc din cadrul
imaginii hart ă, urm ând ca mai apoi acestea să fie găsite în cadrul imaginii color. O alt ă
modificare ce are loc este referitoare la calculu l distanței dintre blocuri și la cel a l valo rii erorii.

28
Suma diferențelor pătrate ține cont de această dată a ât de patch -ul deja existent, practic de
patch -ul vechi, de patch -ul care urmează să fie extras și totodată de regiunea din imaginea țintă
care are aceleași coordonate ca și cele pe care le are suprapunerea dintre patch -ul vechi și cel
care urmează a fi lipit. Asfel că de această dată vom avea:

Unde : – α este un parametru care stabilește un compromis, o legătură între sinteza texturii și
harta de corespondență a imaginii țintă
– 𝐵1 și 𝐵2 fac referire la suprafețele care aparțin patch -ului vechi și respectiv noului
patch care urmează a fi inserat
– 𝑆𝑐 – reprezintă harta imag inii sursă , practic suprapunerea patch -ului ce urmeaza a fi
inserat în imaginea sursă
– 𝑇𝑐 – reprezintă harta de corespondență a imaginii țintă, fiind reprezentată de
coordonatele suprapunerii corespunzatoare patch -ului
Modalitatea prin care se determină harțile imaginilor color este reprezentată de către filtrul
Gaussian. În cadrul prelucrărilor imaginilor acest tip de filtru este utilizat pentru a obține
estomparea conținutului acestora. [17] Efectul este des utilizat în software -ul grafic cu scopul
reducerii zgomotului din imagini și al reducerii detaliilor. Vizual apare o neclaritate netedă ,
practic efectul este acela al reducerii componentelor de înaltă frecvență din imagine, fiind un
filtru trece -jos. Pe scurt a cest tip de filtru este utilizat pentru a elimina zgomotul și detaliile din
imagine asigurând efectul de blur. În Figura 20 este ilustrat graficul filtrului iar formula numarul
10 descrie comportamentul acestuia.

Figura 20. Filtrul Gaus sian [17]
𝑔(𝑥,𝑦)=1
𝜎√2𝜋∗𝑒−(𝑥2+𝑦2)/2𝜎2 (10)
Unde 𝜎 reprezintă deviația standard a distribuției gaussiene .

𝑒𝑖𝑗=α (𝐵1𝑖𝑗−𝐵2𝑖𝑗)2+(1−α)(𝑆𝑐𝑖𝑗−𝑇𝑐𝑖,𝑗𝑖𝑗)2
(9)

29
3 Implementarea soluției adoptate
3.1 Prima etapă
În cadrul primei etape se pleacă de la o imagine inițială Img_gray și de asemenea de la
cores pondenta sa în format color Img_color . Cea din urm ă se descompune în cele trei
componente : R(Img_color_R ), G(Img_color_G ), B(Img_color_B ) care o alcătuiesc fiind tratat ă
fiecare în mod individual. La final rezultatele lor se recompun astfel obținând rezultatul care ne
interesează și anume imaginea notată Imagine_finala . Această metodă realizează sinteza
bazată pe extragerea alea toare de blocuri din imaginea de referință, fară nicio constrângere.
Pentru a extrage patch -urile astfel se utilizează funcția randi atât pentru coordonata x cât și
pentru y. Aceasta se ocupă de generarea unei matrici conținând numere înregi dintr -un interval
menționat. Funcția are ca parametri poziția primului respectiv a ultimului punct din imagine de
unde se poate extrage o vecinătate. Un bun exemplu este: x=randi([1 n -L-1]). În acest caz n
reprezintă lungimea imaginii din care se poate extrage blocul iar L reprezintă di mensiunea
acestuia. Trebuie să se țină cont de faptul că și ultimele patch -uri pot fi extrase aleator. Această
metodă nu ține cont de nicio restricție și de aceea patch -urile nu sunt inserate după nicio regulă
bine definită. Acestea sunt pur ș i simplu alese în mod aleator și sunt completate pe măsură ce se
extrag din imaginea de bază.

x=randi([1 n -L-1]);
y=randi([1 m -L-1]);
a=x:x+(L -1);
b=y:y+(L -1);
Patch=Img_gray(a,b);
P_comparatie_R=Img_color_R(a,b);
P_comparatie_G=Img_color_G(a,b);
P_comparatie_B=Img_color_B(a,b);

Pentru inserarea fiecărui bloc de pixeli, este necesară determinarea coordonatelor de început
și final corespunzătoare dimensiunii dorite: New_img(row1:row2, column1:column2)=
Patch. Prin i ntermediul celor două linii de cod row2 = row1 + rowsSmall -1 și de asemenea
column2 = column1 +columnsSmall -1 se indică poziția de final a patch -ului ce urmează a fi
inserat în cadrul imaginii noi. Se pune în primă fază condiția ca row2 <= rowsBig (rowsBig
este dimensiunea mare a imaginii). În ac eastă situație în care condiția este respectată, se trece la
pasul următor adică inserarea patch -urilor extrase în cadrul imaginii noi .
Partea care se ocupă se afișarea imaginii finale, are la bază reunirea straturilor
corespunzătoare imaginilor R, G, B (roșu, verde, albastru). Practic la final tot ceea ce s -a inserat
la fiecare iterație în cad rul fiec ărei imagini se regrupează formând imaginea color. De asemenea
sinteza se realizează și pentru imaginea pe nivele de gri, astfel c ă și aceasta este afișată.

subplot(3,2,1);
imshow(Img_color);
title('Imaginea originala');
Img_gray = rgb2gray(Img_color);
subplot(3,2,2);
imshow(Img_gray);
title('Imaginea pe tonuri de gri');

Un lucru de care trebuie să ținem cont în momentul în care dorim să vedem cum
funcționează acestă metodă este acela al alegerii corespunzătoare a dimensiunii patch -ului.
Trebuie să fim atenți la textura din care dorim s ă recompunem imaginea finală. Aceasta poate fi
sub diverse for me.Trebuie s ă vedem cât de multe detalii ar putea cuprinde un patch care ar putea

30
fi extras. Astfel acesta poate s ă ofere o imagine cât mai asemănătoare cu cea de la care se
pornește.
3.2 A doua etapă
Pentru această etapă se pornește de la citirea unei imagini de bază din care urmează a fi
extrase patch -urile. Se ține cont de dimensiunea acesteia și de dimensiunea imaginii în care
urmează a fi inserat blocul în cadrul fiecărei iterații. Avem în vedere totodată și numarul de
patch -uri ca re se dor esc a fi inserate pe fiecare linie respectiv fiecare coloană. Noua imagine se
creeaza astfel:
New_img_double = zeros(L*mp,L*mp);

Aceasta este inițializată cu zero urmând ca mai apoi să fie completată . Extragerea blocurilor
se realizează de asemenea într -o manieră aleatoare doar c ă de această dată se ține cont de câteva
restricții. Acum New_img se parcurge pe trei direcții . La început se sintetizează prima linie de
blocuri , mai apoi prima coloană după care parcurgem partea din mijloc , fiecare dintre acestea
implicând un anumit tip de suprapunere între blocurile deja completate și cel care urmează a fi
inserat . Este cunoscut faptul că prima linie aduce cu sine suprapunerea v erticală, prima coloană
implică suprapunerea orizontală iar pentru partea din mijloc se folosește suprapunerea în formă
de L așa cum s -a ilustrat în capitolul Algoritmi pentru realizarea sintezei de textură din
fundam entarea teoretică , Figura 7, Figura 8, Figura 9.
Într-o primă fază se extrage aleator un bloc care se completează pe prima poziție din
imaginea nouă (prima linie, prima coloan ă). El se extrage și din canalele imaginii color de bază
după aceiași indici urm ând a fi inserat în canalele noii imagini color.
3.2.1 Completarea primei linii
Următorul pas constă în completarea primei linii a imaginii prin intermediul un ei bucle for
cu ajutorul căreia se realizează parc urgerea acesteia.

for col=column2+1:L -round(1/6*L):columnsBig -(L-round(1/6*L))+1

Din cadrul imaginii nou create se extrage regiunea de supreapunere verticală care aparține
patch -ului completat. Aceasta este selectată pe vertical de la row1 până la row1+(L-1) iar pe
orizo ntal de la col-round(1/6*L) până la col-1 în toate cele patru imagini ( New_img ,
New_img_R, New_img_G, New_img_B ) după cum urmează:

Suprapunere_vertical_linia_1 = New_img(row1:row1+(L -1),col-round(1/6*L):col –
1,:);
Suprapunere_vertical_linia_1_2_R=New_img_R(row1:row1+(L -1),col-
round(1/6*L):col -1,:);
Suprapunere_vertical_linia_1_2_G=New_img_G(row1:row1+(L -1),col-
round(1/6*L):col -1,:);
Suprapunere_vertical_ linia_1_2_B=New_img_B(row1:row1+(L -1),col-
round(1/6*L):col -1,:);

Se pornește de pe poziția ime diat urmatoare primului patch și se utilizează un pas care se
traduce prin dimensiunea patch -ului din care se elimină porțiunea de suprapunere. Finalul este
dat de ultima poziție din care se mai poate începe inserarea unui nou bloc având dimensiunile
L−1/6∗L. În continuare fiecare pas aduce cu sine extragerea unui număr de N patch -uri alese

31
în mod aleator. Acest N reprezintă 10% din numărul total de blocuri de dimensiune L ce pot fi
extrase din imaginea de referință și este dat de :

Procent=10/100;
N=round(Procent*(n -L+1)*(m-L+1));

Dat fiind faptul că 𝑛 și 𝑚 alcătuiesc dimensiunea imaginii de intrare, se aleg 10% din totalul
patch -urilor care pot fi extrase de pe întreaga suprafaț ă a imaginii de bază. Din cauza faptului că
fiecare bloc nou inserat în imagine aduce cu sine extragerea aleatorie a unui număr de astfel de
patch -uri este necesară stocarea lor temporală . În partea de început au fost declarate câteva celule
cu rol de păstrare a informațiilor de care este nevoie în partea d e implemetare a problemei. În
timp ce pach -urile sunt extrase, sunt salvate în celule pe pozițiile corespunzătoare :
-celula_Patch{p_1}=Patch_comparatie -în această celulă se stochează patch -urile întregi
extrase în mod aleator, pentru imaginea pe nivele de gri ;
– celula_Patch_R{p_1}=P_comparatie_R_1 -în această celulă se stochează patch -urile întregi
extrase în mod aleator, pentru stratul roșu al imaginii color ;
-celula_Patch_G{p_1}=P_comparatie_G_1 -aici sunt stocate patch -urile întregi extrase în
mod aleator, pentru stratul verde al imaginii color ;
-celula_Patch_B{p_1}=P_comparatie_B_1 -aici sunt stocate patch -urile întregi extrase în
mod aleator, pentru stratul albastru al imaginii color ;
Când are loc extragerea aleatorie a patch -urilor are loc com pletarea concomitent în celule a
valorilor pentru suprapunerea verticală care apar ține patch -ului și care urmează a fi comparată.
a_suprapunere_1=1:1+(L -1) ;
b_suprapunere_1=1:1+round(1/6*L) -1;
Suprapunere_vertical_Patch_comparatie=Patch_comparatie(a_suprapunere_1,b_supr
apunere_1);
celula_Patch_suprapus_vertical{p_1}=Suprapunere_vertical_Patch_comparatie;

O alt ă celulă care se încarcă cu noi valori este aceea a patch -urilor ce urmează a fi inserate .
Aceste valori se extrag după doi parametri, unul corespunzător numarului de linii altul numarului
de coloane . Din imaginea pe nivele de gri resp ectiv straturile îmaginii color are loc extragerea
de la acele coordonate a patch -urilor av ând lungim ea L−1/6∗L.

celula_Patch{p_1}=Patch_comparatie;
celula_Patch_R{p_1}=P_comparatie_R_1;
celula_Patch_G{p_1}=P_comparatie_G_1;
celula_Patch_B{p_1}=P_comparatie_B_1;

Aceste celule conțin cele 10% patch -uri extrase aleator pentru straturile imaginii color și
stochează valorile blocurilor pentru inserat de pe starturile R, G, B ale imaginii color .

celula_Patch_inserat{p_1}=Patch_inserat;
celula_Patch_inserat_R{p_1}=Patch_inserat_R;
celula_Patch_inserat_G{p_1}=Patch_inserat_G;
celula_Patch_inserat_B{p_1}=Patch_inserat_B;

După ce are loc salvarea tempora ră a acestor valori , pentru fiecare patch candidat zona de
suprapunere extrasă se compară cu zona de suprapunere a patch -ului deja co mpletat. Compararea
presupune calcularea distanței SSD și păstrarea blocului pentru care valoarea este minimă.
Calculu l distanței SSD și totodată stocarea valorii în celula corespunzătoare presupune :

D_1=sum(sum((double(Suprapunere_vertical_linia_1) –
double(Suprapunere_vertical_Patch_comparatie)).^2));
distanta_euclidiana_1{p_1}=D_1;

32

Acest calcul presupune realizarea diferenței pixel cu pixel dintre suprapunerile extrase
pentru num ărul de patch -uri scoase aleator și porțiunea de suprapunere, identificată în imaginea
nou creat ă atât pe nivele de gri cât și pe cea color, de la finalul ultimului patch inserat în cadrul
acesteia. Dup ă ce se obțin toate valorile se caută cel mai asemănător patch din punct de vedere al
asemănarii adică acel patch pentru care d istanța euclidiană este minimă. Astfel că se extrage
indexul și valoarea pentru această distanță din cadrul celulei care conține aceste valori.

[val_1,index_1]=min([distanta_euclidiana_1{:}]);

Având valoarea indexului putem extrage patch -ul corespunzător distanței minime ce
urmează a fi inserat pe următoarea poziție în toate cele patru imagini (gri, R, G, B).

Patch_linie_1=celula_Patch_inser at{index_1};
Patch_linie_1_R=celula_Patch_inserat_R{index_1};
Patch_linie_1_G=celula_Patch_inserat_G{index_1};
Patch_linie_1_B=celula_Patch_inserat_B{index_1};

Blocul care urmează a fi inserat este stocat în cadrul celulei corespunzătoare având
următoarele coordonate:

a_Patch_inserat_linie=x_1:x_1+(L -1);
b_Patch_inserat_linie=y_1+round(1/6*L):y_1+(L -1);
Patch_inserat=Img_gray(a_Patch_inserat_linie,b_Patch_inserat_linie);
Patch_inserat_R=Img_col or_R(a_Patch_inserat_linie,b_Patch_inserat_linie);
Patch_inserat_G=Img_color_G(a_Patch_inserat_linie,b_Patch_inserat_linie);
Patch_inserat_B=Img_color_B(a_Patch_inserat_linie,b_Patch_inserat_linie);

Se verifică dacă pentru următoarea poziție există suficient spațiu necesar completării unui
patch de inserat iar în caz afirmativ se trece la completarea imaginilor. În caz contrar apare un
avertisment.

if col+L -round(1/6*L) <= columnsBig
New_img(row1:row2,col:col+L -round(1/6*L) -1)= Patch_linie_1;
New_img_R(row1:row2,col:col+L -round(1/6*L) -1)=Patch_linie_1_R;
New_img_G(row1:row2,col:col+L -round(1/6*L) -1)=Patch_linie_1_G;
New_img_B(row1:row2,col:col+L -round(1/6*L) -1)=Patch_linie_1_B;
else
warningMessage = sprintf('That will not fit. \nThe lower right coordinate
would be at row %d, column %d.', row2, column2);
uiwait(warndlg(warningMessage));
end
În felul acesta se completează prima linie din imagini.
3.2.2 Completarea primei coloane
În continuare se trece la a prima coloană. În acest caz cele vizate vor fi suprapunerile
orizontale. Din nou se consider ă o buclă for, de data aceasta utilizat ă pentru parcurgere întregii
coloane.

for row=row2+1:L -round(1/6*L):rowsBig -(L-round(1/6*L))+1

Variabila de parcurgere este row și aceasta pornește de pe poziția primei coloane și a celei
de-a doua linii dacă ne raportăm la imagine ca la o matrice. Pasul de parcurgere este de
asemenea cât lățimea patch -ului care urmează a fi inserat : 𝐿−1/6∗𝐿. Sfârșitul acest ei bucle

33
este moment ul în care mai există spațiu după penultimul patch inserat, mai puțin sau cel mult
egal cu cel necesar inserării unui patch având lățimea de 𝐿−1/6∗𝐿.
La fel ca și în cazul pasului precedent are loc extragerea aleatoare a 10% patch -uri din
imaginea inițială care urmează a fi stocate în cadrul celuleor corespunzătoare în baza aceluiași
principiu ca cel anterior prezentat. Se consideră de această dată suprapunerea ca fi ind orizontală
și situată în partea de sus a acestei categorii de patch -uri. Din nou se stochează valorile
supra punerilor în celula corespunzătoare concomitent cu extragerea patch -urilor.
Și de această dată ne raporăm la patch -ul completat , cel care ocup ă deja poziția de pe prima
linie și prima coloană . Pentru el se extrage porți unea de suprapunere orizontală situată în partea
de jos :

Suprapunere_orizontal_coloana_1 = New_img(row -round(1/6*L):row –
1,column1:column1+(L -1),:);
Suprapunere_orizontal_coloana_1_R=New_img_R(row -round(1/6*L):row –
1,column1:column1+(L -1),:);
Suprapunere_orizontal_coloana_1_G=New_img_G(row -round(1/6*L):row –
1,column1:column1+(L -1),:);
Suprapunere_orizontal_coloana_1_B=New_img_B(row -round(1/6*L) :row-
1,column1:column1+(L -1),:);

Aceasta se compară acum cu suprapunerile orizontale situate în partea de sus a patch -urilor
candidate care se marchează astfel :

a_suprapunere_2=1:1+round(1/6*L) -1;
b_suprapunere_2=1:1+(L -1);
Suprapunere_orizontal_Patch_comparatie=Patch_comparatie_2(a_suprapunere_2,b_s
uprapunere_2);
celula_Patch_suprapus_orizontal{p_2}=Suprapunere_orizontal_Patch_comparatie;

De asemenea se calculează valoarea distanței minime dintre suprapuneri urmând ca ea să fie
extrasă în baza unui index și al unei valori. Cu ajutorul indexului este ales patch -ul potrivit restul
operațiunilor fiind aceleași ce cele prezentate în etapa precedentă cu precizarea că patch -ul care
urmează a fi i nserat are de această dată alte valori fiind dat de alte coordonate :

a_Patch_inserat_coloana=x_2+round(1/6*L):x_2+(L -1);
b_Patch_inserat_coloana=y_2:y_2+(L -1);
Patch_inserat_2=Img_gray(a_Patch_inserat_coloana,b_Patch_inserat_coloana);
Patch_inserat_2_R=Img_color_R(a_Patch_inserat_coloana,b_Patch_inserat_coloana
);
Patch_inserat_2_G=Img_color_G(a_Patch_inserat_coloana,b_Patch_inserat_coloana
);
Patch_inserat_2_B=Img _color_B(a_Patch_inserat_coloana,b_Patch_inserat_coloana
);
3.2.3 Completarea zonei centrale
După ce are loc completarea primei linii și a primei coloane se trece la inserarea blocurilor în
interiorul zonei centale a imaginii. Astfel că acest ă suprafață se parcurge prin intermediul altor
două bucle for, una corespunzăto are liniilor și alta corespunzăto are coloanelor. Prin intermediul
lui k se parcurg liniile iar cu ajutorul lui l se parcurg coloanele. Se porne ște din prima poziție
necompletată din imaginea rezultată. Altfel zis de pe linia a 2 -a și coloana a 2 -a. Pasul acestor
două bucle este dat de dimensiunea suprapunerilor care sunt necesare 𝐿−1/6∗𝐿. Iterațiile
continuă până se ajunge la marginea imginii de ieșir e.

for k=row2+1:L -round(1/6*L):rowsBig -(L-round(1/6*L))+1
for l=column2+1:L -round(1/6*L):columnsBig -(L-round(1/6*L))+1

34
De această dat ă intervin în discuție suprapunerile în formă de L . Acestea sunt date de
concatenarea unei suprapuneri verticale cu o suptapunere orizontală, astfel că din imaginea
compleată se extrag supapunerile ce urmează a fi comp arate. În cazul suprapunerii verticale
determinarea lățimii se realizează pleacând din k-round(1/6*L) și ajungând în k+L-
round(1/6*L) -1 iar pentru determinarea lungimii se pleacă din l-round(1/6*L) și se ajunge în
l-1. Dacă ne referim la porțiune extrasă pe orizontală vorbim de o lătime dată de k-
round(1/6*L):k -1 și lungime dată de l:l+L-round(1/6*L) -1. Suprapunerea totală în formă
de L es te dată prin concatenarea celor două, astfel ca avem:

Suprapunere_mijloc_vertical= New_img(k -round(1/6*L):k+L -round(1/6*L) -1,l-
round(1/6*L):l -1,:);
Suprapunere_mijloc_orizontal= New_img(k -round(1/6*L):k -1,l:l+L-
round(1/6*L) -1,:);
Suprapunere_mijloc=[Suprapunere_mijloc_orizontal(:);Suprapunere_mijloc_vertic
al(:)];

Pentru imaginile New_img_R , New_img_G și New_img_B se procedează în mod similar
coordonatele și modul de concatenare rămânând aceleași.

În continuare are loc de asemene extragerea aleatoare a 10% patch -uri din imaginea de
intrare. Și pentru acestea sunt importante suprapunerile în fomă de L în contextul în care se
dorește calcularea valorii minime a sumei diferențelor pătrate dată de cele două suprapuneri,
completată și candidată. Suprapunerea verticală este extrasă din regiunea situată în stânga patch –
ului candidat iar suprapunerea orizontală este aleas ă din regiunea de deasupra acestuia. În
continuare sunt extrase suprapunerile corespunzătore patch -urilor candidate după cum urmează :

a_suprapunere_verticala_3=1:1+(L -1);
b_suprapunere_verticala_3=1:1+round(1/6*L) -1;
Suprapunere_mijloc_Patch_comparatie_1=Patch_comparatie_3(a_suprapunere_vertic
ala_3,b_suprapunere_verticala_3);
celula_Patch_suprapus_vertical{p_3}=Suprapunere_mijloc_Patch_comparatie_1;

a_suprapune re_orizontala_3=1:1+round(1/6*L) -1;
b_suprapunere_orizontala_3=1+round(1/6*L):1+(L -1);
Suprapunere_mijloc_Patch_comparatie_2=Patch_comparatie_3(a_suprapunere_orizon
tala_3,b_suprapunere_orizontala_3);
celula_Patch_suprapus_orizontal{p_3}=Suprapunere_mijloc_Patch_comparatie_2;

Suprapunere_mijloc_comparatie=[Suprapunere_mijloc_Patch_comparat ie_2(:);Supra
punere_mijloc_Patch_comparatie_1(:)];

Urmând același principiu prezentat și în cadrul etapelor anterioare se deter mină valoarea
minimă a sumei diferențelor pătrate dintre cele două suprapuneri. În funcție de indexul valorii
aflate se determ ină patch -ul care urmează a fi inserat. Noutatea care apare în acest context constă
în coordonatele blocului . Ele diferă de cele de până acum ajungând la dimensiuni mai mici după
cum urmează:

a_Patch_inserat_mijloc=x_3+round(1/6*L):x_3+(L -1);
b_Patch_inserat_mijloc=y_3+round(1/6*L):y_3+(L -1);
Patch_inserat_3= Img_gray(a_Patch_inserat_mijloc,b_Patch_inserat_mijloc);
Patch_inserat_3_R=Img_color_R(a_Patch_inserat_mijloc,b_Patch_inserat_mijloc);
Patch_inserat_3_G=Img_color_G(a_Patch_inserat_mijloc,b_Patch_inserat_mijloc);
Patch_inserat_3_B=Img_color_B(a_Patch_inserat_mijloc,b_Patch_inserat_mijloc);

35
3.3 A treia etapă
Aici lucrurile arată în mod asemănător cu cele din etapa a doua cu precizarea că se adaugă
bucăți de cod menite să îmbunătățească sinteza de texturi. De data aceasta dorim realizarea unei
îmbinări între patch -urile vecine determinate de o cale pe care o vom calcula astfel încât trecerea
să fie cât mai lină la îmbinarea di ntre două regiuni. Practic se consideră o suprafață având
valoarea de 1/6 din dimensiunea unui patch, aceasta fiind suprapunerea, pentru care trebuie să
calculăm calea care separă cele două pat ch-uri vecine ce intră în componența ei. Și în acest caz
supra punerile pot fi de trei feluri abordarea lor fiind asemănătoarea cu cea din etapa a doua doar
că de această dată avem în vedere calcularea drumului optim.
Pentru suprapunerea verticală vom găsi un drum vertical, pentru cea orizontală un drum
orizontal iar pentru cea in forma de L vom găsi două drumuri, unul vertical pentru porțiunea
verticală din suprapunere și altul orizontal pentru bucata orizontală. Practic codului deja existent
i se adaugă completările pentru dou ă cazuri dar de fiecare dată s -au folosi t variabile diferite
pentru ca acestea să nu se suprascrie, lucru util în contextul vizualizării pas cu pas a drumurilor
determinate penru prima linie, prima coloană și pentru porțiunea din mijloc.
3.3.1 Completarea primei linii
Dacă ne raportăm mai întâi la prima linie după ce a fos t determinat blocul imediat următor
care urmează a fi inserat , lucru realizat în aceeași manieră ca cea prezentată în etapa precedentă,
trebuie să calculăm așa cum am amintit mai sus drumul optim care face trecerea dintre cele două
patch -uri consecutive cât mai firească. Astfel că se consideră o matrice:

e1=round((double(Suprapunere_vertical_linia_1) –
double(Suprapunere_vertical_Patch_comparatie_intreg)).^2);

Aceasta conține ca și elemente valorile diferențelor dintre pixelii suprapunerilor celor două
patch -uri. Prima suprapunere este pentru patch -ul vechi, deja inserat , iar cea de -a doua este
corespunzătoare patch -ului nou găsit. Această matrice are în mod implicit dimensiunea egală cu
cea a suprapu nerilor și de asemenea egala la randul ei cu: [dim_1_e,dim_2_e]=size(e1);
Se consideră o nouă matrice de data aceasta E1=zeros(dim_1_e,dim_2_e), ale cărei
elemente se completează în felul următor: pentru prima linie din matrice se copiază elementele
primei linii din e1 iar pentru cea de -a doua linie se face suma dintre e1 aparținând poziției
curente și se caută între valorile din linia precedentă a matricei E1 valoarea minim ă dintre
vecinul de deas upra și ceilalți doi ai acestuia din urmă, din st ânga respectiv dreapta. Se inserează
astfel valoarea det erminată, parcurgându -se astfel întreaga matrice E1:

for index_j=1:1:dim_2_e
index_i=1;
E1(index_i,index_j)=e1(index_i,index_j);
end
for index_i=2:1:dim_1_e
for index_j=1:1:dim_2_e
if (index_j)==1
E1(index_i,index_j)=e1(index_i,index_j)+min(E1(index_i –
1,index_j),E1(index_i -1,index_j+1));
elseif (index_j)==dim_2_e
E1(index_i,index_j)=e1(index_i,index_j)+min(E1(index_i –
1,index_j -1),E1(index_i -1,index_j));
else
minim_1=min(E1(index_i -1,index_j -1),E1(index_i -1,index_j));

E1(index_i,index_j)=e1(index_i,index_j)+min(minim_1,E1(index_i -1,index_j+1));
end

36
end
end

Ne poziționăm mai apoi pe ultima linie din E1și extragem valoarea minim ă prezentă pentru
care stocăm valoarea și respectiv indexul acesteia:

[min_linie_finala, index_linie_finala]= min(E1(dim_1_e,:));

Considerăm o altă matrice având dim_1_e linii și 2 coloane. Pe prima coloană salvăm
indexul găsit pentru ac țiunea prezentată anterior iar pe a doua coloană stocăm valoarea minim ă
găsită.

Sectionare_1(dim_1_e,1)=index_linie_finala;
Sectionare_1(dim_1_e,2)=min_linie_finala;

Pentru E1 dorim apoi determinarea întregului drum optim astfel c ă după ce am g ăsit
minimul de pe ultima linie cautăm minimul dintre el și cei trei vecini ai săi de sus , principalii trei
care il încadrează. De exemplu E1(p,r-1),E1(p,r) și E1(p,r+1) . Astfel c ă se parcurge la
rând în func ție de index -ul găsit la pasul anterior.

for p=dim_1_e -1:-1:1
r=index_linie_finala;
if r<=1
min_2=min(E1(p,r),E1(p,r+1));
if min_2==E1(p,r)
index2=r;
else
index2=r+1;
end
elseif r>=dim_2_e
min_2=min(E1(p,r -1),E1(p,r));

if min_2==E1(p,r -1)
index2=r -1;
else
index2=r;
end
else
min_1=min(E1(p,r -1),E1(p,r));
if min_1==E1(p,r -1)
index1=r -1;
else
index1=r;
end
min_2=min(min_1,E1(p,r+1));
if min_2==min_1
index2=index1;
else
index2=r+1;
end
end

La finalul determinării valorilor acest ora, ele sunt stocate în matricea Sectionare_1 după
valoare și index. Pentru a finaliza procedura, Suprapunere_verticala_sectionata porțiunea
de suprapunere care urmează a fi inserată trebuie să con țină informa ție din ambele patch -uri,
astfel c ă în stânga drumului optim găsit vor fi inserate valori aparținând patch -ului vechi iar în
dreapta valori apar ținând patch -ului nou determinat . Acest lucru se implementează cu ajutorul a

37
două bucle for care asigură parcurgerea suprafe ței de completat comp arând valorile cu cele
existente în Sectionare_1(p1,1) astfel că avem :
for p1=1:1:dim_1_e
for r1=1:1:dim_2_e
if r1<=Sectionare_1(p1,1) %index_linie_finala
Suprapunere_verticala_sectionata(p1,r1)=Suprapunere_vertical_linia_1(p1,r1) ;
Suprapunere_verticala_sectionata_R(p1,r1)=Suprapunere_vertical_linia_1_2_R(p1
,r1) ;
Suprapunere_verticala_sectionata_G(p 1,r1)=Suprapunere_vertical_linia_1_2_G(p1
,r1) ;
Suprapunere_verticala_sectionata_B(p1,r1)=Suprapunere_vertical_linia_1_2_B(p1
,r1) ;
else
Suprapunere_verticala_sectionata(p1,r1)=Suprapunere_vertical_Patch_comparatie
_intreg(p1,r1) ;
Suprapunere_ verticala_sectionata_R(p1,r1)=Suprapunere_vertical_Patch_comparat
ie_intreg_R(p1,r1) ;
Suprapunere_verticala_sectionata_G(p1,r1)=Suprapunere_vertical_Patch_comparat
ie_intreg_G(p1,r1) ;
Suprapunere_verticala_sectionata_B(p1,r1)=Suprapunere_vertical_Patch_com parat
ie_intreg_B(p1,r1) ;
end
end
end

După ce are loc determinarea acestor suprapuneri pentru prima linie ele sunt insertate în
cadrul imaginii finale pe următoare poziție :

New_img(row1:row2,col -round(1/6*L):col -1)=Suprapunere_verticala_sectionata;
New_img_R(row1:row2,col -round(1/6*L):col –
1)=Suprapunere_verticala_sectionata_R;
New_img_G(row1:row2,col -round(1/6*L):col –
1)=Suprapunere_verticala_sectionata_G;
New_img_B(row1:row2, col-round(1/6*L):col –
1)=Suprapunere_verticala_sectionata_B;
3.3.2 Completarea primei coloane
Și de această dată se dorește găsirea drumului optim între oricare două patch -uri suprapuse
orizontal. De aceea se plecă din nou de la o matrice e3 de această dat ă care are dimensiunea
suprapunerilor [dim_5_e,dim_6_e]=size(e3).

e3=round((double(Suprapunere_orizontal_coloana_1) –
double(Suprapunere_orizontal_Patch_comparatie_intreg)).^2);

Și aceasta conține ca elemente valorile sum ei diferențelor pătrate dintre pixeli. Prima
suprapunere aparține patch -ului completat, iar a doua este corespunzătoare blocului nou găsit.
Considerăm în mod similar o nouă matrice de data aceasta E3=zeros(dim_5_e, dim_6_e), ale
cărei elemente se completează în felul următor: pentru prima coloană din matrice se copiază
elementele primei coloane din e3 iar pentru cea de -a doua coloană se calculează suma dintre e3
aparținând poziției curente și se caută între valorile din coloana precedentă a matricei E3
valoare a minimă dintre vecinul de lângă și ceilalți doi ai acestuia din urmă, de sus respectiv de
jos. Se completează astfel valoarea găsită parcurgându -se astfel intraga matrice E3:

for index_i_2=1:1:dim_5_e
index_j_2=1;
E3(index_i_2,index_j_2)=e3(index_i_2,index_j_2);
end

38
for index_j_2=2:1:dim_6_e
for index_i_2=1:1:dim_5_e
if (index_i_2)==1
E3(index_i_2,index_j_2)=e3(index_i_2,index_j_2)+min(E3(index_i_2,index_j_2 –
1),E3(index_i_2+1,index_j_2 -1));
elseif (index_i_2)==dim_5_e
E3(index_i_2,index_j_2)=e3(index_i_2,index_j_2)+min(E3(index_i_2 –
1,index_j_2 -1),E3(index_i_2,index_j_2 -1));
else
minim_3=min(E3(index_i_2 -1,index_j_2 -1),E3(index_i_2,index_j_2 –
1));
E3(index_i_2,ind ex_j_2)=e3(index_i_2,index_j_2)+min(minim_3,E3(index_i_2+1,in
dex_j_2-1));
end
end
end

Mai apoi ne poziționăm pe ultima coloană din E3 și extragem valoarea minimă întâlnită
pentru care stocăm valoarea și respectiv indexul acesteia:

[min_linie_finala_3,index_linie_finala_3]=min(E3(:,dim_6_e));

Se consideră o altă matrice având dim_6_e linii și 2 coloane. În cadrul primei coloane
salvăm indexul corespunzător pentru acțiunea prezentată precedent și pe a doua coloană stocăm
valoarea minimă întâlnită.

Sectionare_3(dim_6_e,1)=index_linie_finala_3;
Sectionare_3(dim_6_e,2)=min_linie_finala_3;

Pentru matricea E3 se dorește determinarea întreg ii căi optim e. În acest sens se caută
valoarea m inimă de pe ultima coloană. Astfel c ă după găsirea acestei valori se caută minimul
dintre e a și cei trei vecini ai săi din partea stângă , principalii trei care o încadrează. De exemplu
E3(p4,r4), E3(p4-1,r4) și E3(p4+1,r4). Astfel c ă are loc parcurgerea la rând cu ajutorul
index -ului găsit în cadrul pasului precedent.

for r4=dim_6_e -1:-1:1
p4=index_linie_finala_3;
if p4<=1
min_6=min(E3(p4,r4),E3(p4+1,r4));
if min_6==E3(p4,r4)
index6=p4;
else
index6=p4+1;
end
elseif p4>=dim_5_e
min_6=min(E3(p4 -1,r4),E3(p4,r4));
if min_6==E3(p4 -1,r4)
index6=p4 -1;
else
index6=p4;
end
else
min_5=min(E3(p4 -1,r4),E3(p4,r4));
if min_5==E3(p4 -1,r4)
index5=p4 -1;
else
index5=p4;
end
min_6=min(min_5,E3(p4+1,r4));
if min_6==min_5

39
index6=index5;
else
index6=p4+1;
end
end

La încheierea determinării acestor valorilor, le stocăm în cadrul matricei Sectionare_3
după valoare și index. Pentru a putea insera porțiunea de suprapun ere orizontală
corespunzătoare, Suprapunere_orizontala_sectionata trebuie să con țină informație din
ambele patch -uri, astfel că în partea de sus a drumului optim căutat vor fi lipite valori din patch –
ul vechi iar în de jos valori din patch -ul nou determinat. Acest lucru se implementează cu
ajutorul a două bucle for care prin intermediul cărora se asigură parcurgerea suprafeței de
completat ele compar ând valorile întâlnite cu cele existente în Sectionare_3(r5,1) în acest fel
avem:

for r5=1:1:dim_6_e
for p5=1:1:dim_5_e
if p5<=Sectionare_3(r5,1) %index_linie_finala
Suprapunere_orizontala_sectionata(p5,r5)=Suprapunere_orizontal_coloana_1(p5,r
5) ;
Suprapunere_orizontala_sectionata_R(p5,r5)=Suprapunere_orizontal_coloana_1_R(
p5,r5) ;
Suprapunere_orizontala_sectionata_G(p5,r5)=Suprapunere_orizontal_coloana_1_G(
p5,r5) ;
Suprapunere_orizontala_sectionata_B(p5,r5)=Suprapunere_orizontal_coloana_1_B(
p5,r5) ;
else
Suprapunere_orizontala_sectionata(p5,r5)=Suprapunere_orizontal_Patch_comparat
ie_intreg(p5,r5) ;
Suprapunere_orizontala_sectionata_R(p5,r5)=Suprapunere_oriz ontal_Patch_compar
atie_intreg_R(p5,r5) ;
Suprapunere_orizontala_sectionata_G(p5,r5)=Suprapunere_orizontal_Patch_compar
atie_intreg_G(p5,r5) ;
Suprapunere_orizontala_sectionata_B(p5,r5)=Suprapunere_orizontal_Patch_compar
atie_intreg_B(p5,r5) ;
end
end
end

Noutatea vine din parcurgerea pe coloane și nu pe linii așa cum implica etapa de completare
a primei linii din imagine. La finalul determinării suprapunerii aceasta trebuie inserată în cadrul
imaginii pe următoarele poziții:

New_img(row-round(1/6*L):row –
1,column1:column2)=Suprapunere_orizontala_sectionata;
New_img_R(row -round(1/6*L):row –
1,column1:column2)=Suprapunere_orizontala_sectionata_R;
New_img_G(row -round(1/6*L):row –
1,column1:column2)=Suprapunere_orizontala_sectionata_G;
New_img_B(row -round(1/6*L):row –
1,column1:column2)=Suprapunere_orizontala_sectionata_B;

3.3.3 Completarea zonei din mijloc
În ceea ce privește suprapunerile care vizează zona centrală a imaginii, acestea nu mai sunt
tratate ca fiind în formă de L. Idee ac eea era valabilă doar în ceea ce privea alegerea patch -ului
optim candidat. Acum suprapunerile sunt tratate în mod indiviadual, una verticală iar cealaltă

40
orizontală. Pentru calcularea drumului optim în cazul fiecăreia dintre ele se folosesc algoritmii
prezentați în subcapitolele: 3.3.1 Completarea primei linii și 3.3.2 Completarea primei coloane .
3.4 Transfer de textură
Prin intermediul transferului de t extură se poate reda o imagine având la bază textura alteia.
Această etapă implică utilizarea a patru imagini. Una dintre imagini reprezintă imaginea sursă, o
alta imaginea țintă și alte dou ă care sunt hărțile celor două imagini , acestea fiind obținute cu
ajutorului funcției imgaussfilt . Cum transferul se aplică și asupra imaginii pe nivele de gri va
fi nevoie și de versiunile acestea ale imaginilor sursă și respectiv țintă și ele se ob țin prin
aplicarea funcției rgb2gray.

Source_correspondence_1= imread( 't_sursa_1.png' );
Source_correspondence_1_gray=rgb2gray(Source_correspondence_1);
Target_correspondence_1= imgaussfilt(Source_correspondence_1_gray, 5);
Source_correspondence_2= imread('t_tinta_1.png');
Source_correspondence_2_gray=rgb2gray(Source_correspondence_2);
Target_correspondence_2= imgaussfilt(Source_correspondence_2_gray,2);

Această etapă impică două iterații fiind implementată în cadrul unei bucle for de parcurgere
care cuprinde întregul cod ce va fi prezentat în continuare. Astfel parametrul M=2 iar A=0.8*(i –
1)/(M-1)+0.1 , A fiind un parametru care are sarcina de a determina legătura ce se stabileșe între
sinteza de textură și harta de corespondenț ă pentru imagin ea țint ă. Pentru cazul în care M==1 se
consideră A=0.1. La baza transferului de textură st ă etapa a treia a sintezei de textură, aceasta
suferind doar câteva modificări în ceea ce privește alegerea primului patch ce urmează a fi
inserat și de asemenea alegerea suprapunerilor.
În ceea ce priveșt e primul patch el este ales pentru a fi inserat în cadrul imaginii țintă dintr -o
listă de 10 % patch -uri extrase în mod aleator din imaginea sursă . Criteriul de care se ține cont
este acela al valorii minime a sumei diferențelor pătrate dintre primul patch decupat din harta
imaginii țintă și patch -ul decupat din harta imaginii sursă.

a=1:1+(L -1);
b=1:1+(L -1);
Patch=Target_correspondence_2(a,b);
x_patch=randi([1 u_patch -L-1]);
y_patch=randi([1 v_patch -L-1]);
a_patch=x_patch:x_patch+(L -1);
b_patch=y_patch:y_patch+(L -1);
P_comparatie_gray=Target_correspondence_1(a_patch,b_patch);
D=sum(sum((double(Patch) – double(P_comparatie_gray)).^2));

După ce se extrage valoarea minimă și indexul blocului potrivit în imagin ea țintă pe poziția
primului patch este inserat blocul decupat din imaginea sursă de la aceleași coordonate cu cel
decupat din harta imaginii sursă.
Din nou se realizează parcurgerea pe prima linie, prima coloan ă și de asemenea pentru zo na
din mijloc a i maginii fiind din nou prezente cele trei tipuri de suprapunere. Singura diferență este
că în cazul calculării distanței minime în vederea alegerii unui patch optim intervin și hărțile
imaginilor sursă și respectiv țintă în variantă necompletată. Din cadrul acestora sunt extrase
corespondentele suprapunerilor care interveneau până acum în explicații.

Suprapunere_vertical_linia_1_2=Target_correspondence_2_completat(row1:row1+(L
-1),col-round(1/6*L):col -1,:);
Suprapunere_vertical_Patch_comparatie=P_comparatie_gray_1(a_suprapunere_1,b_s
uprapunere_1);

41
Suprapunere_vertical_linia_1_1 = Target_correspondence_2 (row1:row1+(L -1),col-
round(1/6*L):col -1,:);
D_1=sum(sum(round(A*(double(Suprapunere_vertical_linia_1_2) –
double(Suprapunere_vertical_Patch_comparatie)).^2+(1 –
A)*(double(Suprapunere_vertical_Patch_comparatie) –
double(Suprapunere_vertical_linia_1_1)).^2))) ;

Totodată paramerul care iși schimbă valoarea în cadrul acestei etape este e1 acesta devenind :

e1=round(A*(double(Suprapunere_vertical_linia_1_2) –
double(Suprapunere_vertical_Patch_comparatie_intreg)).^2+(1 –
A)*(double(Suprapunere_vertical_Patch_comparatie_intreg) –
double(Suprapunere_vertical_linia_1_1)).^2);

Și ceilal ți parametri încadra ți în aceeași categorie cu aceștia se modifică de la o parcurg ere la
cealalt ă necesitând atenție sporită coordonatele acestora. Raționamentul este la fel ca și cel
prezentat în cadrul etapei a treia , imaginea fiind în final afișată, rezultatele putând fi observate .
3.5 Tratarea excepțiilor care apar în procesul de si nteză
3.5.1 Etapa a doua
3.5.1.1 Completarea primei linii
Dacă dimensiunea imaginii nou create nu este multiplu întreg al dimensiunii patch -ului ales,
ultimul patch nu va fi copiat în întregime. În acest caz va fi introdusă o constrângere suplimentră.
Această situație se tratează în mod special prin intermediu u nei condiții if.

if (columnsBig -(col+L-round(1/6*L) -1))<=L-round(1/6*L)

Se extrage valoarea diferenței dintre punctul curent și dimensiunea imaginii . Această valoare
urmează a fi stocată în cadrul parametrului dif:

dif=columnsBig -(col+L-round(1/6*L) -1);

Mai întâi se salvează valoarea ultimului bloc completat în cadrul imaginilor. Acesta este
căutat dupa același indice menționat mai sus.

Patch_final_linie_1=celula_Patch{index_1};
Patch_final_linie_1_R=celula_Patch_R{index_1};
Patch_final_linie_1_G=celula_Patch_G{index_1};
Patch_final_linie _1_B=celula_Patch_B{index_1};
Suprapunere_vertical_linia_4 = Patch_final_linie_1(1:1+(L -1),1+L-
round(1/6*L):1+L -1);
Suprapunere_vertical_linia_4_R=Patch_final_linie_1_R(1:1+(L -1),1+L-
round(1/6*L):1+L -1);
Suprapunere_vertical_linia_4_G=Patch_ final_linie_1_G(1:1+(L -1),1+L-
round(1/6*L):1+L -1);
Suprapunere_vertical_linia_4_B=Patch_final_linie_1_B(1:1+(L -1),1+L-
round(1/6*L):1+L -1);

Se urmărește găsirea unei valori pentru completat astfel că se extrag din nou în mod aleator
10% patch -uri și se completează din nou toate celulele. Extragerea valorilor aleatorii are loc din
cadrul imaginii pe nivele de gri. Mai apoi sunt extrase si cele pentru color utilizând aceleași
valori ale paramatrilor. Se realizează calculul distanței minime dintre suprapunerile verticale ale

42
celor două bucăți. Având toate valorile posibile se aplică aceeași regulă și anume extragerea
valorii minime identificată î n interiorul celulei pentru distața SSD. Pentru acest minim se obține
indexul și valoarea. După acest index se extrag din cadrul celulelor cu pach -uri de completat
pentru straturile R, G, B, acele valori corect identificate. După aceea se inserează în ima gini
aceste valori găsite respectând pozițiile de inserat și ținând cont devaloarea parametrului dif
după cum urmează :

a_Patch_inserat_linie_4=x_4:x_4+(L -1);
b_Patch_inserat_linie_4=y_4+round(1/6*L):y_4+round(1/6*L)+dif -1;
Patch_inserat_4=Img_gray(a_Patch_inserat_linie_4,b_Patch_inserat_linie_4);
Patch_inserat_4_R=Img_color_R(a_Patch_inserat_linie_4,b_Patch_inserat_linie_4
);
Patch_inserat_4_G=Img_color_G(a_Patch_inserat_linie_4,b_Patch_inserat_linie_4
);
Patch_inserat_4_B=Img_color_B(a_Patch_inserat_linie_4,b_Patch_inserat_linie_4
);

La finalul fiecărei iterații se afișează imaginea color recompusă din toate straturile care au
fost încărcate concomitent. Totuși până acolo mai trebuie realizat un pas și anume lipirea
propriu -zisă
a patch -ului găsit în interiorul imaginii :

New_img(row1:row2,col+L -round(1/6*L):columnsBig)= Patch_linie_4;
New_img_R(row1:row2,col+L -round(1/6*L):columnsBig)=Patch_linie_4_R;
New_img_G(row1:row2,col+L -round(1/6*L):columnsBig)=Patch_linie_4_G;
New_img_B(row1:row2,col+L -round(1/6*L):columnsBig)=Patc h_linie_4_B;
3.5.1.2 Completarea p rimei coloane
Ajungând la sfârșitul buclei for ne punem problema dacă a mai ramas spațiu după ultimul
patch inserat astfel că se implementează condiția:

if (rowsBig -(row+L-round(1/6*L) -1))<=L-round(1/6*L)

Variabila rowsBig reprezintă numărul total de linii din interiorul imaginii în care urmează a
fi insearte patch -uile. Și verificăm spațiul rămas necompletat de la ultima valoare lipită și până la
ultima li nie. Această valoare se stochează în variabila dif:

dif=rowsBig -(row+L-round(1/6*L) -1);

După aceea se dorește compararea suprapunerilor dintre ultimul bloc inserat și cele 10%
bocuri extrase în mod aleator astfel că se reia valoarea ultimului patch din c adrul fiecarei
imagini :

Patch_final_coloana_1=celula_Patch{index_2};
Patch_final_coloana_1_R=celula_Patch_R{index_2};
Patch_final_coloana_1_G=celula_Patch_G{index_2};
Patch_final_coloana_1_B=celula_Patch_B{index_2};

Pentru e le se extrag porțiunile suprapunerilor orizontale din parte de jos care urmează a fi
comparate.

Suprapunere_orizontal_coloana_5 = Patch_final_coloana_1(1+L –
round(1/6*L):1+L -1,1:1+(L-1));
Suprapunere_orizontal_coloana_5_R=Patch_final_coloana_1_R(1+L –
round(1/6*L):1+L -1,1:1+(L -1));

43
Suprapunere_orizontal_coloana_5_G=Patch_final_coloana_1_G(1+L –
round(1/6*L):1+L -1,1:1+(L -1));
Suprapunere_orizontal_coloana_5_B=Patch_final_coloa na_1_B(1+L –
round(1/6*L):1+L -1,1:1+(L -1));

Are loc din nou extragerea ale atoare a patch -urilor suprapunerile având aeleași coordonate
roportate la dimensiunea totală a unui patch. Valorile sunt de asemenea stocate în cadrul unor
celule. Și de această dată se ține cont de partea din bloc ce urmează a fi inserată pe poziția
identificată ca fiind liberă. Acum ea are dimensiuni variabile în funcție de dimensiunile imaginii
de ieșire și de valoarea parametrului dif:

a_Patch_inserat_linie_5= x _5+round(1/6*L): x_5+round(1/6*L)+dif -1;
b_Patch_inserat_linie_5= y_5: y_5+(L -1);
Patch_inserat_5=Img_gray(a_Patch_inserat_linie_5,b_Patch_inserat_linie_5);
Patch_inserat_5_R=Img_color_R(a_Patch_inserat_linie_5,b_Patch_inserat_linie_5
);
Patch_inserat_5_G=Img_color_G(a_Patch_inserat_linie_5,b_Patch_inserat_linie_5
);
Patch_inserat_5_B=Img_color_B(a_Patch_inserat_linie_5,b_Patch_inserat_linie_5
);

În continuare au loc aceleași etape ca și cele prezentate în cadrul paragrafului 3.2.2
Completarea primei coloane .
3.5.1.3 Completarea zonei din mijloc
Se ajunge din nou în pu nctul în care se dorește verificarea spațiului rămas și completarea
acestuia cu bucata de bloc necesară. Doar că de acestă dată se pune acestă problemă de două ori.
Mai înt âi în cadrul parcurger ii pe linii, caz în care fiecare linie corespunzătoare porțiun ii din
mijloc primește o completare în capătul din dreapta, iar mai apoi parcurgerea are loc pe coloane,
situație în care se întamplă același lucru doar că de această dată completarea se realizează în
partea de jos a patch -urilor.
Pentru prima situație în care patch -urile sunt completate pe linii are loc verificarea
dimensiunii rămase libere, acțiune prezentă prin intermediul următoarei condiții :

if (columnsBig -(l+L-round(1/6*L) -1))<=L-round(1/6*L)

Această condiție este prezentă în cadrul buclei for ce asigură parcurgerea pe coloane, cel din
interior. Se calculează această valoare a spațiului necompletat și se stochează în interiorul
variabilei dif:

dif=columnsBig -(l+L-round(1/6*L) -1);

Se extrag din nou suprapunerile corespunzătoare , prezente în cadrul imaginii completate,
caracteristice ultimului patch completat. Acest lucru se realizează atât pentru imaginea pe nivele
de gri cât și pentru porțiunile imaginii color urmând a fi concatenate după același principiu
prezentat și în cadrul etapei propriu -zise, cu excepția că de această dată se ține cont de alte valori
ale coordonatelor , întrucât la finalizarea etapei trecute au fost salvate alte valori ale pozițiilor :

Suprapunere_mijloc_vertical_6= New_img(k -round(1/6*L):k+L -round(1/6*L) -1,l+L-
2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_orizontal_6= New_img(k -round(1/6*L):k -1,l+L-
round(1/6*L):columnsBig,:);
Suprapunere_mijloc_6=[Suprapunere_mijloc_orizo ntal_6(:);Suprapunere_mijloc_ve
rtical_6(:)];

44
Suprapunere_mijloc_vertical_6_R=New_img_R(k -round(1/6*L):k+L -round(1/6*L) –
1,l+L-2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_vertical_6_G=New_img_G(k -round(1/6*L):k+L –
round(1/6*L) -1,l+L-2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_vertical_6_B=New_img_B(k -round(1/6*L):k+L –
round(1/6*L) -1,l+L-2*round(1/6*L):l+L -round(1/6*L) -1,:);

Suprapunere_mijloc_orizontal_6_R=New_img_R(k -round(1/6*L):k -1,l+L-
round(1/6*L):columnsBig,:);
Suprapunere_mijloc_orizontal_6_G=New_img_G(k -round(1/6*L):k -1,l+L-
round(1/6*L):columnsBig,:);
Suprapunere_mijloc_orizontal_6_B=New_img_B(k -round(1/6*L):k -1,l+L-
round(1/6*L):columnsBig,:);

Așa cum am amintit ele urmează a fi concatenate , acest lucru ajutând în cazul calculării unei
viitoare distanțe minime.

Suprapunere_mijloc_6_R=[Suprapunere_mijloc_orizontal_6_R(:);Suprapunere_mijlo
c_vertical_6_R(:)];

Suprapunere_mijloc_6_G=[Suprapunere_mijloc_orizontal_6_G(:);Suprapunere_mijlo
c_vertical_6_G(:)];

Suprapunere_mijloc_6_B=[Suprapunere_mijloc_orizontal_6_B(:);Suprapunere_mijlo
c_vertical_6_B(:)];

Are loc după același principiu extragerea aleat oare a 10% patch -uri pentru care se determină
valoarea și indexul distanței minime. În baza acesteia se alege cel mai asemănător patch care
urmează a fi inserat . Această inserare de asemenea ține cont de valoarea parametrului dif astfel
că avem :

a_Patch_inserat_mijloc_6=x_6+round(1/6*L):x_6+(L -1);
b_Patch_inserat_mijloc_6=y_6+round(1/6*L):y_6+round(1/6*L)+dif -1;
Patch_inserat_6= Img_gray(a_Patch_inserat_mijloc_6,b_Patch_inserat_mijloc_6);
Patch_inserat_6_R=Img_color_R(a_Patch_inserat_mijloc_6,b_Pa tch_inserat_mijloc
_6);
Patch_inserat_6_G=Img_color_G(a_Patch_inserat_mijloc_6,b_Patch_inserat_mijloc
_6);
Patch_inserat_6_B=Img_color_B(a_Patch_inserat_mijloc_6,b_Patch_inserat_mijloc
_6);

Avem iarăși nevoie de adăugarea regiunii în cadrul conținutului imag inilor și de afișarea
acestora. Lucrurile se petrec în mod similar și pentru cealaltă poțiune din imagine care a rămas
necompletată. Este vorba de ultima linie de la baza imaginii. Acest lucru il realizăm cu ajutorul
condiției:

if (rowsBig -(k+L-round(1/6* L)-1))<=L-round(1/6*L)

Valoarea este stocată în variabila dif=rowsBig -(k+L-round(1/6*L) -1). Are loc
parcurgerea fiecărei coloane astfel încat să poată fi indicată și poziția următoare care trebuie
completată , acțiune realizată prin intermediu unei bucle for:

for l=column2+1:L -round(1/6*L):columnsBig -(L-round(1/6*L))+1

Pe măsura parcurgerii au loc aceleași acțiuni întâlnite la pasul precedent. Se extrag 10%
patch -uri aleatore pentru care se compară suprapunerile orizontale cu cele ale patch -ului
completat. Se calculează valoarea distanței minime dintre cele doua suprafețe și se alege
valoarea ei minimă . Se extrage patch -ul corespunzător iar mai apo i se inserează în imagine din
nou având în vedere valoarea parametrului dif:

45

a_Patch_inserat_mijloc_8=x_8+round(1/6*L):x_8+round(1/6*L)+dif -1;
b_Patch_inserat_mijloc_8=y_8+round(1/6*L):y_8+(L -1);
Patch_inserat_8= Img_gray(a_Patch_inserat_mijloc_8,b_Patch_inserat_mijloc_8);
Patch_inserat_8_R=Img_color_R(a_Patch_inserat_mijloc_8,b_Patch_inserat_mijloc
_8);
Patch_inserat_8_G=Img_color_G(a_Patch_inserat_mijloc_8,b_Patch_inserat_mijloc
_8);
Patch_inserat_8_B=Img_color_B(a _Patch_inserat_mijloc_8,b_Patch_inserat_mijloc
_8);
3.5.1.4 Colțul din partea dreaptă jos
Totuși problema nu este în totalitate rezolvată întucât apare o porțiune în colțul din dreapta
jos care nu este tratată de niciuna dintre condițiile menționate mai su s. În această situație se pune
condiția :

if (columnsBig -(col+L-round(1/6*L) -1))<=L-round(1/6*L)

Imaginea nou creat ă fiind pătrată se tranduce prin faptul că valoarea diferen ței determinat e
pe cele două d irecții are aceeași valoare fiind egală cu:

dif=columnsBig -(col+L-round(1/6*L) -1);

Din cadrul imaginii completate se extrage suprapunerea în formă de L în mod similar cu cea
de la pasul precedent doar că de această dată sunt foarte importanți indicii cu ajutorul cărora ne
raportăm la poziția corespunzătoare după cum se poate observa :

Suprapunere_mijloc_vertical_colt_R=New_img_R(k+L -2*round(1/6*L):rowsBig,l+L –
2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_vertical_colt_G=New_img_G(k+L -2*round(1/6*L):rowsBig,l+L –
2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_vertical_ colt_B=New_img_B(k+L -2*round(1/6*L):rowsBig,l+L –
2*round(1/6*L):l+L -round(1/6*L) -1,:);
Suprapunere_mijloc_orizontal_colt_R=New_img_R(k+L -2*round(1/6*L):k+L –
round(1/6*L) -1,l+L-round(1/6*L):columnsBig,:);
Suprapunere_mijloc_orizontal_colt_G=New_img_G(k+L -2*round(1/6*L):k+L –
round(1/6*L) -1,l+L-round(1/6*L):columnsBig,:);
Suprapunere_mijloc_orizontal_colt_B=New_img_B(k+L -2*round(1/6*L):k+L –
round(1/6*L) -1,l+L-round(1/6*L):columnsBig,:);

Valorile suprapunerilor orizontale și a celor verticla le sunt și de această dată concatenate
rezultând astfel suprapunerea în formă de L care va fi comparată cu cea a patch -ului candidat :

Suprapunere_mijloc_colt_R=[Suprapunere_mijloc_orizontal_colt_R(:);Suprapunere
_mijloc_vertical_colt_R(:)];
Suprapunere_mijloc_c olt_G=[Suprapunere_mijloc_orizontal_colt_G(:);Suprapunere
_mijloc_vertical_colt_G(:)];
Suprapunere_mijloc_colt_B=[Suprapunere_mijloc_orizontal_colt_B(:);Suprapunere
_mijloc_vertical_colt_B(:)];

Din nou are loc extragerea unui număr de 10% patch -uri aleatoare. Pentru fiecare dintre ele
se extrage suprafața de suprapunere. În acest caz sunt importanți indicii considerați deoarece
acum ambele suprapuneri , atât cea verticală cât și cea orizontală depind de valoarea
parametrului dif, prin urmare și suprapunerea finală va depinde de această valoare după cum
urmează :

a_suprapunere_verticala_colt=x_colt:x_colt+round(1/6*L)+dif -1;

46
b_suprapunere_verticala_colt=y_colt:y_colt+round(1/6*L) -1;
Suprapunere_mijloc_Patch_comparatie_colt_1=Img_gray(a_suprapunere _verticala_c
olt,b_suprapunere_verticala_colt);

a_suprapunere_orizontala_colt=x_colt:x_colt+round(1/6*L) -1;
b_suprapunere_orizontala_colt=y_colt+round(1/6*L):y_colt+round(1/6*L)+dif -1;

Suprapunere_mijloc_Patch_comparatie_colt_2=Img_gray(a_suprapunere_orizontala_
colt,b_suprapunere_orizontala_colt);
Suprapunere_mijloc_comparatie_colt=[Suprapunere_mijloc_Pa tch_comparatie_colt_
2(:);Suprapunere_mijloc_Patch_comparatie_colt_1(:)];

Se determină din nou valoarea și indexul distanței minime calculată între cele două suprafețe
considerate mai sus, astfel că pentru determinarea acestor parametri se aplică exact analogia
explicată în cadrul pasului precedent pentru a putea fi ales un bloc asemănător într -o cât mai
mare proporție. Este inserat patch -ul cel mai potrivit care are coordonatele ghidate de același
parametru dif:

a_Patch_inserat_mijloc_colt=x_colt+round(1/6*L):x_colt+round(1/6*L)+dif -1;
b_Patch_inserat_mijloc_colt=y_colt+round(1/6*L):y_colt+round(1/6*L)+dif -1;
Patch_inserat_colt=Img_gray(a_Patch_inserat_mijloc_colt,b_Patch_inserat_mijlo
c_colt);
Patch_inserat_colt_R=Img_color_R(a_Patch_inserat_mijloc_colt,b_Patch_inserat_
mijloc_colt);
Patch_inserat_colt_G=Img_color_G(a_Patch_inserat_mijloc_colt,b_Patch_inserat_
mijloc_colt);
Patch_inserat_colt_B=Img_color_B(a_Patch_inserat_mijloc_colt,b_Patch_inserat_
mijloc_colt);

Astfel ia final etapa a doua a algoritmului pentru sinteza de texturi.
3.5.2 Etapa a treia
Această etapă presupune aceleași operații ca cele prezente în cadrul celei de -a doua etape . În
plus se dorește găsirea unui drum optim între ultimele două patch -uri inserate în cadrul primei
linii, a primei coloane, a zonei din mijlocul imaginii și nu în ultimul rând a colțului situat în
partea dreptă j os a imaginii. Din acest motiv se aplică aceleași raționamente ca cele prezentate în
cadrul capitolelor: 3.3.1 Completarea primei linii , 3.3.2Completarea primei coloane,
3.3.3Completarea zonei din mijloc . În felul acesta suprapunerea care ajunge să fie ataș ată
imaginii conține porțiuni din ambele blocuri, imaginea finală ajungând să adopte un aspect cât
mai natural, nepărând procesată. Efectul vizual conferit de etapa aceasta este unul de nealterare a
texturilor în cadrul îmbinărilor dintre patch -uri.
3.6 Recompunere și afișare imagini finale
Pentru a putea remarca rezultatele înregistrate în cadrul fiecărei etape și de asemenea
contorizarea acestora se utilizează o imagine finală care urmează a fi afișată. Aceasta conține
reuniunea imaginilor: New_img_R , New_img_G , New_img_B .

subplot(2,2,4);
Imagine_finala(:,:,1)=New_img_R;
Imagine_finala(:,:,2)=New_img_G;
Imagine_finala(:,:,3)=New_img_B;
imshow(Imagine_finala);
title('Noua imagine' );

47
4 Rezultate experimentale
Algoritmii implementați sunt integrați în cadrul unei interfețe aceasta av ând rolul de a
asigura mobilitatea utilizatorului și de a simplifica întelegerea funcționării. Ea a fost editata cu
ajutorul instrumentului GUIDE din Matlab. Această interfață presupune utiliza rea unor butoane
de tip ,,Push Button”, ,,Pop -up Menu”, de tip text de asemenea elemente de tip ,,axes”. Întreg
codul este integrat în cadrul interfeței prin intermediul fucțiilor callback a fiecărui buton prezent.
Rezultatele sunt obținute prin intermediu l modificării mai multor parametri. Butoanele de tip
,,Push Button” sunt utilizate pentru a testa etapele, cele de tip ,,Pop -up Menu” permit schimbarea
valorilor parametrilor utilizați iar cele de tip text au scopul de a -i livra utilizatorului informații
utile în ceea ce privește funcționarea. În cadrul instrumentelor de tip ,,axes” sunt ilustrate
imaginile. Interfața în faza incipientă poate fi observată în Figura 21.

Figura 21. Interfață program

În urma testării programului utiliz ând valori diferite ale parametrilor s -au observa t
fenomene relevante din punct de vedere al rezultatelor. Tipul texturilor reprezintă primul criteriu
de împărțire al rezultatelor pe categorii. Texturile stochastice, aleatoare, cele care nu au un model
clar d efinit sunt cel mai usor de sintetizat îndiferent de lungimea blocului. Îmbinările par mult
mai naturale și asta datorită texturii. În cazul texturilor regulate modelul ilustrat trebuie oare cum
respectat astfel încât să se poată genera o textură în parametri buni. În acest caz dimensiunea lui
,,L” trebuie să fie de ordinal modelului pentru ca un bloc s ă poată cuprinde informația necesară.
Lungimea patch -ului este un parametru foarte important întrucât poate determina rezultatul
sintezei. Interfața p une la dispoziția utilizatorului alegerea atât a unor valori mici cât și a unora
mari. Acest parametru depinde de tipul texturii a așa cum am amintit anterior . Dac ă textura este
densă având multe detalii, un patch cu o lungime mare ar produce rezultatele ce le mai bune
întrucât acesta reușește să încadreze cat mai multe aspect e ce apar țin texturii, transferul dintre
blocuri nefiind observant.
În continuare se vor ilustra rezultatele înregistrate cu ajutorul tuturor celor trei metode de
sinteză aupra unor tex turi stochastice, extragând un bloc de dimensiune diferită. Numărul

48
blocurilor care se pot insera pe liniile imaginii de ieșire reprezintă de asemenea un parametru
foarte important. Acesta influiențează timpul de calcul. Pentru valori mar i ale lui ,,mp ” ne rezultă
un timp de întârziere mare iar pentru valori mici un timp de întârziere mic.

Primul exemplu ilustrează testarea algoritmilor de sinteză pe o textură stochastică. Se
consideră 𝐿=10 și 𝑚𝑝 =4. Rezultatele se pot observa în Figura 2 2, Figura 2 3 și Figura 2 4.

Figura 22. Prima etapă a sintezei de textură

Figura 23. A doua etapă a sintezei de textură

49

Figura 24. A treia etapă a sintezei de textură

Pentru a putea observa schimbările care apar în contextul modificării dimensiunii blocului au
fost realizate și simulări în care 𝐿=15 și 𝑚𝑝 =4. Ele pot fi observate în Figura 25, Figura 26
și Figura 27.

Următoarea textură utilizată este una cvasi -stochastică. Aceasta are un patch cu dimensiunea
𝐿=15 și 𝑚𝑝 =15. Rezultatele se pot observa în Figura 28, Figura 29 și Figura 30.

Figura 28. Prima etapă a sintezei de textură

Figura 25. Prima etapă a
sintezei de textură Figura 26. A doua etapă a
sintezei de textură Figura 27. A treia etapă a
sintezei de textură

50

Figura 29. A doua etapă a sintezei de textură

Figura 30. A treia etapă a sintezei de textură

Pentru a putea observa schimbările în contextul modificării dimensiunii blocului au fost
realizate și simulări în care 𝐿=10 și 𝑚𝑝 =15. Ele pot fi observate în Figura 31, Figura 32 și
Figura 33.

51

Figura 31. Prima etapă a
sintezei de textură Figura 32. A doua etapă a
sintezei de textură Figura 33. A treia etapă a
sintezei de textură

Un alt tip de textură asupra căreia sunt realizate rezultatele este textur a neregulată . Aceasta
are un patch cu dimensiunea 𝐿=14 și 𝑚𝑝 =10. Rezultatele se pot observa în Figura 34, Figura
35 și Figura 3 6.

Figura 34. Prima etapă a sintezei de textură

Figura 35. A doua etapă a sintezei de textură

52

Figura 36. A treia etapă a sintezei de textură

Pentru a putea fi observate schimbările în contextul modificării dimensiunii blocului au fost
realizate simulări în care 𝐿=20 și 𝑚𝑝 =10. Ele pot fi observate în Figura 37, Figura 38 și
Figura 39.

Figura 37. Prima etapă a
sintezei de textură Figura 38. A doua etapă a
sintezei de textură Figura 39. A treia etapă a
sintezei de textură

Un alt tip de textură asupra căreia se realizează rezultate este textura cvasi -regulată. Aceasta
are un patch cu dimensiunea 𝐿=10 și 𝑚𝑝 =5. Rezultatele se pot observa în Figura 40, Figura
41 și Figura 42.

53

Figura 40. Prima etapă a sintezei de textură

Figura 41. A doua etapă a sintezei de textură

54

Figura 4 2. A treia etapă a sintezei de textură

Pentru a putea fi observate schimbările în contextul modificării dimensiunii blocului au fost
realizate simulări în care 𝐿=15 și 𝑚𝑝 =5. Ele pot fi observate în Figura 43, Figura 44 și
Figura 45.

Figura 43. Prima etapă a
sintezei de textură Figura 44. A doua etapă a
sintezei de textură
Figura 45. A treia etapă a
sintezei de textură

Un alt tip de textură asupra căreia sunt realizate rezultatele este textura regulată . Aceasta are
un patch cu dimensiunea 𝐿=15 și 𝑚𝑝 =8. Rezultatele se pot observa în Figura 46, Figura 47
și Figura 48.

Figura 46. Prima etapă a sintezei de textură

55

Figura 47. A doua etapă a sintezei de textură

Figura 48. A treia etapă a sintezei de textură

Pentru a putea fi observate schimbările în contextul modificării dimensiunii blocului au fost
realizate simulări în care 𝐿=20 și 𝑚𝑝 =8. Ele pot fi observate în Figura 49, Figura 50 și
Figura 51.

Figura 49. Prima etapă a
sintezei de textură
Figura 50. A doua etapă a
sintezei de textură
Figura 51. A treia etapă a
sintezei de textură

56
S-au realizat de asemenea simulări și pentru algoritmul de transfer de textură. În acest caz s -a
stabilit ca dimensiunea blocului să fie 𝐿=27, întruc ât algoritmul realizează două iterații și
fiecare determină scaderea valorii lui 𝐿 de câte trei ori. Rezultatele obținute sunt ilustrate în
Figura 52 , 53, 54, 55, 56, 57, 58 și de asemenea în Anexa 1 .

Figura 52. Transfer de textură

Figura 53. Imagine sursă Figura 54. Imagine țintă Figura 55. Transfer de textură

Figura 56. Imagine sursă Figura 57. Imagine țintă Figura 58. Transfer de textură

57
5 Concluzii
În concluzie, în urma implementării algoritmilor de sinteză și respectiv de transfer de textură
s-au obținut rezultatele dorite. Acestea ilustrează intr -adevăr aspectele pe care articolul de la baza
proiectului le dezvoltă. Au fost implementate trei metode ce au ca scop si nteza texturii fiecare
fiind o extindere a celei precedente. În cadrul acestor aplicații de sinteză se pot vedea clar
diferențele de la o etapă la cealaltă în ceea ce privește precizia potrivirii blocurilor și respectiv
tranziția de la un bloc la celălalt. Rezultatele ajung să fie vizibil îmbunătățite astfel că s -a putut
dovedi faptul că algoritmii bazați pe blocuri sunt intr -adevăr eficienți.
Metodele de transfer de textură pot fi perfecționate și chiar extinse ajungând să fie aplicate
texturilor tridimen sionale. De asemenea aceste metode pot fi optimizate din punct de vedere al
timpului de răspuns, putând fi totodată mai rapide . Viteza de procesare ajunge să crească .
De asemenea transferul de textură ilustrează rezultate satisfăcătoare. S-a obținut exact ceea
ce se dorea. În cadrul implementării acestui proiect s -au realizat două iterații. Totuși metoda
poate fi îmbunătățită prin creșterea numărului acestora la cinci sau chiar mai mult e. În acest caz
transferul ajunge sa fie mult mai precis patch -urile scă zând de câte trei ori cu fiecare iterație.
Astfel dimensiunea lor este mai mică și textura ajunge sa fie mai fină. Aspectul vizual obținut
este unul placut.

Similar Posts