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
}
#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))
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
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);
}
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);
}