iOS Accelerate Framework vImage - Melhoria de desempenho?
Estou trabalhando com o OpenCV e a estrutura Accelerate da Apple e considero o desempenho do Accelerate lento e a documentação da Apple limitada. Vamos pegar por exemplo:
void equalizeHistogram(const cv::Mat &planar8Image, cv::Mat &equalizedImage)
{
cv::Size size = planar8Image.size();
vImage_Buffer planarImageBuffer = {
.width = static_cast<vImagePixelCount>(size.width),
.height = static_cast<vImagePixelCount>(size.height),
.rowBytes = planar8Image.step,
.data = planar8Image.data
};
vImage_Buffer equalizedImageBuffer = {
.width = static_cast<vImagePixelCount>(size.width),
.height = static_cast<vImagePixelCount>(size.height),
.rowBytes = equalizedImage.step,
.data = equalizedImage.data
};
TIME_START(VIMAGE_EQUALIZE_HISTOGRAM);
vImage_Error error = vImageEqualization_Planar8(&planarImageBuffer, &equalizedImageBuffer, kvImageNoFlags);
TIME_END(VIMAGE_EQUALIZE_HISTOGRAM);
if (error != kvImageNoError) {
NSLog(@"%s, vImage error %zd", __PRETTY_FUNCTION__, error);
}
}
Essa chamada leva aproximadamente 20 ms. Qual tem o significado prático de ser inutilizável na minha aplicação. Talvez a equalização do histograma seja inerentemente lenta, mas eu também testei BGRA-> Grayscale e descobri que o OpenCV pode fazer isso em ~ 5ms e a vImage leva ~ 20ms.
Ao testar outras funções, encontrei umprojeto que criou um aplicativo deslizante simples com umfunção de desfoque (essência) que eu limpei para testar. Aproximadamente ~ 20ms também.
Existe algum truque para tornar essas funções mais rápidas?