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 :
>>> bin(179)
'0b10110011'
>>> 179>>4
11
>>> bin(11) # On a bien décalé les bits de poids forts car '0b1011'=='0b00001011'
'0b1011'
Indice
Il faut à nouveau travailler pixel par pixel.
Indice
## decalePoidsForts
def decalePoidsForts(im):
"""
Cette fonction renvoie une image sous forme matricielle, dans laquelle les 4 bits de poids forts sont devenus les 4 bits de poids faibles
"""
L,C = np.shape(im)[0:2] # on recupere la taille en pixel des colonnes et lignes des images à traiter
resu = np.zeros((L,C,3),dtype=np.uint8) # pour stocker le résultat
for ligne in range(L): # double boucle pour travailler pixel par pixel
for colonne in range(C):
R = # A compléter
G = # A compléter
B = # A compléter
resu[ligne,colonne] = [R,G,B]
return resu
Solution
La fonction decalePoidsForts sera mise en ligne à la fin du TD.
# Pour aficher les deux images dans une même fenétre
plt.figure('décale des poids forts')
plt.subplot(121)
plt.title('l image secrète')
plt.imshow(secret)
plt.subplot(122)
plt.title('l image secrète décalée')
plt.imshow(secretDecalee)
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.