examen
July 12, 2024
[2]: #Exercice I
import numpy as np
import cv2
import [Link] as plt
from skimage import io, color
from [Link] import threshold_otsu
from [Link] import remove_small_objects
from [Link] import binary_fill_holes
from PIL import Image
#I. Histogramme
def histogramme(image):
if len([Link]) == 3: # Image couleur
image = color.rgb2gray(image)
hist, bins = [Link]([Link](), bins=256, range=[0, 1])
[Link](figsize=(10, 5))
[Link](121)
[Link](image, cmap='gray')
[Link]('Image en niveaux de gris')
[Link](122)
[Link](bins[:-1], hist, width=1/256)
[Link]('Histogramme')
[Link]('Niveaux de gris')
[Link]('Nombre de pixels')
[Link]()
#Utilisation
image = [Link]('[Link]')
histogramme(image)
1
[3]: #II. Binarisation
#Question 1
def binarisation_man(image, seuil):
if len([Link]) == 3:
image = color.rgb2gray(image)
binaire = image > seuil
[Link](figsize=(10, 5))
[Link](121)
[Link](image, cmap='gray')
[Link]('Image originale')
[Link](122)
[Link](binaire, cmap='gray')
[Link](f'Image binarisée (seuil = {seuil:.2f})')
[Link]()
#Question 2
def binarisation_auto(image):
if len([Link]) == 3:
image = color.rgb2gray(image)
seuil = threshold_otsu(image)
binaire = image > seuil
2
[Link](figsize=(10, 5))
[Link](121)
[Link](image, cmap='gray')
[Link]('Image originale')
[Link](122)
[Link](binaire, cmap='gray')
[Link](f'Image binarisée (seuil auto = {seuil:.2f})')
[Link]()
#Utilisation
image = [Link]('[Link]')
seuil_manuel = float(input("Entrez le seuil de binarisation (entre 0 et 1) : "))
binarisation_man(image, seuil_manuel)
binarisation_auto(image)
Entrez le seuil de binarisation (entre 0 et 1) : 0.4
[4]: #Question 3
# Fonction pour ouvrir et afficher une image
def ouvrir_et_afficher_image(image_path):
3
image = [Link](image_path)
[Link](figsize=(12, 6))
[Link](2, 3, 1)
[Link]('Image originale')
[Link](image)
[Link]('off')
return image
# Fonction pour transformer l'image couleur en image monochrome
def transformer_en_monochrome(image):
gray_image = [Link]('L')
gray_image = [Link](gray_image)
[Link](2, 3, 2)
[Link]('Image en niveaux de gris')
[Link](gray_image, cmap='gray')
[Link]('off')
return gray_image
# Fonction pour calculer et afficher l'histogramme de l'image monochrome
def afficher_histogramme(image):
[Link](2, 3, 3)
[Link]('Histogramme')
[Link]([Link](), bins=256, range=[0, 256])
[Link]('Intensité')
[Link]('Nombre de pixels')
# Fonction pour binariser l'image
def binariser_image(gray_image):
threshold = [Link](gray_image)
binary_image = gray_image > threshold
binary_image = binary_image.astype(np.uint8) * 255
return binary_image
# Fonction pour nettoyer l'image binaire
def nettoyer_image_binaire(binary_image):
binary_image = binary_image // 255
binary_image = remove_small_objects(binary_image.astype(bool), min_size=500)
binary_image = binary_fill_holes(binary_image).astype(np.uint8)
return binary_image * 255
#Utilisation
# Chemin de l'image
image_path = '[Link]'
# Exécution des fonctions
image = ouvrir_et_afficher_image(image_path)
gray_image = transformer_en_monochrome(image)
afficher_histogramme(gray_image)
4
binary_image = binariser_image(gray_image)
[Link](2, 3, 4)
[Link]('Image binaire initiale')
[Link](binary_image, cmap='gray')
[Link]('off')
cleaned_image = nettoyer_image_binaire(binary_image)
[Link](2, 3, 5)
[Link]('Image binaire après nettoyage')
[Link](cleaned_image, cmap='gray')
[Link]('off')
plt.tight_layout()
[Link]()
[5]: #Question 4
image_path="[Link]"
# Ouvrir l'image
img = [Link](image_path)
# Convertir l'image en niveaux de gris
if [Link] != 'L':
img = [Link]('L')
# Définir les seuils de binarisation
threshold1 = 100 # Exemple de seuil
threshold2 = 150 # Exemple de second seuil pour combinaison
# Binarisation de l'image avec le premier seuil
5
binary_image1 = [Link](lambda p: p > threshold1 and 255)
# Binarisation de l'image avec le second seuil
binary_image2 = [Link](lambda p: p > threshold2 and 255)
# Conversion en tableaux numpy pour les opérations logiques
binary_array1 = [Link](binary_image1)
binary_array2 = [Link](binary_image2)
# Opérations logiques pour combiner les binarisations
combined_binary_array = np.logical_or(binary_array1, binary_array2)
# Conversion de l'image combinée en Image PIL
combined_binary_image = [Link](np.uint8(combined_binary_array) * 255)
# Inverser les couleurs pour obtenir les chiffres en blanc sur fond noir
final_binary_image = [Link]([Link]([Link](combined_binary_image)))
# Afficher les images
[Link](figsize=(15, 5))
[Link](1, 4, 1)
[Link](img, cmap='gray')
[Link]('off')
[Link]('Image Monochrome')
[Link](1, 4, 2)
[Link](binary_image1, cmap='gray')
[Link]('off')
[Link]('Binarisation avec Seuil 1')
[Link](1, 4, 3)
[Link](binary_image2, cmap='gray')
[Link]('off')
[Link]('Binarisation avec Seuil 2')
[Link](1, 4, 4)
[Link](final_binary_image, cmap='gray')
[Link]('off')
[Link]('Image Binarisée Finale')
plt.tight_layout()
[Link]()
# Afficher les seuils utilisés
print(f"Seuil 1: {threshold1}")
print(f"Seuil 2: {threshold2}")
6
Seuil 1: 100
Seuil 2: 150
[ ]: