Skip to content

Workshop #44

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 6 commits into from
Aug 8, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 6 additions & 6 deletions content/Workshop/01-Sujet.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,14 +2,14 @@

Durant ce workshop vous aller apprendre à coder des effets sur des images. (Comme on peut en trouver dans Photoshop, les filtres Instagram, etc.). Ce sera une première introduction à certains concepts de synthèse d'image, et une bonne occasion de vous entraîner en C++ !

| ![](output/emboss.png) | ![](output/outline.png) |![](output/glitch.png) |
|---|----|----|
| ![](output/ordered_dithering.png) | ![](output/difference_of_gaussians.png) | ![](output/kuwahara.jpg) |
| ![](output/rosace.png) | ![](output/diamond_square_colored.png) | ![](output/mandelbrot.png) |
| ![](output/emboss.png) | ![](output/outline.png) | ![](output/glitch.png) |
| --------------------------------- | --------------------------------------- | -------------------------- |
| ![](output/ordered_dithering.png) | ![](output/difference_of_gaussians.png) | ![](output/kuwahara.jpg) |
| ![](output/rosace.png) | ![](output/diamond_square_colored.png) | ![](output/mandelbrot.png) |

## Attendus

Vous pouvez faire ce projet en solo ou à deux.
Ce projet est à faire en solo.

Nous allons vous proposer [une liste d'exercices](./Exercices), plus ou moins difficiles (la difficulté est indiquée par le nombre d'étoiles ⭐). Nous ne nous attendons pas à ce que vous fassiez tous les exercices, mais faites en un maximum ! **Et il faudra au minimum faire un exercice de niveau 3 ou plus (⭐⭐⭐).** Vous êtes aussi les bienvenu.es pour inventer vos propres effets ou en faire que vous avez vu quelque part, même si ils ne sont pas dans la liste !

Expand Down Expand Up @@ -92,7 +92,7 @@ int main()

## Rendu et Rapport

__*À rendre avant dimanche à 9h*__.<br/>
__*À rendre avant samedi à 23h59*__.<br/>
*Pour le rendu, il suffit de [mettre votre lien git ici](https://docs.google.com/spreadsheets/d/1x2uqvKdhndstidmW4xoWkNTlbwHFDWGlpohdb6TRORY/edit?usp=sharing)*. Attention, vérifiez bien que votre repo est en public, ou si il est en privé, pensez à m'inviter dessus ([*julesfouchy*](https://github.com/julesfouchy/)).

Pour le rapport, faites une section par exercice que vous avez fait. Montrez une image avant et après application de l'effet (comme c'est fait dans l'énoncé des exercices). Si vous jugez cela utile, vous pouvez mettre un petit texte expliquant des spécificités de l'algo que vous avez implémenté, et les pièges potentiels dans lesquels il ne faut pas tomber.
Expand Down
2 changes: 1 addition & 1 deletion content/Workshop/02-Planning.md
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,6 @@
## Vendredi

- [ ] *Cours* : Présentation de Markdown pour l'écriture du rapport
- [ ] Écriture du rapport (Vous avez jusqu'à dimanche 9h pour les rendre)
- [ ] Écriture du rapport (Vous avez jusqu'à samedi 23h59 pour le rendre)
- [ ] Préparation de la présentation pour celleux concerné.es
- [ ] Présentations l'après-midi
30 changes: 15 additions & 15 deletions content/Workshop/03-Exercices.md
Original file line number Diff line number Diff line change
Expand Up @@ -121,9 +121,9 @@ Chaque pixel va prendre comme couleur le rouge d'un pixel un peu à sa droite, s

## ⭐⭐ Luminosité

| ![](images/photo.jpg) | ![](output/luminosity+.jpg) |![](output/luminosity-.jpg) |
|---|----|----|
| Image originale | Après éclaircissement | Après assombrissement |
| ![](images/photo.jpg) | ![](output/luminosity+.jpg) | ![](output/luminosity-.jpg) |
| --------------------- | --------------------------- | --------------------------- |
| Image originale | Après éclaircissement | Après assombrissement |

<details>
<summary>Indice</summary>
Expand Down Expand Up @@ -348,9 +348,9 @@ Sur l'image ci-dessus j'ai utilisé de l'*ordered dithering* avec une matrice de

## ⭐⭐⭐(⭐) Normalisation de l'histogramme

| ![](images/photo_faible_contraste.jpg) | ![](output/normalize_histogram.jpg) |
|---|----|
| Avant | Après |
| ![](images/photo_faible_contraste.jpg) | ![](output/normalize_histogram.jpg) |
| -------------------------------------- | ----------------------------------- |
| Avant | Après |

L'algorithme consiste à trouver le pixel le moins lumineux et le pixel le plus lumineux de l'image, puis à appliquer une transformation à chaque pixel de sorte à ce que le pixel le plus sombre devienne un noir pur (`0`) et le plus lumineux devienne un blanc pur (`1`).<br/>
(PS : testez avec l'image `"images/photo_faible_contraste.jpg"`, vous verrez bien l'intérêt de l'effet.)
Expand Down Expand Up @@ -392,18 +392,18 @@ Conseil : une fois que vous savez que votre algo marche, si vous voulez tester a

### ⭐ Netteté, Contours, etc.

| ![](output/emboss.png) | ![](output/outline.png) |![](output/sharpen.png) |
|---|----|----|
| Emboss | Outline | Sharpen |
| ![](output/emboss.png) | ![](output/outline.png) | ![](output/sharpen.png) |
| ---------------------- | ----------------------- | ----------------------- |
| Emboss | Outline | Sharpen |

Une fois que vous avez implémenté l'algo générique de convolution qui prend n'importe quel kernel, vous pourrez trouver sur [ce site](https://setosa.io/ev/image-kernels/) une liste de kernels pour faire différents effets.

### ⭐⭐ Filtres séparables

| Box blur naïf, 100x100 | Box blur séparé, 100x100 |
|---|----|
| Box blur naïf, 100x100 | Box blur séparé, 100x100 |
| ---------------------------- | --------------------------------------------- |
| ![](output/big_box_blur.png) | ![](output/big_box_blur_separable_filter.png) |
| 7.44 secondes | 0.18 secondes |
| 7.44 secondes | 0.18 secondes |

Quand vous voulez faire un gros flou il faut augmenter la taille du kernel, ce qui peut considérablement ralentir l'algorithme. Heureusement, certains kernels ont une propriété qui nous permet de calculer leur convolution **BEAUCOUP** plus rapidement. Le *box blur* et le *gaussian blur* sont de tels kernels. Voici une vidéo expliquant tout ça :

Expand All @@ -422,9 +422,9 @@ Voici une vidéo expliquant l'algorithme :

## ⭐⭐⭐⭐⭐ K-means : trouver les couleurs les plus présentes dans une image

| ![](images/photo.jpg) | ![](output/k_means_2_colors.jpg) | ![](output/k_means_3_colors.jpg) | ![](output/k_means_16_colors.jpg) |
|---|----|----|----|
| Originale | 2 couleurs | 3 couleurs | 16 couleurs |
| ![](images/photo.jpg) | ![](output/k_means_2_colors.jpg) | ![](output/k_means_3_colors.jpg) | ![](output/k_means_16_colors.jpg) |
| --------------------- | -------------------------------- | -------------------------------- | --------------------------------- |
| Originale | 2 couleurs | 3 couleurs | 16 couleurs |

Trouvez les k couleurs les plus représentatives de l'image, puis assignez à chaque pixel la couleur dont il est le plus proche parmi les k.

Expand Down