2014-01-06 2 views
1

У меня есть метод, который вычисляет интегральное изображение (description here), обычно используемое в приложениях компьютерного зрения.iOS - C/C++ - ускорение интегрального вычисления изображения

float *Integral(unsigned char *grayscaleSource, int height, int width, int widthStep) 
{ 
    // convert the image to single channel 32f 
    unsigned char *img = grayscaleSource; 

    // set up variables for data access 
    int step = widthStep/sizeof(float); 
    uint8_t *data = (uint8_t *)img; 
    float *i_data = (float *)malloc(height * width * sizeof(float)); 

    // first row only 
    float rs = 0.0f; 
    for(int j=0; j<width; j++) 
    { 
     rs += (float)data[j]; 
     i_data[j] = rs; 
    } 

    // remaining cells are sum above and to the left 
    for(int i=1; i<height; ++i) 
    { 
     rs = 0.0f; 
     for(int j=0; j<width; ++j) 
     { 
      rs += data[i*step+j]; 
      i_data[i*step+j] = rs + i_data[(i-1)*step+j]; 
     } 
    } 

    // return the integral image 
    return i_data; 
} 

Я стараюсь сделать это как можно быстрее. Мне кажется, что это должно быть в состоянии использовать Apple Accelerate.framework или, возможно, ARM s neon intrinsics, но я не вижу точно, как это сделать. Похоже, что вложенный цикл потенциально довольно медленный (для приложений в реальном времени как минимум).

Кто-нибудь думает, что это возможно, чтобы ускорить использование любых других методов?

+0

Это не может быть как C++ *, так и объективом c. Выбери один. – Proxy

+1

@Proxy есть что-то под названием Objective-C++ –

+1

@Proxy. Сожалею. Да, C/C++ (или Objective-C++, как упоминал Брайан) на iOS. – Brett

ответ

3

Вы можете, конечно, векторизовать суммирование строк за строкой. Это vDSP_vadd(). Горизонтальное направление - vDSP_vrsum().

Если вы хотите написать свой собственный векторный код, горизонтальная сумма может быть ускорена чем-то вроде psadbw, но это Intel. Кроме того, взгляните на prefix sum algorithms, которые классически параллельны.

+0

Любые указатели на то, как реализовать этот подход? – Brett

Смежные вопросы