From 0bcfe0870f575e9e5415d7d7d291e3c4cd11539a Mon Sep 17 00:00:00 2001 From: Pavel Charvat Date: Sat, 16 Sep 2006 12:16:14 +0200 Subject: [PATCH] simple average vectors comparision --- images/config.c | 2 +- images/sig-cmp-gen.h | 27 ++++++++++++++++++++++++++- images/sig-cmp.c | 4 ++++ 3 files changed, 31 insertions(+), 2 deletions(-) diff --git a/images/config.c b/images/config.c index 63ac0da9..1c29e678 100644 --- a/images/config.c +++ b/images/config.c @@ -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 } diff --git a/images/sig-cmp-gen.h b/images/sig-cmp-gen.h index 120ad1cb..bdb82fdf 100644 --- a/images/sig-cmp-gen.h +++ b/images/sig-cmp-gen.h @@ -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 diff --git a/images/sig-cmp.c b/images/sig-cmp.c index 490e931a..af4ebaf2 100644 --- a/images/sig-cmp.c +++ b/images/sig-cmp.c @@ -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); } -- 2.39.5