La fonction vert manipule une image en réduisant les composantes rouge et bleue de chaque pixel à zéro pour créer une version où seule le vert est présent.
La fonction "canaux" opère sur une image en utilisant une variable temp pour échanger les valeurs des canaux rouge et bleu pour chaque pixel, puis sauvegarde l'image modifiée en format PNG dans un répertoire de sortie spécifié.
On utilise la moyenne des trois couleurs RGB pour donner une image en noir et blanc.
La fonction “négatif” prend l’inverse de chaque composante r, g, b des couleurs de notre image.
On divise nos couleurs par la largeur de l’image.
Il faut s’assurer de copier l’image avant d’appliquer le miroir, pour éviter de manipuler des pixels déjà manipulés en parcourant l’image.
On change la couleur d’un pixel sur 7. Pour chaque pixel modifié, on lui génère une couleur aléatoire.
Après avoir créé une image avec de nouvelles dimensions, on inverse les coordonnées x et y. Pour obtenir une rotation dans le sens des aiguilles d’une montre au lieu de l’inverse, on applique un miroir horizontal sur la coordonnée x.
L’image du milieu est un test, l’image de droite est le résultat final. L’effet souhaité est présent mais on a rencontré une petite difficulté : on ne commence qu’au 20 e pixel et on ignore les 20 derniers pixels. Cela est dû au fait qu’on essayait d’accéder à des pixels qui sortent de l’image.
Pour l’assombrissement, on prend le carré de chaque couleur.
Pour l’éclaircissement, on prend la racine carrée de chaque couleur.
On applique la formule du cercle : ( x − a )^2 + ( y − b )^2 = r^2 avec :
- x et y coordonnées du pixel
- a et b coordonnées du centre du cercle
- r le rayon du cercle.
On ajoute une thickness pour ne colorier qu’une fine partie du disque dessiné auparavant.
On dessine 6 cercles supplémentaires autour du cercle central. Chaque nouveau cercle voit son centre être éloigné d’un rayon du centre du cercle initial, suivi d’un pivot de multiple de 60°. On obtient PI avec arccos(-1).
Pendant qu’on parcourt la grande image, on reboucle sur chaque cinquième pour dessiner le logo entièrement, nous laissant avec 4 boucles imbriquées.
On traite chaque cas de figure séparément, selon la ressemblance de comportement :
- les petites images dont la ligne et la colonne sont impaires
- les lignes impaires dont la colonne est paire
- pour les lignes paires : d’abord les colonnes impaires puis les colonnes paires
On prend un pixel de coordonnées et dimensions aléatoires et le positionne à des coordonnées aléatoires. Les valeurs aléatoires ont des valeurs minimales et des valeurs maximales pour obtenir l’effet souhaité.
On a séparé partie réelle et partie imaginaire parce que cela nous semblait plus clair. Pour se rapporter à l’intervalle [-2, 2], on a utilisé le produit en croix suivant : (x - a) * (d - c) / (b - a) + c avec x = valeur lue, a = valeur lue min, b = valeur lue max, c = valeur sortie min, d = valeur sortie max.
Le pixel subit une rotation plus conséquente autour du pixel central à mesure qu’il s’éloigne de ce dernier.
On applique la matrice 4x4 de Bayer à nos pixels pour voir si on les transforme en noir ou en blanc.
La luminosité d’un pixel est calculée en faisant la moyenne de ses 3 composantes r, g, b. Après avoir trouvé la luminosité la plus faible et la plus forte, on se rapporte à l’intervalle [0, 1] grâce à la formule citée à la fractale de Mandelbrot.
Le flou était relativement complexe à faire puisqu’il fallait savoir pour chaque pixel, comment itérer sur le carré de pixels l’entourant et appliquer les bons calculs. On n’a pas utilisé une matrice puisque toutes ses valeurs sont égales (1/taille^2), mais plutôt un float.
Les autres convolutions étaient en revanche beaucoup plus simples puisqu’il s’agit quasiment de la même fonction que pour le flou. Il suffisait d’appliquer une matrice différente pour obtenir un résultat différent.