Вопрос

Я пытаюсь использовать Accelerate framework на iOS, чтобы обойти тот факт, что Core Image на iOS не поддерживает пользовательские фильтры / ядра.Я разрабатываю фильтр обнаружения границ, используя две свертки с Ядро Собеля, но начнем с простого размытия по Гауссу, чтобы освоиться с этим.Я знаю, что vImage ориентирован на манипулирование изображениями в виде матриц, а vDSP фокусируется на обработке цифровых сигналов с использованием преобразований Фурье.Но хотя я начал использовать функции vImage (vImageConvolve_XXXX и т.д.), я слышу, как многие люди обсуждают использование функций vDSP (vDSP_conv, vDSP_imgfir и т.д.) Для выполнения таких вещей, как свертки.Итак, это подводит меня к рассматриваемому вопросу:когда я должен использовать одно поверх другого?В чем различия между ними в отношении операций свертки?Я искал везде, но не смог найти четкого ответа.Может ли кто-нибудь пролить некоторый свет на это или указать мне правильное направление?

Спасибо!

Это было полезно?

Решение

Если vImage предоставляет необходимую вам операцию, обычно ее проще всего использовать.vImage выполняет блокировку кэша и потоковую обработку для вас, vDSP - нет.vImage предоставляет операции с чередующимися и целочисленными форматами, которые часто полезны для обработки изображений.

Другие советы

В прошлый раз, когда я экспериментировал, ни один из этих фреймворков не воспользовался разделяемостью ядра, которая дает Огромный повышение производительности при свертке в пространственной области - гораздо большее повышение производительности, чем вы когда-либо получите от векторизованных инструкций.Ядро Sobel, в частности, является разделяемым, поэтому, если вы используете vDSP или vImage (вместо того, чтобы сказать OpenCV), обязательно отделите ядро самостоятельно.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top