Pergunta

Estou tentando usar a estrutura Accelerate no iOS para ignorar o fato de que Core Image no iOS não oferece suporte a filtros/kernels personalizados.Estou desenvolvendo um filtro de detecção de bordas usando duas convoluções com um Kernel Sobel, mas começando com um simples desfoque gaussiano para pegar o jeito.Eu sei que o vImage é voltado para a manipulação de imagens como matrizes e o vDSP se concentra no processamento de sinais digitais usando transformadas de Fourier.Mas embora eu tenha começado a usar as funções vImage (vImageConvolve_XXXX, etc), estou ouvindo muitas pessoas discutindo o uso das funções do vDSP (vDSP_conv, vDSP_imgfir, etc) para fazer coisas como convoluções.Então isso me leva à questão em questão:quando devo usar um em vez do outro?Quais são as diferenças entre eles no que diz respeito às operações de convolução?Procurei em todos os lugares, mas não consegui encontrar uma resposta clara.Alguém pode lançar alguma luz sobre isso ou me indicar a direção certa?

Obrigado!

Foi útil?

Solução

Se o Vimage for fornecido a operação que você precisa, geralmente é mais simples usar isso.Vimage faz bloqueio de cache e rosqueamento para você, o VDSP não.VImage fornece operações em formatos intercalados e inteiros, que são frequentemente úteis para o processamento de imagens.

Outras dicas

Da última vez que experimentei, nenhum desses frameworks tirou proveito da separabilidade do kernel, o que proporciona uma enorme aumento de desempenho ao convoluir no domínio espacial - um aumento de desempenho muito maior do que as instruções vetorizadas jamais conseguirão.O kernel Sobel em particular é separável, então se você estiver usando vDSP ou vImage (em vez de dizer OpenCV), certifique-se de separar o kernel você mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top