Аппроксимации блочного фильтра для ориентированных фильтров Габора

Сейчас я читаю этот документ: Аппроксимации в модели HMAX. Меня особенно интересует аппроксимация фильтра Габора с использованием фильтров Box.

В прошлом году я разработал синтетический генератор отпечатков пальцев (вы можете увидеть некоторые из них здесь Как свернуть изображение с различными фильтрами Габора, отрегулированными в соответствии с локальной ориентацией и плотностью с помощью БПФ?).

Но самым большим недостатком генератора является время, необходимое для применения фильтра Габора. Я исследовал, как реализовать разделяемую версию фильтра, но потерпел ужасную неудачу, поскольку математика не является моей сильной стороной. Теперь это кажется лучше для моих нужд, чем разделяемый фильтр, поскольку он работает быстрее, а результаты кажутся достаточно хорошими для того, что мне нужно. Но я не понимаю, как реализовать блочную фильтрацию для габора из уравнения в этой статье.

Это происходит следующим образом:

В этом разделе мы попытаемся выполнить более грубое приближение фильтра для достижения значительно более высокой эффективности. В настоящее время слой S1 в модели состоит из простых линейных детекторов, которые моделируются с использованием ориентированных фильтров Габора. Однако ориентированные линии могут быть представлены с помощью гораздо более простых представлений, таких как блочные фильтры, как показано на рисунке 5. Эти фильтры имеют очень разреженные производные, что позволяет нам довольно эффективно вычислять свертки. Свертку изображения с фильтрами B(x, y) можно эффективно вычислить с помощью производных фильтра следующим образом.

http://s18.postimg.org/ozlw5kn55/formula.png

Вторая производная прямоугольного фильтра состоит только из импульсов и поэтому должна оцениваться только в четырех точках для каждой позиции на изображении. Интегральное изображение также может быть эффективно вычислено с использованием однопроходного алгоритма, описанного в [5, 1]. Стоимость свертки с использованием этого приближения составляет O(N2c), c=4. В отличие от других приближений, вычислительные затраты вообще не зависят от размера фильтра!

Что это за термины? Это интеграл от интеграла изображения? Извините, если я спрашиваю что-то сверхъестественное, но я, честно говоря, понятия не имею :(.


person AngelCastillo    schedule 25.05.2014    source источник
comment
d^2 B(x,y) / dxdy — вторая производная B(x,y) по x, затем y, // I(x,y) — второе интегрирование   -  person Khaled.K    schedule 25.05.2014
comment
@Khaled A Khunaifer - что это значит для цифровой обработки сигналов? знать символы довольно тривиально.   -  person Daniel Heilper    schedule 26.05.2014
comment
@ hellfire769 С точки зрения информатики, производная заменит линейный процесс на общую формулу по всей строке, в то время как интеграция технически является обратной.   -  person Khaled.K    schedule 26.05.2014
comment
Этот связанный вопрос имеет гораздо лучший ответ, чем тот, который в настоящее время принят здесь (который вообще не касается вопроса). Этот вопрос касается «интегральных изображений», поиск в Google по этому термину был бы хорошим первым шагом, чтобы узнать больше.   -  person Cris Luengo    schedule 10.12.2018


Ответы (1)


Уравнение правой стороны в вашем вопросе представляет собой бесконечно малое описание свертки - у вас есть оператор свертки " * ", который применяется к двумерному поддиапазону изображения - этот двумерный поддиапазон выражается как двумерный интеграл. Дискретное описание аналогично, но с двумерным поддиапазоном, выраженным оператором суммирования с использованием сигма-обозначения «Σ». вместо двумерного интеграла он применяется как «ΣΣ» (я не знаю, как поставить здесь математическую запись).

Наивная реализация свертки использует 2 цикла - в каждой точке изображения вы суммируете значения ядра, умноженные на эту точку и соседние точки -

P(x+c/2) = P(x)*C(1)+P(x+1)*C(2)...+P(x+c)*C(c) (c размер ядра). Процесс аналогичен длинному умножению или полиномиальному умножению на полиномиальное.

В основном свертка может применяться различными способами, один из способов прямой (суммирование) или путем преобразования в другие пространства (быстрое преобразование Фурье) - Теорема свертки.

Время БПФ составляет O(NlogN). использование БПФ для свертки эффективно, если размер ядра большой. В противном случае, если размер ядра мал: O(c) ‹ O(logN) — свертка выполняется быстрее. Поскольку размер фильтра равен 4, используйте прямую свертку.

Также вы можете распараллелить свертку (через cuda, open-mp и т.д...)

person Daniel Heilper    schedule 25.05.2014
comment
Спасибо, что нашли время, чтобы ответить, я уже реализовал как прямую свертку, так и БПФ фильтра Габора, я хотел реализовать это приближение блочного фильтра к фильтру Габора, но в основном это не показывает, как аппроксимирует блочный фильтр фильтр Габора, но только общее понятие свертки? - person AngelCastillo; 26.05.2014
comment
@AngelCastillo - о аппроксимации фильтра - я кратко просмотрел статью - аппроксимация появляется в разделе 2.1: Аппроксимации на уровне S1 - разделяемые фильтры. Это первый слой, он показывает приближение к блоку Габора — см. развитие уравнения экспоненты к f(x) g (y) (7, 8). Существует матрица вращения для получения всех фильтров. Я бы еще для простоты поставил коэффициент анизотропии на 1 (для начала) - person Daniel Heilper; 26.05.2014
comment
Привет, @chook, спасибо за помощь, следуя формуле для f(x), я получил x=exp(-(x^2)/(2* (sigmasigma))*exp(sqrt( -1)*xcos(theta)), обратите внимание на sqrt(-1) (ix), я не могу сделать это на С++, не прибегая к комплексным числам, есть ли способ изменить это на что-то эквивалентное? Я не уверен, что из этого сделать, даже если я использую комплексные числа, результатом всего выражения будет комплексное число, и я не знаю, как фильтровать их. Спасибо за ваше время. - person AngelCastillo; 27.05.2014