]> mj.ucw.cz Git - libucw.git/commitdiff
better comparision method selection
authorPavel Charvat <pavel.charvat@netcentrum.cz>
Sat, 16 Sep 2006 09:06:15 +0000 (11:06 +0200)
committerPavel Charvat <pavel.charvat@netcentrum.cz>
Sat, 16 Sep 2006 09:06:15 +0000 (11:06 +0200)
cf/images
images/config.c
images/sig-cmp-gen.h
images/sig-cmp.c
images/signature.h

index e27df7049c81b96380da0f68690fb7a315e53ec3..2e38ee0e0c6585893a5f16030b29b499522c5508 100644 (file)
--- a/cf/images
+++ b/cf/images
@@ -22,9 +22,21 @@ BorderBonus          50
 
 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
 
index 3bda5ed6c988b165f6b152c1dba7abf49995d9ce..3d9a326a4a1d1e44979f74e87c03f4bca9e0299f 100644 (file)
@@ -22,7 +22,7 @@ uns image_sig_postquant_threshold;
 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 = {
@@ -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_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
   }
index e6164d536f9ce76caddaa14ae825e408d2312828..5c18fc9ada24a955f066f29286f8bc417c9d4e36 100644 (file)
@@ -4,7 +4,7 @@
 #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
 
@@ -35,7 +35,7 @@ explain_signature(struct image_signature *sig, void (*msg)(byte *text, void *par
 }
 
 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
 {
@@ -118,7 +118,7 @@ image_signatures_dist_2_explain(struct image_signature *sig1, struct image_signa
     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;
index 3d22a1f39b79e988f6720daf874e434ecae2c35e..fef29407f2e871ad1c8b5beb6a6acc7c1a0695f1 100644 (file)
@@ -18,7 +18,7 @@
 #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()");
 
@@ -112,7 +112,7 @@ image_signatures_dist_1(struct image_signature *sig1, struct image_signature *si
   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
@@ -127,20 +127,26 @@ image_signatures_dist(struct image_signature *sig1, struct image_signature *sig2
 {
   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);
+    }
 }
 
index 57867848e3bba1e28e8936748fa62b27c280e662..4d7f7bc5e9da598b2b92fefe6f7e8ebeb78e271e 100644 (file)
@@ -8,7 +8,8 @@ extern uns image_sig_postquant_min_steps, image_sig_postquant_max_steps, image_s
 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