TexturedThreshold 0.32
-CompareMethod 2
-
-# Array of multiplicative constants in feature vectors distance computation
+# Signatures comparision method (integrated|fuzzy) - based on:
+#
+# integrated
+# James Z. Wang, Jia Li and Gio Wiederhold,
+# "SIMPLIcity: Semantics-Sensitive Integrated Matching for Picture Libraries",
+# IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 23, no. 9, pp. 947-963, 2001.
+#
+# fuzzy
+# Yixin Chen and James Z. Wang,
+# "A Region-Based Fuzzy Feature Matching Approach to Content-Based Image Retrieval",
+# IEEE Transactions on Pattern Analysis and Machine Intelligence, vol. 24, no. 9, pp. 1252-1267, 2002.
+#
+CompareMethod integrated
+
+# Array of multiplicative constants in feature vectors distance computation
# (L, u, v, LH, HL, HH, H0, H1, H2). Each one must be in range 0..15.
CompareFeaturesWeights 1 2 2 1 1 1 1 1 1
double image_sig_border_size;
int image_sig_border_bonus;
double image_sig_textured_threshold;
-uns image_sig_compare_method;
+int image_sig_compare_method;
uns image_sig_cmp_features_weights[IMAGE_VEC_F + IMAGE_REG_H];
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_UNS("CompareMethod", &image_sig_compare_method),
+ CF_LOOKUP("CompareMethod", &image_sig_compare_method, ((byte *[]){"intergrated", "fuzzy", NULL})),
CF_UNS_ARY("CompareFeaturesWeights", image_sig_cmp_features_weights, IMAGE_VEC_F + IMAGE_REG_H),
CF_END
}
#define LINE do{}while(0)
static uns
-image_signatures_dist_2(struct image_signature *sig1, struct image_signature *sig2)
+image_signatures_dist_integrated(struct image_signature *sig1, struct image_signature *sig2)
#else
}
static uns
-image_signatures_dist_2_explain(struct image_signature *sig1, struct image_signature *sig2, void (*msg)(byte *text, void *param), void *param)
+image_signatures_dist_integrated_explain(struct image_signature *sig1, struct image_signature *sig2, void (*msg)(byte *text, void *param), void *param)
#endif
{
q[i] = reg2->wb;
/* Sort entries in distance matrix */
- image_signatures_dist_2_sort(n, dist);
+ image_signatures_dist_integrated_sort(n, dist);
/* Compute significance matrix and resulting distance */
uns sum = 0;
#include <stdio.h>
static uns
-image_signatures_dist_1(struct image_signature *sig1, struct image_signature *sig2)
+image_signatures_dist_fuzzy(struct image_signature *sig1, struct image_signature *sig2)
{
DBG("image_signatures_dist_1()");
return (1 << (3 + 3 + 8 + 16)) - measure;
}
-#define ASORT_PREFIX(x) image_signatures_dist_2_##x
+#define ASORT_PREFIX(x) image_signatures_dist_integrated_##x
#define ASORT_KEY_TYPE uns
#define ASORT_ELT(i) items[i]
#define ASORT_EXTRA_ARGS , uns *items
{
switch (image_sig_compare_method)
{
+ case 0:
+ return image_signatures_dist_integrated(sig1, sig2);
case 1:
- return image_signatures_dist_1(sig1, sig2);
- case 2:
- return image_signatures_dist_2(sig1, sig2);
+ return image_signatures_dist_fuzzy(sig1, sig2);
default:
- die("Invalid image signatures compare method.");
+ ASSERT(0);
}
}
uns
image_signatures_dist_explain(struct image_signature *sig1, struct image_signature *sig2, void (*msg)(byte *text, void *param), void *param)
{
- if (image_sig_compare_method == 2)
- return image_signatures_dist_2_explain(sig1, sig2, msg, param);
- return image_signatures_dist(sig1, sig2);
+ switch (image_sig_compare_method)
+ {
+ case 0:
+ return image_signatures_dist_integrated_explain(sig1, sig2, msg, param);
+ case 1:
+ return image_signatures_dist_fuzzy(sig1, sig2);
+ default:
+ ASSERT(0);
+ }
}
extern double image_sig_border_size;
extern int image_sig_border_bonus;
extern double image_sig_textured_threshold;
-extern uns image_sig_compare_method, image_sig_cmp_features_weights[];
+extern int image_sig_compare_method;
+extern uns image_sig_cmp_features_weights[];
#define IMAGE_VEC_F 6
#define IMAGE_REG_F IMAGE_VEC_F