La fonction decalePoidsForts

Question

Écrire une fonction decalePoidsForts(im) ayant pour arguments la forme matricielle de l'image à traiter et qui renvoie un nouveau tableau numpy dont les 4 bits de poids forts de chaque couleur pour chaque pixel sont devenus les 4 bits de poids faible. On utilisera les fonctions & et de décalage de bits proposée dans l'ANNEXE.

Tester la fonction sur secret.png.

Afficher l'image secrète d'origine et l'image décalée. Voit-on une différence ? Est-ce grave ?

Indice

Il faut que les bits de poids forts de l'image secrète soient décalés de quatre bits.

Exemple : '10110011' doit devenir '00001011'

Tester dans votre shell :

1
>>> bin(179)
2
'0b10110011'
3
4
>>> 179>>4
5
11
6
7
>>> bin(11) # On a bien décalé les bits de poids forts car '0b1011'=='0b00001011'
8
'0b1011'
9

Indice

Il faut à nouveau travailler pixel par pixel.

Indice

1
## decalePoidsForts
2
def decalePoidsForts(im):
3
    """
4
    Cette fonction renvoie une image sous forme matricielle, dans laquelle les 4 bits de poids forts sont devenus les 4 bits de poids faibles
5
    """
6
    L,C = np.shape(im)[0:2] # on recupere la taille en pixel des colonnes et lignes des images à traiter
7
    resu = np.zeros((L,C,3),dtype=np.uint8) # pour stocker le résultat
8
    for ligne in range(L): # double boucle pour travailler pixel par pixel
9
        for colonne in range(C):
10
            R = # A compléter
11
            G = # A compléter
12
            B = # A compléter
13
            resu[ligne,colonne] = [R,G,B]
14
    return resu
15

Solution

La fonction decalePoidsForts sera mise en ligne à la fin du TD.

1
# Pour aficher les deux images dans une même fenétre
2
plt.figure('décale des poids forts')
3
plt.subplot(121)
4
plt.title('l image secrète')
5
plt.imshow(secret)
6
plt.subplot(122)
7
plt.title('l image secrète décalée')
8
plt.imshow(secretDecalee)
9
plt.show()

L'image a été très fortement modifié. Elle a été très assombri. Le plus haut niveau de luminosité par couleur est au plus de 15.