Без человека, выполняющего визуальную предварительную сортировку или предварительную сборку похожих файлов для начала, то, о чем вы просите, является невероятно сложным процессом.
Если вы не против какого-либо программирования (даже программирования сценариев, такого как Python), взгляните на инструменты командной строки ImageMagick, особенно ImageMagick compare
команда . У него есть опция -subimage-search
, чтобы определить, содержится ли одно изображение в другом. Обратите внимание, что для subimage-search
субизображение должно быть одинакового размера на большом изображении; они не могут отличаться масштабированием.
Так что subimage-search
поможет определить, является ли одна фотография кадрированием другой фотографии, если размер кадрирования также не был изменен.
Теперь, если фотографии имеют одну и ту же сцену, но только что изменили размер, чтобы сравнить их с ImageMagick, вам нужно использовать команду convert
, чтобы сделать их одинакового размера, а затем использовать compare
команда для определения их относительной разницы (для команды compare
существует много различных опций типа метрики .
Почему это требует больших вычислительных ресурсов?
Предположим, у вас есть n фотографий, которые вы хотите проверить для сравнения. Таким образом, первое фото сравнивается с n -1 оставшимися фотографиями, второе фото сравнивается с n -2 оставшимися фотографиями (помимо самого себя и первого фото, которое уже сравнивалось) до n -1-й фотографии по сравнению с n -ой фотографией. Это частичная сумма первых n натуральных чисел, которая получается из (n & sup2; - n) / 2 сравнений.
Существуют алгоритмы обработки изображений, которые могут выполнять как масштабирование, так и поиск субизображений в одном и том же процессе. Эти алгоритмы обычно используют методы сжатия в частотной области или вейвлет-области для идентификации похожих областей на изображениях. Но эти алгоритмы также требуют значительных вычислительных ресурсов и примерно пропорциональны по сложности (времени) квадрату размера сравниваемых файлов (т. Е. & Alpha; k & sup2; секунд / КиБ, где k в килобайтах, а & alpha; - некоторая константа пропорциональности для вашего алгоритма и компьютерной системы).
Но так как есть Ω ( n & sup2;) (нотация информатики, называемая «нотация Big-O», что означает «порядка», или «примерно»), сравнение каждого из них является квадратичным время, у вас есть алгоритм, который, с точки зрения компьютера, имеет сложность "Ω (n & sup2;) & times; Ω (s & sup2;)". Это означает, что это может занять много времени, и очень чувствительно к увеличению количества файлов для сравнения и среднего размера файла.