Визуальный алгоритм поиска подобия

Все выглядит хорошо для меня,

Просто измените $(window).scroll(function () {...... на

$(document).on( 'scroll','window', function(){
              //or $(document).on( 'scroll','id of div containing scroll',
   var windowScroll = $(window).scrollTop();
   var windowHeight = $(window).height();
   var documentHeight = $(document).height();

    if ((windowScroll + windowHeight) == documentHeight) {
         loadFeed();
       }
});
8
задан BIBD 12 June 2009 в 19:56
поделиться

3 ответа

Все, что они делают, это сопоставление гистограмм.

Итак, постройте гистограмму для ваших изображений. Нормализовать гистограммы по размеру изображения. Гистограмма - это вектор, содержащий столько же элементов, сколько цветов. Вам не нужны 32,24 или даже 16 бит точности, и это только замедлит вас. По соображениям производительности я бы сопоставил гистограммы с 4, 8 и 10-12 битами.

  • Проведите нечеткое сравнение с наименьшим расстоянием между всеми 4-битными гистограммами и вашими образцами цветов.
  • Затем возьмите этот набор и сравните 8-битную гистограмму.
  • Затем можно перейти к 10 или 12-битной гистограмме для сравнения с оставшимся набором. Это будет поиск с максимальной производительностью, поскольку вы сравниваете общий набор с очень небольшим количеством вычислений, чтобы найти небольшое подмножество.
  • Затем вы работаете с небольшим подмножеством с большим количеством вычислений и т. Д.

Настоящая большая уловка - найти лучший алгоритм для сопоставления похожих гистограмм.

  • Начнем с расчета расстояния. В трех измерениях, я думаю, это было:

    SQRT ((x1-x2) ^ 2 + (y1-y2) ^ 2 + (z1-z2) ^ 2)

Я делаю это по памяти, так что посмотрите это, чтобы убедиться.

  • Для ваших целей у вас будет более трех измерений, поэтому у вас будет больше терминов. 4-битная гистограмма будет иметь 16 членов, 8-битная - 256 и т. Д. Помните, что этот вид математики медленный, поэтому на самом деле не выполняйте часть SQRT . Если вы нормализуете размер ваших изображений достаточно маленьким, скажем, до 10 000 пикселей, тогда вы знаете, что вам нужно будет сделать только x ^ 2 для значений 0..10,0000. Предварительно вычислите таблицу поиска x ^ 2 , где x идет от 0..10 000. Тогда ваши расчеты пойдут быстро.

  • Когда вы выбираете цвет из палитры, просто создайте гистограмму с этим цветом = 10,0000. При выборе 2 сделайте гистограмму с color1 = 5000, color2 = 5000 и т. Д.

  • В конце вам придется добавить ложные факторы, чтобы приложение соответствовало реальному миру, но вы найдете их при тестировании.

]
5
ответ дан 5 December 2019 в 21:21
поделиться

Probably just creating a histogram of the colors used in the images, then doing a best fit to the user-selected colors.

0
ответ дан 5 December 2019 в 21:21
поделиться

Я бы посоветовал вам сгруппировать цвета, присутствующие в изображениях в вашей базе данных. Я имею в виду, для каждого изображения в вашей базе данных:

  • собрать цвета каждого пикселя в изображении
  • выполнить кластеризацию (скажем, кластеризацию k-mean с 5 кластерами) для собранных цветов
  • сохранить кластеризованные цвета как репрезентативный дескриптор изображения

Когда пользователь предоставляет набор из одного или нескольких цветов запроса, вы выполняете своего рода жадное сопоставление, выбирая наилучшее соответствие между заданными цветами и цветовым дескриптором (5 репрезентативных цветов) каждого изображения в вашем база данных.

Каков размер вашей коллекции изображений, потому что в зависимости от размера некоторая поисковая индексация может быть более серьезной проблемой, чем сам алогорит?

2
ответ дан 5 December 2019 в 21:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: