VImage vs vDSP de Accelerate

Estoy tratando de utilizar el marco de trabajo Accelerate en iOS para evitar el hecho de que Core Image en iOS no admite filters / kernels personalizados. Estoy desarrollando un filter de detección de bordes utilizando dos circunvoluciones con un kernel de Sobel , pero comenzando con una simple falta de definición de Gauss para get sus cuelgues. Sé que vImage está orientado a la manipulación de imágenes como matrices y vDSP se enfoca en el procesamiento de señales digitales usando transformadas de Fourier. Pero aunque empecé a usar las funciones de vImage (vImageConvolve_XXXX, etc.), escucho a muchas personas que discuten el uso de las funciones de vDSP (vDSP_conv, vDSP_imgfir, etc.) para hacer cosas como convoluciones. Entonces, eso me lleva a la pregunta: ¿cuándo debo usar uno sobre el otro? ¿Cuáles son las diferencias entre ellos con respecto a las operaciones de convolución? He buscado en todas partes pero no pude encontrar una respuesta clara. ¿Alguien puede arrojarle algunas luces o señalarme en la dirección correcta?

¡Gracias!

Si vImage proporciona la operación que necesita, generalmente es más simple usar eso. vImage hace locking de caching y subprocesss para usted, vDSP no lo hace. vImage proporciona operaciones en formattings intercalados y integers, que a menudo son útiles para el image processing.

La última vez que experimenté, ninguno de estos frameworks aprovechó la separabilidad del kernel, lo que ofrece un gran aumento en el performance cuando convoluciona en el dominio espacial, un aumento de performance mucho mayor que las instrucciones vectorizadas. El kernel de Sobel en particular es separable, por lo que si está utilizando vDSP o vImage (en lugar de decir OpenCV ), asegúrese de separar el kernel usted mismo.