Traitement image, suite
Nous allons effectuer des traitements différents de la semaine précédente sur l'image suivante:

Nous importons donc les mêmes modules, et la même méthode pour lire l'image:
| Python | |
|---|---|
Les 4 transformations étudiées sont : flou, contours, symetrie axe horizontal, rotation (par composée de symétrie), et en utilisant la méthode diviser pour régner.
1. Flou⚓︎
En modifiant chaque pixel par la moyenne du pixel et des 8 adjacents, on obtient un léger flou. Il nous faut donc pour chaque pixel calculer une moyenne à partir des pixels de gauche, du haut, de droite et du bas.
Nous allons alors rogner de 2 lignes et 2 colonnes pour toujours avoir des pixels sur les côtés. Il est aussi possible de ne pas rogner et de calculer une moyenne autrement pour les pixels du bord de l'image.
2. Contours⚓︎
Pour détecter les contours dans une image, il est possible d'utiliser le filtre de Laplace.
L'idée est de calculer une moyenne comme pour le flou mais avec des pondérations positives et négativess pour les pixels autour.
En donnant une pondération 8 au pixel central et -1 aux pixels adjacents, les pixels entourés de pixels de mêmes couleurs auront ainsi une couleur noire.
Remarque: pour éviter une structure conditionnelle, sans changer la valeur de cette moyenne pondérée.
il est possible pour chacun des 9 pixels du carré de compter 1 fois positivement celui du centre et 1 fois negativement tous les pixels.

3. Symétrie d'axe horizontal⚓︎
hauteur = img.shape[0]
Le code est assez simple, il suffit de remplacer le pixel[y][x] par pixel[hauteur - 1 - y][x]
Attention hauteur - 1 et pas hauteurcar y commence à 0 et finit à hauteur - 1. Sans cette précaution, nous aurions une sortie de tableau.
| Python | |
|---|---|
3. Rotation⚓︎
Une rotation de 90° anti-horaire peut être obtenue en compsant une symétrie d'axe horizontal et une autre symétrie d'axe la diagonale principale du carré.
Le code sera alors assez semblable à celui de la symétrie.
4. Rotation avec la méthode diviser pour régner.⚓︎
Rappel : la méthode diviser pour régner, divise un problème en plusieurs problèmes indépendants qui seront traités séparément avant d'être combinés.
Les 3 étapes sont : diviser, régner, combiner
Ici L'image est divisée en 4 parties par deux axes: un horizontal, un vertical
| Text Only | |
|---|---|
1 2 | |
Chacune des parties est transformée par rotation, puis
Les parties sont réassemblées d'ans l'ordre :
| Text Only | |
|---|---|
1 2 | |
Pour assembler les parties, nous utilisons deux méthodes np.hstack et np.vstack qui permettent de coller des tableaux (matrices) respectivement horizontalement et verticalement.
Remarque Cette utilisation du diviser pour régner est ici moins intéressante que pour le tri fusion. En effet, la résolution de chaque sous-problème n'ayant pas une compléxité quadratique, il n'y a pas de gain de compléxité temporelle globale.