Projet: Synthèse de textures

Textures utilisées (photos originales)

Électronique: https://previews.123rf.com/images/helllbilly/helllbilly1504/helllbilly150400006/38992829-Printed-circuit-texture-background-Seamless-green-and-yellow-electronic-plate-pattern-vector-Circuit-Stock-Vector.jpg

Popcorn: https://previews.123rf.com/images/tonobalaguer/tonobalaguer1109/tonobalaguer110900850/10786851-Corn-popcorn-texture-view-from-glass-in-cinema-shop-Stock-Photo.jpg

CadPat: https://upload.wikimedia.org/wikipedia/commons/thumb/7/71/CADPAT_digital_camouflage_pattern_%28Temperate_Woodland_variant%29.jpg/150px-CADPAT_digital_camouflage_pattern_%28Temperate_Woodland_variant%29.jpg

Partie 1 : Échantillonnage aléatoire, sans chevauchement

Partie 2 : Chevauchement de blocs

Partie 3: Recherche de joints

Partie 4: Transfert de textures

La fonction est la suivante: texture_transfert( sample, patchsize, overlap, tol, source, a). 'patchsize' est la largeur du bloc qui est échantilloné dans sample (l'image de texture). L'image créée sera de la taille maximale possible en concaténant des blocs de taille patchsize sans dépasser les dimension de l'image source originale. L'image obtenue est donc légèrement inférieure à l'image source.

Le transfert de texture utilise quasiment le même code que pour la recherche de joints, à l'exception qu'on ajoute une contrainte qui force le bloc choisi à ressembler à son bloc correspondant dans l'image source. Le facteur 'a' correspond à l'importance du sdc dans les zones d'overlap, alors que (1-a) est l'importance du sdc sur l'image source. Le SDC total utilisé pour choisir le meilleur bloc est le suivant: SDC = a * SDC_overlap + b(1-a)*SDC_imgsource. Le facteur b permet de normaliser SDC_imgsource selon le nombres de pixels dans les zones d'overlap. Ce facteur est essentiel, car le nombre de pixels d'un bloc est beaucoup plus grand que dans les zones d'overlap. Pour mesurer la ressemblance du bloc choisi avec l'image source, il aurait été plus efficace de comparer la luminance des 2 blocs. Malheureusement, ma version de Matlab ne permet pas de convertir une image RGB en LAB. J'utilise donc simplement la version en grayscale des images pour les comparer.

patchsize = height_texture / 12, a = 0.2 ; patchsize = height_texture / 20, a = 0.5

On peut voir qu'augmenter 'a' permet une meilleure continuité de l'image. Une valeur de 'patchsize' plus petite permet de mieux faire ressortir les détails, mais rallonge drastiquement le temps de calcul!

Partie 5: Photos personnelles

David + écailles

Écailles: https://s-media-cache-ak0.pinimg.com/originals/ab/80/33/ab80331d23d9366092d4f715aeea8300.jpg

J'ai eu de la difficulté à trouver les bons paramètres. La troisième image est avec une taille de bloc très petite. On voit bien les détails du visage, mais très peu les écailles, et le temps de calcul a été très, très long. La première photo a une taille de bloc un peu trop grande pour voir les traits du visage. Un compromis a été trouvé sur la deuxième.

David + cantaloup

Pomme + pain

Ce transfert est mieux réussi. Le fait que les deux images soient à résolution semblable aide a aidé à trouver les bons paramètres.