Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Cahier Etudiant
1 PREAMBULE
L’objectif de ce TP est de vous apprendre à utiliser et à coder une application concrète sous
OpenCV.
Dans un premier temps , vous programmerez ouverture et l’affichage d’une image d’un format
quelconque. Par la suite, vous programmerez des traitements de bases sous la forme de fonctions
OpenCV préexistantes.
Enfin dans une dernière partie concernera la programmation d’une application concrète, vous
aurez à charge d’utiliser des fonctions existantes, mais aussi de coder vos propres algorithmes.
2 PRISE EN MAIN
L’application que l’on vous demande de créez ici est simplement une MFC Application de type
Dialog based (File/New/MFCApplication)
Lancez la compilation de votre projet une fenêtre du type suivant doit s’afficher.
L’objectif de ce TP va être de modifier la fenêtre ci-dessus afin de permettre un certain nombre
de traitements. Le premier doit être l’ouverture d’une image et son affichage
Dans votre projet Visual, les classes dont le nom finit par Dlg, contiendront les fonctions qui
piloteront les interfaces et les commandes de la fenêtre.
cv.lib highgui.lib
2.3 Ouverture d’une image
Ajouter un bouton dans votre interface afin de permettre l’ouverture d’un certain nombre de fichier
en particulier les images.
Modifier ces propriétés afin d’afficher le texte « Ouvrir une image » plutôt que Button1.
Double cliquez sur ce bouton.
Vous devez normalement vous trouvez dans le corps d’une fonction rajoutez automatiquement par
Visual. Une fonction nommée :
void CTPVsionDlg::OnBnClickedButton1().
Commentez le.
Définissez maintenant un fichier TPVisionApp.h contenant le code ci-dessous.
Les lignes de codes permettant d’afficher l’image dont le nom est passé en paramètre ont été
enlevées. A vous de retrouver le bon code.
class ImageProcessor
{
IplImage* img; // Declare IPL/OpenCV image pointer
public:
ImageProcessor(CString filename, bool display=true)
{
// Charger une image
if (display)
{
// Créer une fenêtre
}
}
~ImageProcessor()
{
cvReleaseImage( &img );
}
};
#endif
Modifiez esuite la fonction void CTPVsionDlg::OnBnClickedButton1() afin que
l’on puisse réaliser le code de la classe ImageProcessor
if (dlg.DoModal() == IDOK) {
CString path= dlg.GetPathName();
//creation d’un objet ImageProcessor pour l’affichage d’une
//image
}
Ajoutons maintenant une fonction dans TPVisionApp.cpp qui permette de réaliser une érosion sur
l’image passé en paramêtre.
#include "stdafx.h"
#include "TPVisionApp.h"
//**************************
// A global variable
ImageProcessor *proc = 0;
//**************************
//**************************************
// the function that processes the image
void process(void* img)
{
IplImage* image = reinterpret_cast<IplImage*>(img);
//érosion de image
}
//**************************************
//******************************
void ImageProcessor::execute()
{
process(img);
}
//******************************
IplImage*
gray= iplCreateImageHeader(1,0,IPL_DEPTH_8U,"GRAY","G",IPL_DATA_ORD
ER_PIXEL,IPL_ORIGIN_TL,IPL_ALIGN_QWORD,width,height,NULL,NULL,NULL,
NULL);
iplAllocateImage(gray, 1, 0);
• Pour récupérer les valeurs des pixels d’une image voici la précédure :
En vue d'une reconnaissance des empreintes, il vous ait demandé d'établir une méthode de
binarisation automatique la moins sensible possible au bruit présent dans les images que l'on vous
fourni ( i.e. binariser pour se rapprocher au maximum de l'image optimale)
Dans un premier temps vous allez utiliser UNIQUEMENT les fonctions proposées par la librairie
OpenCV. L’objectif de cette partie est de se familiariser avec les outils classiques de traitement
d’images présents dans OpenCV. Testez, observez, concluez…
1. Applications de filtres
2. Outils morphologiques
3. Outils de détection de contours
Ces méthodes sont paramétriques, vous êtes donc vivement encouragés à mettre en place une
application qui permette de faire varier les paramètres d’entrer de ces dernières.
Vous ferez figurer dans votre rapport les outils qui vous on semblé les plus appropriés, ainsi que
les procédures d’utilisation, paramètres entrées, sorties, type d’image en entrée, en sortie…
Dans cette partie vous allez réaliser un programme qui permet d’obtenir la meilleure binarisation
possible d'empreintes digitales. Ce qui est détaillé ci-dessous s'inspire d'une méthode utilisée dans
l’article suivant :
“Fingerprint Image Enhancement using Filtering Techniques”, Shlomo Greenberg
et all., Electrical and Computer Engineering Department, Ben-Gurion University of
the Negev, Beer-Sheva, Israel, ICPR 2000
Il s'articule autour de 3 étapes:
Le but de cette étape est d’améliorer la netteté de l’image. Pour cela on établi un mappage des
niveaux de gris. Le nouveau niveau de gris de chaque pixel ( S k ) est calculé de la manière suivante:
k nj
Sk = ∑ avec k=0,1,2…,255 (pour le nombre de niveaux de gris)
j =0 n
Ce rehaussement est à faire de manière locale c'est-à-dire que vous effectuez le calcul précèdent dans
une fenêtre de 11*11 pixels et que vous vous déplacez ensuite dans l’image pour recommencer le
calcul (cf. TP précédent).
• Filtrage du bruit
Ici l’objectif va être de diminuer le bruit présent dans l’image. Pour cela vous implémenterez le filtre
de Wiener.
Le filtre (w) est de taille 3*3 pixels et se calcule à partir de l’étude des niveaux de gris de la zone de
l’image étudiée :
σ 2 − v2
w( xi , y i ) = µ + ( I ( x, y) − µ ) avec i=1…3
σ2
v 2 la variance du bruit
σ 2 et µ la variance et la moyenne
Vous pouvez chercher des informations sur le filtre de Wiener sur Internet et le développer cette
partie dans votre rapport.
• Binarisation
Dans cette dernière étape l’image est binarisée de manière locale. Sur une fenêtre 13*13 la moyenne
des niveaux de gris de la zone donne le seuil de binarisation.
Dans votre rapport vous inclurez les copies d’écran des images binarisées que vous avez obtenu.
FIN