On se propose de développer une gui permettant
de visualiser et de traiter des images de formats standards (bmp, png, gif, jpeg...).
Cette interface a été codée en C++ avec l'utilisation du framework Qt. Le traitement d'images consiste d'abord à atténuer le bruit et détecter les gradients
horizontaux, verticaux et les contours. Toute cette chaîne de calcul s'appelle le "Canny Edge Detector".
Par la suite, nous présenterons une autre fonctionnalité qui consiste à appliquer cette chaîne au flux vidéo d'une webcam avec
la librairie OpenCV.
L'application "Canny_Edge" est disponible pour Linux et MacOS :
Il est nécessaire d'avoir
les librairies Qt4 et OpenCV. Une fois l'exécutable lancé, nous commencons par
charger une image (la célèbre "lena.gif"). Voici le résultat sur
l'image suivante :
Il s'agit dans chaque étape de ce calcul d'appliquer des filtres sur le tableau 2D que représente l'image. Ce filtrage linéaire s'applique selon l'opération de convolution discrète sur chaque pixel $X_{i,j}$ de l'image de départ :
avec l'image résultante et le filtre (de taille $n\,\text{x}\,n$) représentés respectivement par les matrices $Y$ et $H$. Nous verrons ci-après le filtre associé au flou gaussien et ceux utilisés pour les gradients horizontaux et verticaux.
Avant la détection des contours par les opérateurs de
Sobel, il faut d'abord mettre en place une procédure de filtrage gaussien avec un masque "flou" (cf "Canny edge detector") de taille "5x5" qui permet d'atténuer les disparités
présentes sur l'image et ainsi réduire le bruit. Voici le filtre $H$ utilisé :
Nous implémentons à ce stade la détection de contours par les
opérateurs de Sobel. On se sert dans un premier temps des filtres $H_{x}$ (pour les gradients horizontaux) et $H_{y}$ (pour les gradients verticaux) :
puis on combine le résultat de ces 2 filtrages pour calculer la norme du gradient; pour un pixel $X_{i,j}$ calculé avec $H_{x}$ et $Y_{i,j}$ calculé avec $H_{y}$, cela donne une valeur de sortie $Z_{i,j}$ pour le pixel $(i,j)$ égale à :
Voici maintenant la fonctionnalité "Webcam" montrant le traitement "Canny Edge" sur le flux d'une webcam; cette vidéo a été réalisée avec la version MacOS du projet :
ps : contribuez comme moi au projet Cosmology@Home dont le but est d'affiner le modèle décrivant le mieux notre Univers.