Vous êtes sur la page 1sur 6

TP2 : Prétraitement d’images

Matière : Vision par ordinateur


Niveau : FIA3-GL-AL

E-mail : hajerwalhaziissat@gmail.com

Exercice1 : Histogramme.

1. Lire l’image « fruits.jpg».et affiche au niveau de gris.


2. Déterminer et afficher l’histogramme de l’image au niveau de gris (plt.hist) .
3. Améliorer le contraste en utilisant la méthode d’égalisation d’histogramme
(cv2.equalizeHist).
4. Lire l’image « fruits.jpg» en mode RGB ,déterminer et afficher l’histogramme couleur de
l’image(cv.calcHist) .

Exercice 2: Segmentation

1. Lire l’image « circles.png »et afficher au niveau de gris.


2. Créer le masque binaire en utilisant « cv2.threshold »
3. Segmenter l’image en utilisant « cv2.bitwise_and »
4. Lire l’image 'circles.png'et la convertir en image HSV
5. Créer des masques binaires qui désignent l’emplacement des cercles bleu, jaune et rouge
en utilisant « cv2.inRange » (voir annexe)
6. Afficher les résultats de segmentation en utilisant ces masques binaires

Exercice 3 : Transformée de Fourier

1. Lire l’image « images.jpg » .


2. Calculez la transformée de Fourier 2D de cette image (numpy.fft.fft2), faite le shift puis
visualisez et analysez le spectre d’énergie obtenu (numpy.fft.fftshift).
3. Restituer l'ordre initial des fréquences avec la fonction (numpy.fft.ifftshift) puis appliquer
la transformée de Fourier inverse avec la fonction (numpy.fft.ifft2)
4. Recopier le code de l’annexe , puis intégrer le code de filtre idéal dans l’annexe dans le
code de question 1 et afficher le résultat
5. Appliquer le filtre gaussien et le filtre idéal à basse fréquence et afficher les résultats.
6. Appliquer le filtre gaussien à haute fréquence et afficher le résultat.
7. Tester les mêmes filtres en utiliser l’image Lenna.jpg

Exercice 4: Filtre et détection de contour

1. Lire l’image « Lenna.jpg ».


2. Ajouter un bruit gaussien à l’image en utilisant random_noise

3. Appliquer sur l’image bruitée le filtre moyenneur à l’aide de la fonction cv2.blur


4. Appliquer sur l’image bruitée le filtre médian à l’aide de la fonction cv2.medianBlur
5. Appliquer sur l’image bruitée le filtre wiener à l’aide de la fonction restoration.wiener
6. Utiliser les filtres suivants pour détecter les contours de l’image « Lenna.jpg »
a. Filtre de Canny
b. Filtre de Laplacien
c. Filtre de Sobel

Exercice 5: Operateurs morphologiques

1. Lire et affiche l’image « circles.png »


2. Binariser l’image
3. Effectuer les opérateurs morphologiques suivante :
a. Érosion « cv2.erode»
b. Dilatation « cv2.dilate»
c. Ouverture « cv2.morphologyEx»
d. Fermeture « cv2.morphologyEx»
4. Interpréter les différents résultats
Annexe 1
#Lire l'image "image.jpg" en niveau de gris

image = cv2.imread('image.jpg', cv2.IMREAD_GRAYSCALE)

#Lire l'image "image.jpg" en couleur

image = cv2.imread('image.jpg', cv2.IMREAD_COLOR)

# Déterminer et afficher l'histogramme de l'image en niveau de gris

hist = cv2.calcHist([image], [0], None, [256], [0, 256])

plt.hist(image.ravel(), 256, [0, 256])

Annexe 2

img_c1 = cv2.imread("image.jpg", 0)

# Calculer la transformée de Fourier 2D

img_c2 = np.fft.fft2(img_c1)

# Faire le shift pour le centre de l'image

img_c3 = np.fft.fftshift(img_c2)

# Restaurer l'ordre initial des fréquences

img_c4 = np.fft.ifftshift(img_c3)

# Appliquer la transformée de Fourier inverse

img_c5 = np.fft.ifft2(img_c4)

#affficher 5 images en tabulation

plt.figure(figsize=(6.4*5, 4.8*5), constrained_layout=False)

plt.subplot(151), plt.imshow(img_c1, "gray"), plt.title("Original Image")


plt.subplot(152), plt.imshow(np.log(1+np.abs(img_c2)), "gray"),
plt.title("Spectrum")
plt.subplot(153), plt.imshow(np.log(1+np.abs(img_c3)), "gray"),
plt.title("Centered Spectrum")
plt.subplot(154), plt.imshow(np.log(1+np.abs(img_c4)), "gray"),
plt.title("Decentralized")
plt.subplot(155), plt.imshow(np.abs(img_c5), "gray"), plt.title("Processed
Image")
plt.show()

Annexe 3

def distance(point1,point2):
return sqrt((point1[0]-point2[0])**2 + (point1[1]-point2[1])**2)

def idealFilterLP(D0,imgShape):
base = np.zeros(imgShape[:2])
rows, cols = imgShape[:2]
center = (rows/2,cols/2)
for x in range(cols):
for y in range(rows):
if distance((y,x),center) < D0:
base[y,x] = 1
return base

def idealFilterHP(D0,imgShape):
base = np.ones(imgShape[:2])
rows, cols = imgShape[:2]
center = (rows/2,cols/2)
for x in range(cols):
for y in range(rows):
if distance((y,x),center) < D0:
base[y,x] = 0
return base

def gaussianLP(D0,imgShape):
base = np.zeros(imgShape[:2])
rows, cols = imgShape[:2]
center = (rows/2,cols/2)
for x in range(cols):
for y in range(rows):
base[y,x] = exp(((-distance((y,x),center)**2)/(2*(D0**2))))
return base

def gaussianHP(D0,imgShape):
base = np.zeros(imgShape[:2])
rows, cols = imgShape[:2]
center = (rows/2,cols/2)
for x in range(cols):
for y in range(rows):
base[y,x] = 1 - exp(((-distance((y,x),center)**2)/(2*(D0**2))))
return base
Annexe 4

LowPassCenter = center * idealFilterLP(50,img.shape)


LowPass = np.fft.ifftshift(LowPassCenter)
inverse_LowPass = np.fft.ifft2(LowPass)
plt.imshow(np.abs(inverse_LowPass), "gray"), plt.title("Ideal Low Pass")

Annexe 5
lower_red = np.array([150, 30, 30])

upper_red = np.array([190, 255, 255])

lower_blue = np.array([100, 60, 60])

upper_blue = np.array([140, 255, 255])

lower_yellow = np.array([5, 100, 100])

upper_yellow = np.array([40, 255, 255])

Vous aimerez peut-être aussi