#include "hmain.hpp"
int main(int argc,char **argv) {
cimg_usage("flog - un programme de reconnaissance facial. Se detecter les contours d'une image pour le moment.");
const char *file_i = cimg_option("-i", "test.jpg","Image 1 à charger (une seule pour le moment...) ");
const int val_gauss = cimg_option("-g", 0.1, "Règle la valeur du flou (sigma dans la matrice de convolution");
const float k = cimg_option("-k",1.0,"Choix de la méthode de detection du gradient ( 1.0 = Prewitt, 2.0 = Sobel).");
const float level = cimg_option("-l", 15.0, "Seuillage.");
const bool help = cimg_option("-h",false,"Afficher l'aide");
if(help) exit(0);
cout << " - Chargement de l'image "<< file_i << "..." << endl;
const CImg<float> texture_in(file_i);
CImgList<float> gray(5, texture_in.dimx(),texture_in.dimy(),texture_in.dimz());
CImgList<float> res(1, texture_in.dimx(),texture_in.dimy(),texture_in.dimz(),texture_in.dimv());
CImgList<float> diff2(2, texture_in.dimx(),texture_in.dimy(),texture_in.dimz());
// Matrice de convolution du calcul du gradient
const float mk = (-1.0)*k;
const float gradientX[3][3] =
{
{-1.0, 0.0, 1.0},
{mk, 0.0, k},
{-1.0, 0.0, 1.0}
};
const float gradientY[3][3] =
{
{-1.0, mk, -1.0},
{ 0.0, 0.0, 0.0},
{ 1.0, k, 1.0}
};
const float gauss[5][5] = getGauss(5,val_gauss);
//Calcul du niveau de gris
cimg_forXY(res(0),i,j) {
gray(0)(i,j,0) = (texture_in(i,j,0)+texture_in(i,j,1)+texture_in(i,j,2))/3;
}
gray(0) = normalise(convolution(gray(0),gauss,5)); // flou
gray(1) = convolution(gray(0),robertsX,3); // dI/dx
gray(2) = convolution(gray(0),robertsY,3); // dI/dy
gray(3) = normalise(norme(gray(2),gray(1)));
gray(4) = getLevel(gray(3),level);
gray(1) = convolution(gray(1),robertsX,3);
gray(2) = convolution(gray(2),robertsY,3);
gray(3) = normalise(gray(1)+gray(2));
CImgDisplay disp(gray,"Flog",0);
while ( !disp.is_closed && disp.key!=cimg::keyQ && disp.key!=cimg::keyESC)
{
if (disp.is_resized) disp.resize().display(res);
CImgDisplay::wait(disp);
}
return 0;
}