5.4.1.1. Technique étudiée
D'une manière générale, la détection
de mouvement se fait à l'aide de la différence
entre l'image courante à l'instant t et l'image de
référence Iref.
La formule générale est :
?I(x, y , t) = I(x, y) - Iref(x, y, t), V (x, y)
(14)
x, y sont les coordonnées respectives.
L'image de référence est
considérée ici comme celle du fond mobile dans le cas d'une
caméra fixe, mais peut aussi être estimée par la moyenne ou
la médiane des N images précédentes de la
séquence.
Comme dans le cas de la détermination des points de
contours d'une image, le seuillage se fait sur le module de la
différence d'images.
D(x,y,t) = I|?I(x,y,t)|I > seuil
(15)
D(t) est une image binaire où les
pixels en mouvement sont mis à 255, les autres à 0. Dans le cas
où l'image de référence est une image fixe du fond
immobile, les pixels en mouvement sont aisément détectés,
pour peu que les conditions d'éclairement de la scène ne varient
pas notablement :
Iref(x, y, t) = Iref(x, y, O), Vt
(16)
51
Si l'illumination de la scène varie brutalement, si la
caméra est déplacée durant la séquence, ou si
aucune image du fond n'est disponible, l'image de référence peut
être construite à partir d'images précédentes de la
scène : dans ce cas, c'est la silhouette des objets en mouvement qui est
généralement détectée, et pas leur
intérieur.
Iref(x, y, t) = Iref(x, y, t - I), Vt
(17)
Prendre la moyenne des N images
précédentes pour image de référence amène
à une détection de mouvement plus robuste qu'une
différence d'images consécutives :
Iref(x,y,t) = NENI Iref(x,y,t-i)
(18)
En effet, dans le cas d'une scène filmée par une
caméra fixe, les objets immobiles sont mis en valeur au détriment
de ceux en mouvement qui sont atténués par l'opération de
moyennage, et semblent effacés.
5.4.1.2. Schéma de l'implémentation
La détection peut se faire par seuillage de la
différence entre l'image courante (instant t) et l'image
précédente (à t-1) de la séquence. Dans le
programme précèdent, on propose d'implémenter un curseur
à glissière fixant le seuil à appliquer. La
détection de mouvement est définie dans la fonction
MotionDetection qui retourne l'image dst des pixels en
mouvement colorés en bleu. L'image silh est l'image binaire du
mouvement, codée sur 8 bits et composée d'un seul canal.
La fonction cvAbsDiff calcule la différence
entre deux images en valeur absolue pour chaque pixel. L'image
précédente curr_img est ensuite actualisée avant
le traitement de l'image suivante de la séquence : on lui affecte le
contenu de l'image courante prev_img à l'aide de la fonction
cvCopy utilisée de la bibliothèque OpenCv.
Le programme principal déclare les images couleur
video_image et motion servant à la lecture de la trame
vidéo et à l'affichage de la détection de mouvement. Ces
images ainsi que l'image courante et précédente (deux images
monochromes) doivent être créées une fois la
première trame de la vidéo lue. Après cette installation,
le flux vidéo est traité par l'appel au sous-programme comme
montre le programme principal.
La méthode la plus simple et la plus rapide est de
calculer l'image de différence de luminance en chaque pixel entre deux
images consécutives de la séquence vidéo. À
cause
52
du bruit induit par l'électronique et les capteurs de la
caméra, un seuil S doit être appliqué. L'image de
différence est ensuite binarisée suivant des relations de la
forme : pour un pixel. Le code source de programme implémenté
se trouve en annexe A.
|