]> mj.ucw.cz Git - libucw.git/commitdiff
simple average vectors comparision
authorPavel Charvat <pavel.charvat@netcentrum.cz>
Sat, 16 Sep 2006 10:16:14 +0000 (12:16 +0200)
committerPavel Charvat <pavel.charvat@netcentrum.cz>
Sat, 16 Sep 2006 10:16:14 +0000 (12:16 +0200)
images/config.c
images/sig-cmp-gen.h
images/sig-cmp.c

index 63ac0da9a89f9ae50e623dae5129c010a613c968..1c29e6784ad161716cf797bc03dda82bf9f4c1c3 100644 (file)
@@ -36,7 +36,7 @@ static struct cf_section sig_config = {
     CF_DOUBLE("BorderSize", &image_sig_border_size),
     CF_INT("BorderBonus", &image_sig_border_bonus),
     CF_DOUBLE("TexturedThreshold", &image_sig_textured_threshold),
-    CF_LOOKUP("CompareMethod", &image_sig_compare_method, ((byte *[]){"integrated", "fuzzy", NULL})),
+    CF_LOOKUP("CompareMethod", &image_sig_compare_method, ((byte *[]){"integrated", "fuzzy", "average", NULL})),
     CF_UNS_ARY("CompareFeaturesWeights", image_sig_cmp_features_weights, IMAGE_VEC_F + IMAGE_REG_H),
     CF_END
   }
index 120ad1cbc1431b32a942b7e73ca0d76a15257dd8..bdb82fdf1dfe1c07d5e147941e2eb9a7e4134ef2 100644 (file)
@@ -152,7 +152,7 @@ image_signatures_dist_integrated_explain(struct image_signature *sig1, struct im
 #ifdef EXPLAIN
       reg1 = sig1->reg + i;
       reg2 = sig2->reg + j;
-      MSG("[%u, %u] d=%u d=%u df=(%d", i, j, s, d, (int)reg1->f[0] - (int)reg2->f[0]);
+      MSG("[%u, %u] s=%u d=%u df=(%d", i, j, s, d, (int)reg1->f[0] - (int)reg2->f[0]);
       for (uns i = 1; i < IMAGE_VEC_F; i++)
         MSG(" %d", (int)reg1->f[i] - (int)reg2->f[i]);
       if (!((sig1->flags | sig2->flags) & IMAGE_SIG_TEXTURED))
@@ -278,6 +278,31 @@ image_signatures_dist_fuzzy_explain(struct image_signature *sig1, struct image_s
   return (1 << (3 + 3 + 8 + 16)) - measure;
 }
 
+#ifndef EXPLAIN
+static uns
+image_signatures_dist_average(struct image_signature *sig1, struct image_signature *sig2)
+#else
+static uns
+image_signatures_dist_average_explain(struct image_signature *sig1, struct image_signature *sig2, void (*msg)(byte *text, void *param), void *param)
+#endif
+{
+#ifdef EXPLAIN
+  byte buf[1024], *line = buf;
+  MSGL("Average matching");
+#endif
+
+  uns dist = 0;
+  for (uns i = 0; i < IMAGE_VEC_F; i++)
+    {
+      uns d = image_sig_cmp_features_weights[0] * isqr((int)sig1->vec.f[i] - (int)sig2->vec.f[i]); 
+      MSGL("feature %u: d=%u (%u %u)", i, d, sig1->vec.f[i], sig2->vec.f[i]);
+      dist += d;
+    }
+
+  MSGL("dist=%u", dist);
+  return dist;
+}
+
 #undef EXPLAIN
 #undef MSG
 #undef LINE
index 490e931a33ee39765275f0033456d8c171f007f1..af4ebaf2442bdc05d045bbe9500078ae3ccc2155 100644 (file)
@@ -36,6 +36,8 @@ image_signatures_dist(struct image_signature *sig1, struct image_signature *sig2
        return image_signatures_dist_integrated(sig1, sig2);
       case 1:
        return image_signatures_dist_fuzzy(sig1, sig2);
+      case 2:
+       return image_signatures_dist_average(sig1, sig2);
       default:
        ASSERT(0);
     }
@@ -50,6 +52,8 @@ image_signatures_dist_explain(struct image_signature *sig1, struct image_signatu
        return image_signatures_dist_integrated_explain(sig1, sig2, msg, param);
       case 1:
        return image_signatures_dist_fuzzy_explain(sig1, sig2, msg, param);
+      case 2:
+       return image_signatures_dist_average_explain(sig1, sig2, msg, param);
       default:
        ASSERT(0);
     }