]> mj.ucw.cz Git - libucw.git/blobdiff - images/signature.h
experiment - store relative centroid position for each image region
[libucw.git] / images / signature.h
index 94a0813d0633266624683bb2cb92ec9e41076f61..1643f317a55a3204cce47b43459d24d801659cd1 100644 (file)
@@ -1,18 +1,20 @@
 #ifndef _IMAGES_SIGNATURE_H
 #define _IMAGES_SIGNATURE_H
 
-#include "lib/fastbuf.h"
-
 /* Configuration */
 extern uns image_sig_min_width, image_sig_min_height;
 extern uns *image_sig_prequant_thresholds;
 extern uns image_sig_postquant_min_steps, image_sig_postquant_max_steps, image_sig_postquant_threshold;
+extern double image_sig_border_size;
+extern int image_sig_border_bonus;
+extern double image_sig_inertia_scale[];
 extern double image_sig_textured_threshold;
-extern uns image_sig_compare_method;
+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
-#define IMAGE_REG_H    3
+#define IMAGE_REG_H    5
 #define IMAGE_REG_MAX  16
 
 /* K-dimensional feature vector (6 bytes) */
@@ -22,10 +24,11 @@ struct image_vector {
 
 /* Fetures for image regions (16 bytes) */
 struct image_region {
-  byte f[IMAGE_VEC_F];         /* texture features */
-  u16 h[IMAGE_REG_H];          /* shape features */
-  u16 wa;                      /* normalized area percentage */
-  u16 wb;                      /* normalized weight */
+  byte f[IMAGE_VEC_F];         /* texture features - L, u, v, LH, HL, HH */
+  byte h[IMAGE_REG_H];         /* shape/pos features - I1, I2, I3, X, Y */
+  byte wa;                     /* normalized area percentage */
+  byte wb;                     /* normalized weight */
+  u16 reserved;
 } PACKED;
 
 #define IMAGE_SIG_TEXTURED     0x1
@@ -34,9 +37,9 @@ struct image_region {
 struct image_signature {
   byte len;                    /* Number of regions */
   byte flags;                  /* IMAGE_SIG_xxx */
-  byte df;                     /* Average f dist */
-  u16 dh;                      /* Average h dist */
-  struct image_vector vec;     /* Combination of all regions... simple signature */
+  u16 df;                      /* Average weighted f dist */
+  u16 dh;                      /* Average weighted h dist */
+  struct image_vector vec;     /* Average features of all regions... simple signature */
   struct image_region reg[IMAGE_REG_MAX];/* Feature vector for every region */
 } PACKED;
 
@@ -44,18 +47,18 @@ struct image_cluster {
   union {
     struct {
       s32 dot;                 /* Dot product of the splitting plane */
-      byte vec[IMAGE_VEC_F];   /* Normal vector of the splitting plane */
-    };
+      s8 vec[IMAGE_VEC_F];     /* Normal vector of the splitting plane */
+    } PACKED;
     struct {
       u64 pos;                 /* Cluster size in bytes */
-    };
-  };
-};
+    } PACKED;
+  } PACKED;
+} PACKED;
 
 static inline uns
 image_signature_size(uns len)
 {
-  return 5 + sizeof(struct image_vector) + len * sizeof(struct image_region);
+  return OFFSETOF(struct image_signature, reg) + len * sizeof(struct image_region);
 }
 
 /* sig-dump.c */
@@ -100,33 +103,6 @@ struct image_sig_data {
   u32 f[IMAGE_VEC_F];
 };
 
-/* sig-fb.c */
-
-#define IMAGE_VECTOR_SIZE (sizeof(struct image_vector))
-
-static inline uns
-image_vector_read(struct fastbuf *fb, struct image_vector *vec)
-{
-  breadb(fb, vec, sizeof(*vec));
-  return IMAGE_VECTOR_SIZE;
-}
-
-static inline uns
-image_vector_write(struct fastbuf *fb, struct image_vector *vec)
-{
-  bwrite(fb, vec, sizeof(*vec));
-  return IMAGE_VECTOR_SIZE;
-}
-
-static inline uns
-image_signature_peek_size(struct fastbuf *fb)
-{
-  return image_signature_size(bpeekc(fb));
-}
-
-uns image_signature_read(struct fastbuf *fb, struct image_signature *sig);
-uns image_signature_write(struct fastbuf *fb, struct image_signature *sig);
-
 /* sig-init.c */
 
 int compute_image_signature(struct image_thread *thread, struct image_signature *sig, struct image *image);