Использование любой формы хеширования здесь действительно бессмысленно, поскольку даже почти идентичные изображения будут давать очень разные хеш-значения. Как было указано в комментариях, два «дублированных» изображения могут немного отличаться (подумайте, например, об эффектах, вызванных сжатием JPEG), поэтому интерес представляет обнаружение почти дублированных изображений. Кроме того, как было указано в комментариях, рассмотрение только изображений одинаковой ширины - это первый шаг к уменьшению квадратичного количества сравнений. Если все изображения одинаковой ширины, улучшения нет.
Первая проблема, которую вы должны решить, - это отказаться от нижнего блока с почти идентичными изображениями разной высоты. Почему эта коробка там? Это равномерный цвет фона? Предварительно обработайте изображения, чтобы удалить такие нижние блоки. Если это проблематично, объясните, почему. Я буду считать, что эти ящики отныне сняты.
SSIM (структурное сходство) может быть хорошим подходом для обнаружения ваших почти дубликатов, но у него нет шансов быть быстрее, чем более простой алгоритм, такой как NRMSE, описанный в Сравнение изображения в URL-адресе с изображением в файловой системе в Python. Таким образом, способ, возможно, ускорить процесс (хотя по своей природе он остается квадратичным), состоит в том, чтобы сначала преобразовать данное изображение в оттенки серого и рассматривать только небольшое центральное окно из него, например 50x50. Примените гауссовский фильтр к этому центральному окну, чтобы незначительные структуры (например, шум) в основном подавлялись. Поскольку у вас есть довольно много изображений для сравнения, я бы применил грубую бинаризацию в этом сглаженном центральном окне в виде: если значение v
больше половины максимально возможного значения, то превратите его в белый, в противном случае превратите его в черный. Теперь у вас есть 2500 бит для каждого изображения. Следующим шагом может быть следующее: вычислить расстояние Хэмминга от этих 2500 бит до общей битовой комбинации, 2500 бит 1 здесь будут работать. Повторите этот процесс для всех ваших изображений. Для каждого изображения у вас есть расстояние Хэмминга.
Теперь давайте найдем почти идентичные изображения. Во-первых, рассмотрите возможность объединения найденных расстояний Хэмминга в k
разных слотах. Таким образом, все изображения, попавшие в одну и ту же корзину, далее рассматриваются для сравнения. Таким образом, если изображение a
попадает в корзину k_i
, а изображение b
попадает в корзину k_j
, i != j
, мы отбрасываем a
как похожий на b
. Если в одном и том же бункере слишком много изображений, описанный выше процесс требует уточнений и / или необходимо уменьшить интервал для каждого бункера. Чтобы еще больше ускорить процесс, сначала рассмотрите возможность применения NRMSE между всеми изображениями в одной и той же ячейке, и только те, которые дают высокое значение, наконец, будут сравниваться SSIM.
person
mmgp
schedule
17.12.2012
n^2
сравнения. Если остались какие-то группы, которые слишком велики для этого (например, если половина изображений одинаковой ширины), подумайте о том, чтобы сделать что-то, что требует реальных размышлений с вашей стороны ;-) - person Steve Jessop   schedule 17.12.2012