Allow to configure rotation invariance
authorKlaus Ethgen <Klaus@Ethgen.de>
Fri, 13 May 2016 15:44:10 +0000 (16:44 +0100)
committerKlaus Ethgen <Klaus@Ethgen.de>
Sun, 15 May 2016 08:37:42 +0000 (09:37 +0100)
src/options.c
src/options.h
src/preferences.c
src/rcfile.c
src/similar.c

index 460b9cb..f8d0a80 100644 (file)
@@ -38,6 +38,7 @@ ConfOptions *init_options(ConfOptions *options)
 
        options->dnd_icon_size = 48;
        options->duplicates_similarity_threshold = 99;
+       options->rot_invariant_sim = TRUE;
 
        options->file_filter.disable = FALSE;
        options->file_filter.show_dot_directory = FALSE;
index 138de5a..b44db26 100644 (file)
@@ -29,6 +29,7 @@ struct _ConfOptions
        gboolean update_on_time_change;
 
        guint duplicates_similarity_threshold;
+       gboolean rot_invariant_sim;
 
        gint open_recent_list_maxsize;
        gint dnd_icon_size;
index 6707690..1f0e136 100644 (file)
@@ -290,6 +290,7 @@ static void config_window_apply(void)
        options->image.exif_proof_rotate_enable = c_options->image.exif_proof_rotate_enable;
 
        options->duplicates_similarity_threshold = c_options->duplicates_similarity_threshold;
+       options->rot_invariant_sim = c_options->rot_invariant_sim;
 
        options->tree_descend_subdirs = c_options->tree_descend_subdirs;
 
@@ -1888,11 +1889,12 @@ static void config_tab_behavior(GtkWidget *notebook)
        pref_checkbox_new_int(group, _("Mouse wheel scrolls image"),
                              options->mousewheel_scrolls, &c_options->mousewheel_scrolls);
 
-       group = pref_group_new(vbox, FALSE, _("Miscellaneous"), GTK_ORIENTATION_VERTICAL);
+       group = pref_group_new(vbox, FALSE, _("Similarities"), GTK_ORIENTATION_VERTICAL);
 
        pref_spin_new_int(group, _("Custom similarity threshold:"), NULL,
                          0, 100, 1, options->duplicates_similarity_threshold, (int *)&c_options->duplicates_similarity_threshold);
-
+       pref_checkbox_new_int(group, _("Rotation invariant duplicate check"),
+                             options->rot_invariant_sim, &c_options->rot_invariant_sim);
 
 #ifdef DEBUG
        group = pref_group_new(vbox, FALSE, _("Debugging"), GTK_ORIENTATION_VERTICAL);
index 0a13784..1e8c569 100644 (file)
@@ -281,6 +281,7 @@ static void write_global_attributes(GString *outstr, gint indent)
        WRITE_NL(); WRITE_BOOL(*options, progressive_key_scrolling);
 
        WRITE_NL(); WRITE_UINT(*options, duplicates_similarity_threshold);
+       WRITE_NL(); WRITE_BOOL(*options, rot_invariant_sim);
        WRITE_SEPARATOR();
 
        WRITE_NL(); WRITE_BOOL(*options, mousewheel_scrolls);
@@ -543,6 +544,7 @@ static gboolean load_global_params(const gchar **attribute_names, const gchar **
                if (READ_BOOL(*options, update_on_time_change)) continue;
 
                if (READ_UINT_CLAMP(*options, duplicates_similarity_threshold, 0, 100)) continue;
+               if (READ_BOOL(*options, rot_invariant_sim)) continue;
 
                if (READ_BOOL(*options, progressive_key_scrolling)) continue;
 
index 316dfa1..0294711 100644 (file)
@@ -348,8 +348,7 @@ gdouble image_sim_compare_transfo(ImageSimilarityData *a, ImageSimilarityData *b
 
 gdouble image_sim_compare(ImageSimilarityData *a, ImageSimilarityData *b)
 {
-       gboolean test_transformations = TRUE; /* could be a function parameter */
-       gint max_t = (test_transformations ? 8 : 1);
+       gint max_t = (options->rot_invariant_sim ? 8 : 1);
 
        gint t;
        gdouble score, max_score = 0;
@@ -407,8 +406,7 @@ gdouble image_sim_compare_fast_transfo(ImageSimilarityData *a, ImageSimilarityDa
  */
 gdouble image_sim_compare_fast(ImageSimilarityData *a, ImageSimilarityData *b, gdouble min)
 {
-       gboolean test_transformations = TRUE; /* could be a function parameter */
-       gint max_t = (test_transformations ? 8 : 1);
+       gint max_t = (options->rot_invariant_sim ? 8 : 1);
 
        gint t;
        gdouble score, max_score = 0;