Introduction au traitement des images et à la stéréo-vision

Seuillage d'une image

Fondamental

Le seuillage d'image est la méthode la plus simple de segmentation d'image. À partir d'une image en niveau de gris, le seuillage d'image peut être utilisé pour créer une image comportant uniquement deux valeurs, noir ou blanc (monochrome)1.

Le seuillage d'image remplace un à un les pixels d'une image à l'aide d'une valeur seuil fixée (par exemple 123). Ainsi, si un pixel à une valeur supérieure au seuil (par exemple 150), il prendra la valeur 255 (blanc), et si sa valeur est inférieure (par exemple 100), il prendra la valeur 0 (noir).

Méthode

La valeur du seuil peut être déterminée manuellement ou bien automatiquement à partir de l'histogramme.

MéthodeSeuilage en scilab

La valeur du seuil est fixée arbitrairement à 128 :

1
scicv_Init();
2
3
f = scf();
4
toolbar(f.figure_id, "off");
5
img = imread("c:/temp/fruits.jpg");
6
imgnb=cvtColor(img,CV_BGR2GRAY);
7
8
subplot(2, 1, 1);
9
matplot(img);
10
title("image");
11
12
[thresh imgbin]=threshold(imgnb,170,255,THRESH_BINARY);
13
subplot(2, 1, 2);
14
matplot(imgbin);
15
title("image binaire");
16
17
delete_Mat(img);
18
delete_Mat(imgnb);
19

On peut appliquer la méthode d'Otsu :

1
scicv_Init();
2
3
f = scf();
4
toolbar(f.figure_id, "off");
5
img = imread("c:/temp/ocv_haribo.png");
6
imgnb=cvtColor(img,CV_BGR2GRAY);
7
8
subplot(3, 1, 1);
9
matplot(img);
10
title("image");
11
12
[thresh imgbin]=threshold(imgnb,128,255,THRESH_BINARY);
13
subplot(3, 1, 2);
14
matplot(imgbin);
15
title("image binaire");
16
17
[thresh imgbin2]=threshold(imgnb,128,255,THRESH_OTSU);
18
subplot(3, 1, 3);
19
matplot(imgbin2);
20
title("image binaire OTSU");
21
22
delete_Mat(img);
23
delete_Mat(imgnb);
24

MéthodeSeuillage ne python

Dans ce programme, la valeur du seuil est fixée manuellement par l'utilisateur à l'aide d'une glissière

1
import numpy as np
2
import cv2 as cv
3
from matplotlib import pyplot as plt
4
5
def seuillage(value):
6
    global imgbin
7
    print (value)
8
    ret,imgbin = cv.threshold(img,value,255,cv.THRESH_BINARY)
9
	
10
11
img = cv.imread('c:/temp/fruits.jpg',cv.IMREAD_GRAYSCALE)
12
fenetre = 'Image binaire'
13
cv.namedWindow(fenetre)
14
# create trackbars for color change
15
cv.createTrackbar('Thresh',fenetre,0,255,seuillage)
16
seuillage(0)
17
while(True):
18
    cv.imshow(fenetre,imgbin)
19
    k = cv.waitKey(1) & 0xFF
20
    if k == 27:
21
        break
22
cv.destroyAllWindows()

MéthodeDétermination automatique de la valeur du seuil

La méthode d'OTSU permet de déterminer automatiquement la valeur du seuil en maximisant la variance intraclasse.

1
import numpy as np
2
import cv2 as cv
3
4
img = cv.imread('c:/temp/ocv_haribo.png',cv.IMREAD_GRAYSCALE)
5
fenetre = 'Image binaire OTSU'
6
cv.namedWindow(fenetre)
7
thresh,imgbin=cv.threshold(img,0,255,cv.THRESH_OTSU)
8
cv.imshow(fenetre,imgbin)
9
print( 'Valeur seuil OTSU ', thresh)
10
cv.waitKey(0)
11
cv.destroyAllWindows()
PrécédentPrécédentSuivantSuivant
AccueilAccueilImprimerImprimerRéalisé avec Scenari (nouvelle fenêtre) modèle documentaire TechnOpale