Для большей свертки (5x5 и т. Д.) Вам необходимо создать новый тип фильтра, который выполняет эту свертку. Базовая свертка 3x3 предоставляется в рамках, потому что ее быстро и легко указать. Вы также получаете девять текстур, которые читаются почти бесплатно на большинстве устройств iOS.
Когда вы начинаете двигаться дальше, все становится намного дороже. Для свертки 5x5 требуется 25 текстурных надписей и т. Д. Это может привести к очень медленной обработке.
В результате операции, такие как размытие по Гауссу, выполняются в рамках с помощью разделимого ядра. Во-первых, изображение размыто по горизонтали, затем размытый горизонтальный результат размывается вертикально. Это значительно уменьшает количество считываний текстур и вычислений.
Я считаю, что фильтр Габора может быть представлен сепарабельным ядром (или серией сепарабельных ядер), как и попытка here. Вы могли бы перевести работу там в фрагментарный шейдер с заданным радиусом, чтобы реализовать ваш фильтр Габора более эффективным образом, чем просто свертка большой площади.
Спасибо за ваш ответ. В моем случае ядро 21x21 (работает лучше всего), но изображение обычно очень мало, в среднем не больше 40x40 пикселей. Мне нужно сделать gabor в этой конфигурации 36-72 раза для каждой части 40x40 пикселей. Выполнение этого с opencv filter2D не занимает много времени, но, безусловно, далеко от реального времени, что было бы очень желательно. –