Menu

Алгоритм сравнения изображений

2015-02-01
2015-03-01
  • Dmitry Borisov

    Dmitry Borisov - 2015-02-01

    Реализовал в программе сравнение по SSIM - индекс структурного сходства (от англ. SSIM -- structure similarity). Этот алгоритм находит сильно обрезанные, измененные картинки и в то же время картинки где много однотонного фона не валит в одну группу. Но там другие размеры разницы. Похожие картинки где-то до 40% различия встречаются. Так что одновременно не получится применять быстрй и точные методы. Сейчас в программе 3 метода используются: до 1000 картинок сумма квадратных отклонений пикселей считается, от 1000 до 10000 и большом заданном отличие подсчет суммы на очень сильно уменьшенных изображениях и третий, в остальных случаях, с помощью многомерных индексов. Если вместо первого поставить точный метод, то не будут совпадать заданые проценты различия. Или сделать задания различй для обеих методов отдельно, или просто их переключать в настройках и одновременно не применять. Как лучше? И этот SSIM гораздо затратнее в ресурсах. Некоторые значения можно в базе сохранить, но вот как ускорить с помошью SSE2 надо ковыряться. И еще кто может выложить образцы которые ошибочно детектируются при малом различие или наоборот не рапознаются как дубликаты.

     
    • Anonymous

      Anonymous - 2018-06-22
      Post awaiting moderation.
  • Dmitry Borisov

    Dmitry Borisov - 2015-02-01

    Кто хочет потестировать вот альфа версия и наборы картинок, которые прошлая версия не находила. Только надо убрать учитывать соотношение ширины-высоты и поставить 40% различия.

     
  • Anonymous

    Anonymous - 2015-02-01

    Только скачал, потестить получится скорее всего - завтра, но уже возникли вопросы по описанию методов. А с чем связано именно такие пороги их переключение (1К/10К/прочие)? Может имеет смысл не пытаться "додумать" за пользователя, какой метод когда применять, а предложить ему самому выставить желаемый в настройках? Вот что-то мне подсказывает, что все эти расширения функционала (2 новых вида дефектов, 1 вид сравнения) уже превысили некоторый порог, при котором единственно разумный путь выбора нужной в данный момент комбинации параметров - решение самого пользователя. В соседней ветке я уже предлагал полностью разделить функции поиска дублей и дефектов. Добавить в тот же диалог выбора режима еще и выбор метода и не париться.

    Upd
    Не удержался - бегло посмотрел сегодня )
    Честно говоря, в первом приближении я затрудняюсь сказать, какой из методов лучше. На вашей подборке вроде вывод очевиден, а вот попробуйте на моей https://yadi.sk/d/qnd1QmS9ePsaq ... SSIM немного лучше "отсеивает однородный тон", но вероятно как следствие - вообще не находит дублей 5141/5142. Зато находит якобы дубли 2872/2873, которые, имхо, оными не являются (вероятно домик сбивает с толку).

     

    Last edit: Anonymous 2015-02-01
  • Dmitry Borisov

    Dmitry Borisov - 2015-02-02

    Ну во-первых ложных срабатываний у обоих методов много. Но у среднеквадратичного режима их 60 при 15%, а у SSIM - 23 при 30%.
    Дубликаты DSCN2870_1.jpg-DSCN2870_2.jpg у квадратичного при 10,54%, у SSIM - 16.70%.
    Дубликаты DSCN2872.JPG-DSCN2872_1.jpg у квадратичного не найдены, у SSIM найдены только при 44,6%, когда дубликатов уже 69.
    Дубликаты IMG_5141.JPG-IMG_5142.JPG у квадратичного при 4,9%, у SSIM - 15.8%.
    Так что второй алгоритм определенно нужен. Думаю надо просто добавить переключение.

    Да, как бы я хотел автоматическое удаление плохой каринки а также ее перемещение... Это не реально. Сначала смотришь в какой папке лежит, и надо ее перемещать в папку соседа или наоборот, потом смотришь на имя, человекопонятное или случайно сгенерированое, потом смотришь есть ли этой серии снимки дальше и обоих картинок, чтобы знать какую удалять, потом уже смотришь на показатели, причем блочность часто врет, и надо оставить картинку с большим размером, а не меньшей блочностью. Но это не всегда так, надо переименовать их, поглядеть крупным планом, EXIF еще оценить. А потом уже заменять или перемещать. Короче алгоритм трудно формализуется.

     
    • Anonymous

      Anonymous - 2015-02-02

      "Короче алгоритм трудно формализуется." - это вы очень мягко сказали. Он в принципе не формализуется хотя бы потому, что критерии "ценности" картинки вовсе не обязательно связаны с объективными ее параметрами. Почему и предлагаю тупо поручить выбор пользователю. К тому же, очень существенно на результат (количество и "качество" найденных дублей) влияют прочие флаги поиска (размер, переворот, отношение сторон). Например пару 5141/5142 вчерась у меня SSIM не находил вовсе даже при 50%, а у вас нашел при 15,8 (какие флаги были у меня включены - не помню, пишу не из дому).

      Кстати говоря, насчет "...потом смотришь есть ли этой серии снимки дальше и обоих картинок..." - было бы крайне удобно, чтобы при нахождении в пути поиска более 2-х попарно похожих картинок выводились все они одной группой, а не попарно. Понимаю, что это потребует в корне изменить весь интерфейс, но может имеет смысл рассмотреть и это дело?

       
      • Dmitry Borisov

        Dmitry Borisov - 2015-02-02

        Группы создаются исходя из похожести изображений. Для путей есть сортировка.

         
        • Anonymous

          Anonymous - 2015-02-02

          Я о том, чтобы все картинки из одной группы выводились не попарно, а одной сплошной лентой. Все эти кнопочки перемещения/удаления нижнего/верхнего по большому счету не очень-то и нужны. Имхо, в идеале хотелось бы интерфейс подобный тому же XnView, те же 3 области: вместо дерева папок - список групп похожих плюс группы по видам дефектов; эскизы (текущей группы) с минимумом инфы о файле; и превью с подробной информацией о картинке (текущем эскизе). Сначала тыкаем группу, по эскизам отсеиваем/удаляем совсем плохие (кропы, низкое разрешение и т.п.), по превью уже выбираем окнчательно, что и в какой папке оставить.

           

          Last edit: Anonymous 2015-02-02
          • Dmitry Borisov

            Dmitry Borisov - 2015-02-03

            Вот так?

             
            • Anonymous

              Anonymous - 2015-02-03

              Ага! Почти замечательно! Думается не стоит выводить эскизы всех групп сразу. Разумнее видеть список групп и эскизы текущей группы, выводимые не в одну строку, а на всей площади окошка. И еще бы на левой превьюшке либо под картинкой, либо на закладке - подробную информацию об изображении и рассчитанных характеристиках (похожесть, дефекты). Ну и единственно, с чем я, размышляя в первом приближении, так и не определился, это как наиболее удобно помещать оставленные экземпляры в нужное место. Как вариант: по правому клику на эскизе или превью, по которому выпадает меню с предложением (в т.ч.) удалить или переместить/скопировать в одну из папок, в которых найдены дубли группы.

               

              Last edit: Anonymous 2015-02-03
  • Dmitry Borisov

    Dmitry Borisov - 2015-02-03

    Оказывается SSIM очень чувствителен к размерам эскизов. Меньше 128 просто зашкаливают ошибки. Надо добавить 256.

     
    • Anonymous

      Anonymous - 2015-02-03

      Я первое, что делаю, установив программу и зайдя в настройки - переключаю на 128. Так что все мои тесты были только со 128. 256 - очень интересно было бы пощупать...

       
  • Anonymous

    Anonymous - 2015-02-04

    В свете релиза 233: рекомендация для SSIM "...убрать учитывать соотношение ширины-высоты...", - остается в силе? Если ответ - да, то может стоит в диалоге настроек делать недоступным выбор SSIM при включенной проверке соотношения (и наоборот).
    PS Отличный стресс-тест получился. Впервые с момента покупки i3-4330 наблюдаю, чтобы прикладная программа грузила все 4 потока на все 100% :)

     

    Last edit: Anonymous 2015-02-04
    • Dmitry Borisov

      Dmitry Borisov - 2015-02-04

      А я постоянно наблюдаю как мои два ядра грузятся кодировкой x264. Но 4 ядра мало, 4 ядра еще в 2007 году было. А вот настоящие 8 ядер сейчас 60-70 тысяч стоят(
      Так как этот SSIM, круче базового? Алгоритм правда не до конца ускорен, подсчет сигмы от двух значений делается без SSE2. Но автор может позже оптимизирует. А мне только осталось группы сделать хоть как-то.

      Убирать я думаю не стоит настройки. Но единственным верным способом остается отключить учитывание соотношение размеров, типов, ширины, установить размер эскизов на 128. Насчет рамки не знаю, как влияет.

       

      Last edit: Dmitry Borisov 2015-02-04
  • Anonymous

    Anonymous - 2015-02-04

    Я бы так сказал - они просто существенно разные и дополняют один другого. В той-же моей подборке они при разумном установленном проценте (дабы не было много мусора) находят разные дубли. SSIM - ловит цветы уже при 20%, но не находит птичек на проводах даже при 50%. А среднеквадратичный - находит птичек уже при 7%, но цветы появляются только при 8%. Прочие параметры относительно дефолтных: только дубли; искать повернутые; 128*128.

    "грузятся кодировкой x264" - интел/амд?

     

    Last edit: Anonymous 2015-02-04
    • Dmitry Borisov

      Dmitry Borisov - 2015-03-01

      Intel, AMD проигрывают давно в производительности.

       
  • Dmitry Borisov

    Dmitry Borisov - 2015-03-01

    К сожалению и SSIM не находит средне и сильно обрезанные картинки вроде этих. Думаю тут поможет или поиск дескрипторов изображения или перцептивные хэши, но это уже будет другая программа.

     
  • Anonymous

    Anonymous - 2018-07-09
    Post awaiting moderation.
  • Anonymous

    Anonymous - 2018-07-12
    Post awaiting moderation.
  • Anonymous

    Anonymous - 2019-04-09
    Post awaiting moderation.

Anonymous
Anonymous

Add attachments
Cancel