Voici une notion de temps : plus de 2 sec pour mesurer la distances entre deux images de 92*112 !! ça fait long, sachant qu’il faut qe j’en fasse plus de 1500…
Ceci dit, je trouve ça un peu démesuré, il doit y avoir un problème dans mon programme :
[code]gfloat distance_hausdorff(GdkPixbuf *p1, GdkPixbuf *p2)
{
gint i, j;
gint x1, y1, x2, y2;
gint l, h, n;
guchar *pixels1, *pixels2;
gfloat d, temp;
gfloat resultat1, resultat2;
l = gdk_pixbuf_get_width(p1);
h = gdk_pixbuf_get_height(p1);
n = gdk_pixbuf_get_n_channels(p1);
pixels1 = gdk_pixbuf_get_pixels(p1);
pixels2 = gdk_pixbuf_get_pixels(p2);
/* Calcul de la distance entre p1 et p2 */
resultat1 = 0;
for(x1 = 0; x1 < l; x1++)
for(y1 = 0; y1 < h; y1++)
{
temp = sqrt(9292+112112);
i = (y1*l+x1)n;
for(x2 =0; x2 < l; x2++)
for(y2 = 0; y2 < h; y2++)
{
j = (y2l+x2)*n;
if(pixels1[i] == pixels2[j])
{
d = dist(x1, y1, x2, y2);
if(d < temp)
temp = d;
}
}
resultat1 += temp;
}
/* Moyenne */
resultat1 = resultat1/(l*h);
/* Calcul de la distance entre p2 et p1 */
resultat2 = 0;
for(x2 = 0; x2 < l; x2++)
for(y2 = 0; y2 < h; y2++)
{
temp = sqrt(9292+112112);
i = (y2*l+x2)n;
for(x1 =0; x1 < l; x1++)
for(y1 = 0; y1 < h; y1++)
{
j = (y1l+x1)*n;
if(pixels2[i] == pixels1[j])
{
d = dist(x1, y1, x2, y2);
if(d < temp)
temp = d;
}
}
resultat2 += temp;
}
/* Moyenne */
resultat2 = resultat2/(l*h);
/* On retourne max(resultat1, resultat2) */
return (resultat1 > resultat2) ? resultat1 : resultat2;
}[/code]
et voici dist qui calcule la distance euclidienne entre 2 points :
gfloat dist(gint x1, gint y1, gint x2, gint y2)
{
return (sqrt(pow(x1-x2, 2)+pow(y1-y2, 2)));
}